import { Body, Controller, Get, Param, Patch, Post } from '@nestjs/common'; import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; import { RequirePermission } from '../auth/decorators/require-permission.decorator'; import { CurrentUser } from '../auth/decorators/current-user.decorator'; import type { AuthenticatedUser } from '../auth/types/authenticated-user'; import { CreateUserDto } from './dto/create-user.dto'; import { UpdateUserDto } from './dto/update-user.dto'; import { ResetUserPasswordDto } from './dto/reset-user-password.dto'; import { UsersService } from './users.service'; @ApiTags('users') @ApiBearerAuth() @Controller('users') export class UsersController { constructor(private readonly usersService: UsersService) {} @RequirePermission('users:read') @Get() findAll() { return this.usersService.findAll(); } @RequirePermission('users:create') @Post() create(@Body() dto: CreateUserDto, @CurrentUser() actor: AuthenticatedUser) { return this.usersService.create(dto, actor.id); } @RequirePermission('users:read') @Get(':id') findOne(@Param('id') id: string) { return this.usersService.findSummaryById(id); } @RequirePermission('users:update') @Patch(':id') update( @Param('id') id: string, @Body() dto: UpdateUserDto, @CurrentUser() actor: AuthenticatedUser, ) { return this.usersService.update(id, dto, actor.id); } @RequirePermission('users:deactivate') @Post(':id/deactivate') deactivate(@Param('id') id: string, @CurrentUser() actor: AuthenticatedUser) { return this.usersService.deactivate(id, actor.id); } @RequirePermission('users:deactivate') @Post(':id/activate') activate(@Param('id') id: string, @CurrentUser() actor: AuthenticatedUser) { return this.usersService.activate(id, actor.id); } @RequirePermission('users:update') @Post(':id/reset-password') resetPassword( @Param('id') id: string, @Body() dto: ResetUserPasswordDto, @CurrentUser() actor: AuthenticatedUser, ) { return this.usersService.resetPassword(id, dto, actor.id); } @RequirePermission('users:update') @Post(':id/mfa/reset') resetMfa(@Param('id') id: string, @CurrentUser() actor: AuthenticatedUser) { return this.usersService.resetMfa(id, actor.id); } }