File

src/modules/user/controllers/user.controller.ts

Prefix

Users

Index

Methods

Methods

Async checkEmail
checkEmail(email: string)
Decorators :
@Get('/:email/checkEmail')
@HttpCode(HttpStatus.OK)
@ApiResponse({status: undefined, description: 'Check Email', type: AbstractCheckDto})
Parameters :
Name Type Optional
email string No
Async deleteUser
deleteUser(uuid: string)
Decorators :
@Delete('/:uuid')
@UseGuards(AuthGuard, RolesGuard)
@ApiBearerAuth()
@Roles(RoleType.ADMIN, RoleType.ROOT)
@ApiResponse({status: undefined})
Parameters :
Name Type Optional
uuid string No
Returns : Promise<void>
Async getAccountData
getAccountData(user: UserEntity)
Decorators :
@Get('/me')
@UseGuards(AuthGuard)
@UseInterceptors(AuthUserInterceptor)
@ApiBearerAuth()
@HttpCode(HttpStatus.OK)
@ApiResponse({status: undefined, description: 'Get Own Account', type: UserDto})
Parameters :
Name Type Optional
user UserEntity No
Returns : Promise<UserDto>
Async getAllUsers
getAllUsers(user: UserEntity, pageOptionsDto: UsersPageOptionsDto)
Decorators :
@Get('/')
@UseGuards(AuthGuard, RolesGuard)
@ApiBearerAuth()
@Roles(RoleType.ADMIN, RoleType.ROOT, RoleType.P_ADMIN)
@ApiResponse({status: undefined, description: 'Get All Users (need Root/Admin User permissions)', type: UsersPageDto})
Parameters :
Name Type Optional
user UserEntity No
pageOptionsDto UsersPageOptionsDto No
Async getUserData
getUserData(uuid: string)
Decorators :
@Get('/:uuid')
@UseGuards(AuthGuard, RolesGuard)
@ApiBearerAuth()
@Roles(RoleType.ADMIN, RoleType.ROOT)
@ApiResponse({status: undefined, description: 'Get All Users (need Root/Admin User permissions)', type: UserDto})
Parameters :
Name Type Optional
uuid string No
Returns : Promise<UserDto>
Async setAccountData
setAccountData(user: UserEntity, userUpdateDto: UserSelfUpdateDto)
Decorators :
@Patch('/updateMe')
@UseGuards(AuthGuard)
@UseInterceptors(AuthUserInterceptor)
@ApiBearerAuth()
@HttpCode(HttpStatus.OK)
@ApiResponse({status: undefined, description: 'Update Own Account', type: UserDto})
Parameters :
Name Type Optional
user UserEntity No
userUpdateDto UserSelfUpdateDto No
Returns : Promise<UserDto>
Async updateUser
updateUser(uuid: string, user: UserEntity, userUpdateDto: UserUpdateDto)
Decorators :
@Patch('/:uuid')
@UseGuards(AuthGuard, RolesGuard)
@ApiBearerAuth()
@Roles(RoleType.ADMIN, RoleType.ROOT, RoleType.P_ADMIN)
@ApiResponse({status: undefined, description: 'Update User by UUID (need Root/Admin User permissions)', type: UserDto})
Parameters :
Name Type Optional
uuid string No
user UserEntity No
userUpdateDto UserUpdateDto No
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);
  }
}

result-matching ""

    No results matching ""