import { Body, Controller, Delete, Get, Inject, Param, Patch, Post } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; import { AuditAction } from '../audit/audit.metadata.js'; import { CurrentUserParam, RequirePermissions, type CurrentUser } from '../security/security.metadata.js'; import { UsersService } from './users.service.js'; @ApiTags('users') @Controller('users') export class UsersController { constructor(@Inject(UsersService) private readonly usersService: UsersService) {} @Get() @RequirePermissions('users.view') list() { return this.usersService.list(); } @Post() @RequirePermissions('users.manage') @AuditAction({ module: 'users', action: 'create', objectType: 'user' }) create(@Body() body: unknown, @CurrentUserParam() currentUser?: CurrentUser) { return this.usersService.create(body as never, currentUser?.id); } @Patch(':id') @RequirePermissions('users.manage') @AuditAction({ module: 'users', action: 'update', objectType: 'user', objectIdParam: 'id' }) update(@Param('id') id: string, @Body() body: unknown, @CurrentUserParam() currentUser?: CurrentUser) { return this.usersService.update(id, body as never, currentUser?.id); } @Post(':id/reset-password') @RequirePermissions('users.manage') @AuditAction({ module: 'users', action: 'reset_password', objectType: 'user', objectIdParam: 'id' }) resetPassword(@Param('id') id: string, @Body() body: unknown, @CurrentUserParam() currentUser?: CurrentUser) { return this.usersService.resetPassword(id, body as never, currentUser?.id); } @Delete(':id') @RequirePermissions('users.manage') @AuditAction({ module: 'users', action: 'delete', objectType: 'user', objectIdParam: 'id' }) remove(@Param('id') id: string, @CurrentUserParam() currentUser?: CurrentUser) { return this.usersService.remove(id, currentUser?.id); } }