src/modules/user/controllers/user.controller.ts
Users
Methods |
|
Async checkEmail | ||||||
checkEmail(email: string)
|
||||||
Decorators :
@Get('/:email/checkEmail')
|
||||||
Parameters :
Returns :
Promise<AbstractCheckDto>
|
Async deleteUser | ||||||
deleteUser(uuid: string)
|
||||||
Decorators :
@Delete('/:uuid')
|
||||||
Parameters :
Returns :
Promise<void>
|
Async getAccountData | ||||||
getAccountData(user: UserEntity)
|
||||||
Decorators :
@Get('/me')
|
||||||
Parameters :
Returns :
Promise<UserDto>
|
Async getAllUsers | |||||||||
getAllUsers(user: UserEntity, pageOptionsDto: UsersPageOptionsDto)
|
|||||||||
Decorators :
@Get('/')
|
|||||||||
Parameters :
Returns :
Promise<UsersPageDto>
|
Async getUserData | ||||||
getUserData(uuid: string)
|
||||||
Decorators :
@Get('/:uuid')
|
||||||
Parameters :
Returns :
Promise<UserDto>
|
Async setAccountData | |||||||||
setAccountData(user: UserEntity, userUpdateDto: UserSelfUpdateDto)
|
|||||||||
Decorators :
@Patch('/updateMe')
|
|||||||||
Parameters :
Returns :
Promise<UserDto>
|
Async updateUser | ||||||||||||
updateUser(uuid: string, user: UserEntity, userUpdateDto: UserUpdateDto)
|
||||||||||||
Decorators :
@Patch('/:uuid')
|
||||||||||||
Parameters :
Returns :
Promise<UserDto>
|
import {
Controller,
Get,
HttpCode,
HttpStatus,
Param,
Patch,
UseGuards,
UseInterceptors,
Body,
Delete,
Query,
ValidationPipe
} from '@nestjs/common';
import { ApiBearerAuth, ApiResponse, ApiTags } from '@nestjs/swagger';
import { RoleType } from 'common/constants';
import { AbstractCheckDto } from 'common/dtos';
import { AuthUser, Roles } from 'decorators';
import { AuthGuard, RolesGuard } from 'guards';
import { AuthUserInterceptor } from 'interceptors';
import { UserEntity } from 'modules/user/entities';
import { UserService } from 'modules/user/services';
import { UserDto, UserUpdateDto, UsersPageOptionsDto, UsersPageDto, UserSelfUpdateDto } from 'modules/user/dtos';
@Controller('Users')
@ApiTags('Users')
export class UserController {
constructor(
private readonly _userService: UserService,
) {}
@Get('/me')
@UseGuards(AuthGuard)
@UseInterceptors(AuthUserInterceptor)
@ApiBearerAuth()
@HttpCode(HttpStatus.OK)
@ApiResponse({
status: HttpStatus.OK,
description: 'Get Own Account',
type: UserDto,
})
async getAccountData(@AuthUser() user: UserEntity): Promise<UserDto> {
const userEntity = await this._userService.getUser({ uuid: user.uuid });
return userEntity.toDto();
}
@Patch('/updateMe')
@UseGuards(AuthGuard)
@UseInterceptors(AuthUserInterceptor)
@ApiBearerAuth()
@HttpCode(HttpStatus.OK)
@ApiResponse({
status: HttpStatus.OK,
description: 'Update Own Account',
type: UserDto,
})
async setAccountData(
@AuthUser() user: UserEntity,
@Body() userUpdateDto: UserSelfUpdateDto,
): Promise<UserDto> {
const userWithNewData = await this._userService.updateOwnAccount(
user,
userUpdateDto,
);
return userWithNewData.toDto();
}
@Get('/:email/checkEmail')
@HttpCode(HttpStatus.OK)
@ApiResponse({
status: HttpStatus.OK,
description: 'Check Email',
type: AbstractCheckDto,
})
async checkEmail(@Param('email') email: string): Promise<AbstractCheckDto> {
const userEmail = await this._userService.getUser({
email: email.toLocaleLowerCase(),
});
return new AbstractCheckDto(userEmail);
}
@Get('/')
@UseGuards(AuthGuard, RolesGuard)
@ApiBearerAuth()
@Roles(RoleType.ADMIN, RoleType.ROOT, RoleType.P_ADMIN)
@ApiResponse({
status: HttpStatus.OK,
description: 'Get All Users (need Root/Admin User permissions)',
type: UsersPageDto,
})
async getAllUsers(
@AuthUser() user: UserEntity,
@Query(new ValidationPipe({ transform: true }))
pageOptionsDto: UsersPageOptionsDto,
): Promise<UsersPageDto> {
return this._userService.getUsers(user,pageOptionsDto);
}
@Get('/:uuid')
@UseGuards(AuthGuard, RolesGuard)
@ApiBearerAuth()
@Roles(RoleType.ADMIN, RoleType.ROOT)
@ApiResponse({
status: HttpStatus.OK,
description: 'Get All Users (need Root/Admin User permissions)',
type: UserDto,
})
async getUserData(
@Param('uuid') uuid: string
): Promise<UserDto> {
const userEntity = await this._userService.getUser({ uuid: uuid });
return userEntity.toDto();
}
@Patch('/:uuid')
@UseGuards(AuthGuard, RolesGuard)
@ApiBearerAuth()
@Roles(RoleType.ADMIN, RoleType.ROOT, RoleType.P_ADMIN)
@ApiResponse({
status: HttpStatus.OK,
description: 'Update User by UUID (need Root/Admin User permissions)',
type: UserDto,
})
async updateUser(
@Param('uuid') uuid: string,
@AuthUser() user: UserEntity,
@Body() userUpdateDto: UserUpdateDto,
): Promise<UserDto> {
const userWithNewData = await this._userService.updateUserData(
uuid,
user,
userUpdateDto,
);
return userWithNewData.toDto();
}
@Delete('/:uuid')
@UseGuards(AuthGuard, RolesGuard)
@ApiBearerAuth()
@Roles(RoleType.ADMIN, RoleType.ROOT)
@ApiResponse({
status: HttpStatus.OK,
})
async deleteUser(
@Param('uuid') uuid: string
): Promise<void> {
return await this._userService.deleteUser(uuid);
}
}