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 { PERMISSION_CATALOG } from '../auth/permissions/permission-catalog'; import { CreateRoleDto } from './dto/create-role.dto'; import { UpdateRoleDto } from './dto/update-role.dto'; import { RolesService } from './roles.service'; @ApiTags('roles') @ApiBearerAuth() @Controller('roles') export class RolesController { constructor(private readonly rolesService: RolesService) {} @Get('permission-catalog') @RequirePermission('roles:read') getPermissionCatalog() { return PERMISSION_CATALOG; } @Get() @RequirePermission('roles:read') findAll() { return this.rolesService.findAll(); } @Get(':id') @RequirePermission('roles:read') findOne(@Param('id') id: string) { return this.rolesService.findSummaryById(id); } @Post() @RequirePermission('roles:create') create(@Body() dto: CreateRoleDto, @CurrentUser() actor: AuthenticatedUser) { return this.rolesService.create(dto, actor.id); } @Patch(':id') @RequirePermission('roles:update') update( @Param('id') id: string, @Body() dto: UpdateRoleDto, @CurrentUser() actor: AuthenticatedUser, ) { return this.rolesService.update(id, dto, actor.id); } @Post(':id/deactivate') @RequirePermission('roles:deactivate') deactivate(@Param('id') id: string, @CurrentUser() actor: AuthenticatedUser) { return this.rolesService.deactivate(id, actor.id); } @Post(':id/reactivate') @RequirePermission('roles:deactivate') reactivate(@Param('id') id: string, @CurrentUser() actor: AuthenticatedUser) { return this.rolesService.reactivate(id, actor.id); } }