import { Body, Controller, Delete, Get, Param, Patch, Post } from '@nestjs/common'; import { BaseController } from 'src/common/base.controller'; import { Parents } from 'src/entities/parents.entity'; import { ParentsService } from './parents.service'; import { Roles } from 'src/common/decorators/roles.decorator'; import { RoleType } from 'src/entities/users.entity'; import * as typeorm from 'typeorm'; import { ApiBody, ApiResponse, ApiTags } from '@nestjs/swagger'; import { CreateParentDto } from '../user/dto/create_parent.dto'; import { UpdateParentsDto } from '../user/dto/update_parent.dto'; @ApiTags('Parents') @Controller('parents') export class ParentsController extends BaseController { constructor(private readonly parentsService: ParentsService) { super(parentsService); } //Lister tous les parents @Roles(RoleType.SUPER_ADMIN, RoleType.GESTIONNAIRE) //Seul les utilisateurs super admin et gestionnaire peuvent accéder à cette route @Get() @ApiResponse({ status: 200, description: 'Liste des parents' }) @ApiResponse({ status: 403, description: 'Accès refusé : Reservé aux super_admins' }) override getAll(): Promise { return this.parentsService.findAll(); } //Rechercher par user_id @Roles(RoleType.SUPER_ADMIN, RoleType.GESTIONNAIRE) //Seul les utilisateurs super admin et gestionnaire peuvent accéder à cette route @Get(':id') @ApiResponse({ status: 200, description: 'Détails du parent par ID utilisateur' }) @ApiResponse({ status: 404, description: 'Parent non trouvé' }) getOne(@Param('id') user_id: string): Promise { return this.parentsService.findOne(user_id); } //Creation de parents @Post() @Roles(RoleType.SUPER_ADMIN, RoleType.GESTIONNAIRE) @ApiBody({ type: CreateParentDto }) @ApiResponse({ status: 201, description: 'Parent créé avec succès' }) create(data: typeorm.DeepPartial): Promise { const dto = data as CreateParentDto; return this.parentsService.create({ ...dto, user: { ...(dto as any).user, role: RoleType.PARENT } }); } //Modifier un parent @Roles(RoleType.SUPER_ADMIN, RoleType.GESTIONNAIRE) //Seul les utilisateurs super admin et gestionnaire peuvent accéder à cette route @Patch(':id') @ApiBody({ type: UpdateParentsDto }) @ApiResponse({ status: 200, description: 'Parent mis a jour avec succès' }) @ApiResponse({ status: 404, description: 'Parent introuvable' }) update( @Param('id') id: string, @Body() dto: UpdateParentsDto ): Promise { return this.parentsService.update(id, dto); } //Supprmer un parent @Roles(RoleType.SUPER_ADMIN, RoleType.GESTIONNAIRE) //Seul les utilisateurs super admin et gestionnaire peuvent accéder à cette route @Delete(':id') @ApiResponse({ status: 200, description: 'Parent supprime avec succès' }) @ApiResponse({ status: 404, description: 'Parent introuvable' }) @ApiResponse({ status: 403, description: 'Acces refuse' }) remove(@Param('id') id: string): Promise { return this.parentsService.remove(id); } }