import { Body, Controller, Delete, Get, Param, ParseUUIDPipe, Patch, Post, Req, } from '@nestjs/common'; import type { FastifyRequest } from 'fastify'; import { RequirePermissions } from '../common/decorators/permissions.decorator'; import { CurrentUser } from '../common/decorators/current-user.decorator'; import type { AuthenticatedUser } from '../common/guards/auth.guard'; import { RolesService } from './roles.service'; import { CreateRoleDto } from './dto/create-role.dto'; import { UpdateRoleDto } from './dto/update-role.dto'; @Controller('roles') @RequirePermissions('roles.manage') export class RolesController { constructor(private readonly rolesService: RolesService) {} @Get('permissions') listPermissionCatalog() { return this.rolesService.listPermissionCatalog(); } @Get() list() { return this.rolesService.list(); } @Post() create( @Body() dto: CreateRoleDto, @CurrentUser() actor: AuthenticatedUser, @Req() request: FastifyRequest, ) { return this.rolesService.create(dto, actor, { ip: request.ip, userAgent: request.headers['user-agent'], }); } @Patch(':id') update( @Param('id', ParseUUIDPipe) id: string, @Body() dto: UpdateRoleDto, @CurrentUser() actor: AuthenticatedUser, @Req() request: FastifyRequest, ) { return this.rolesService.update(id, dto, actor, { ip: request.ip, userAgent: request.headers['user-agent'], }); } @Delete(':id') remove( @Param('id', ParseUUIDPipe) id: string, @CurrentUser() actor: AuthenticatedUser, @Req() request: FastifyRequest, ) { return this.rolesService.delete(id, actor, { ip: request.ip, userAgent: request.headers['user-agent'], }); } }