import { Controller, Get, Post, Body, Patch, Param, Delete, UseGuards } from '@nestjs/common'; import { RelaisService } from './relais.service'; import { CreateRelaisDto } from './dto/create-relais.dto'; import { UpdateRelaisDto } from './dto/update-relais.dto'; import { ApiBearerAuth, ApiTags, ApiOperation, ApiResponse } from '@nestjs/swagger'; import { AuthGuard } from 'src/common/guards/auth.guard'; import { RolesGuard } from 'src/common/guards/roles.guard'; import { Roles } from 'src/common/decorators/roles.decorator'; import { RoleType } from 'src/entities/users.entity'; @ApiTags('Relais') @ApiBearerAuth('access-token') @UseGuards(AuthGuard, RolesGuard) @Controller('relais') export class RelaisController { constructor(private readonly relaisService: RelaisService) {} @Post() @Roles(RoleType.SUPER_ADMIN, RoleType.ADMINISTRATEUR) @ApiOperation({ summary: 'Créer un relais' }) @ApiResponse({ status: 201, description: 'Le relais a été créé.' }) create(@Body() createRelaisDto: CreateRelaisDto) { return this.relaisService.create(createRelaisDto); } @Get() @Roles(RoleType.SUPER_ADMIN, RoleType.ADMINISTRATEUR, RoleType.GESTIONNAIRE) @ApiOperation({ summary: 'Lister tous les relais', description: 'Lecture ouverte aux gestionnaires (combobox fiches). CRUD write reste admin-only. Ticket #151.', }) @ApiResponse({ status: 200, description: 'Liste des relais.' }) findAll() { return this.relaisService.findAll(); } @Get(':id') @Roles(RoleType.SUPER_ADMIN, RoleType.ADMINISTRATEUR, RoleType.GESTIONNAIRE) @ApiOperation({ summary: 'Récupérer un relais par ID' }) @ApiResponse({ status: 200, description: 'Le relais trouvé.' }) findOne(@Param('id') id: string) { return this.relaisService.findOne(id); } @Patch(':id') @Roles(RoleType.SUPER_ADMIN, RoleType.ADMINISTRATEUR) @ApiOperation({ summary: 'Mettre à jour un relais' }) @ApiResponse({ status: 200, description: 'Le relais a été mis à jour.' }) update(@Param('id') id: string, @Body() updateRelaisDto: UpdateRelaisDto) { return this.relaisService.update(id, updateRelaisDto); } @Delete(':id') @Roles(RoleType.SUPER_ADMIN, RoleType.ADMINISTRATEUR) @ApiOperation({ summary: 'Supprimer un relais' }) @ApiResponse({ status: 200, description: 'Le relais a été supprimé.' }) remove(@Param('id') id: string) { return this.relaisService.remove(id); } }