File

src/models/user/user.controller.ts

Prefix

user

Description

Exposes user CRUD endpoints

Index

Methods

Methods

create
create(createUserDto: CreateUserDto)
Decorators :
@ApiOperation({summary: 'Creates a new user'})
@Public()
@Post()

Creates a new user

Parameters :
Name Type Optional
createUserDto CreateUserDto No
Returns : Promise<void>
Async findById
findById(request: Request)
Decorators :
@ApiOperation({summary: 'Gets user's own profile'})
@ApiBearerAuth()
@Get()

Returns user's own profile information without password

Parameters :
Name Type Optional
request Request No
Returns : Promise<UserWithoutPassword>
remove
remove(request: Request, deleteUserDto: DeleteUserDto)
Decorators :
@ApiOperation({summary: 'Deletes user'})
@ApiBearerAuth()
@Delete()
@HttpCode(HttpStatus.NO_CONTENT)

Deletes user and all user related information from the system

Parameters :
Name Type Optional
request Request No
deleteUserDto DeleteUserDto No
Returns : Promise<void>
update
update(request: Request, updateUserDto: UpdateUserDto)
Decorators :
@ApiOperation({summary: 'Updates user'})
@ApiBearerAuth()
@Patch()

Updates user information

Parameters :
Name Type Optional
request Request No
updateUserDto UpdateUserDto No
Returns : Promise<UserWithoutPassword>
updateUserRole
updateUserRole(updateUserRoleDto: UpdateUserRoleDto)
Decorators :
@ApiOperation({summary: 'Admin set user's role'})
@IsAdmin()
@Patch('role')

Updates user role, only for admins

Parameters :
Name Type Optional
updateUserRoleDto UpdateUserRoleDto No
Returns : Promise<UserWithoutPassword>
import {
  Body,
  Controller,
  Delete,
  Get,
  HttpCode,
  HttpStatus,
  Patch,
  Post,
  Req,
} from '@nestjs/common';
import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger';
import { Request } from 'express';
import { Public } from 'src/auth/public.decorator';
import { IsAdmin } from 'src/common/decorators/is-admin.decorator';
import { CreateUserDto } from './dto/create-user.dto';
import { DeleteUserDto } from './dto/delete-user.dto';
import { UpdateUserRoleDto } from './dto/update-user-role.dto';
import { UpdateUserDto } from './dto/update-user.dto';
import { UserWithoutPassword } from './entities/user-without-password.entity';
import { UserService } from './user.service';

/** Exposes user CRUD endpoints */
@ApiTags('user')
@Controller('user')
export class UserController {
  /** Exposes user CRUD endpoints
   *
   * Instantiate class and UserService dependency
   */
  constructor(private readonly userService: UserService) {}

  /** Creates a new user */
  @ApiOperation({ summary: 'Creates a new user' })
  @Public()
  @Post()
  create(@Body() createUserDto: CreateUserDto): Promise<void> {
    return this.userService.create(createUserDto);
  }

  /** Returns user's own profile information without password */
  @ApiOperation({ summary: "Gets user's own profile" })
  @ApiBearerAuth()
  @Get()
  async findById(@Req() request: Request): Promise<UserWithoutPassword> {
    const userId = request.user['userId'];

    return this.userService.findById(userId);
  }

  /** Updates user information */
  @ApiOperation({ summary: 'Updates user' })
  @ApiBearerAuth()
  @Patch()
  update(
    @Req() request: Request,
    @Body() updateUserDto: UpdateUserDto,
  ): Promise<UserWithoutPassword> {
    const userId = request.user['userId'];

    return this.userService.update(userId, updateUserDto);
  }

  /** Updates user role, only for admins */
  @ApiOperation({ summary: "Admin set user's role" })
  @IsAdmin()
  @Patch('role')
  updateUserRole(
    @Body() updateUserRoleDto: UpdateUserRoleDto,
  ): Promise<UserWithoutPassword> {
    return this.userService.updateUserRole(updateUserRoleDto);
  }

  /** Deletes user and all user related information from the system */
  @ApiOperation({ summary: 'Deletes user' })
  @ApiBearerAuth()
  @Delete()
  @HttpCode(HttpStatus.NO_CONTENT)
  remove(
    @Req() request: Request,
    @Body() deleteUserDto: DeleteUserDto,
  ): Promise<void> {
    const userId = request.user['userId'];

    return this.userService.remove(userId, deleteUserDto);
  }
}

results matching ""

    No results matching ""