46 lines
1.8 KiB
TypeScript
46 lines
1.8 KiB
TypeScript
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);
|
|
}
|
|
}
|