import { Body, Controller, Delete, Get, HttpException, Logger, Param, ParseIntPipe, Post, Put, Query, UseGuards } from "@nestjs/common"; import { ProfesorService } from "./profesor.service"; import { profesorDto, UpdateProfesorImageDto } from "./dto/profesorDto.dto"; import { Roles } from "../permissions/roles.decorator"; import { RolesGuard } from "../permissions/roles.guard"; import { Role } from "../permissions/role.enum"; import { Profesor } from "./entities/profesor.entity"; @Controller("profesor") @UseGuards(RolesGuard) export class ProfesorController { constructor(private profesorService: ProfesorService) { } @Post() @Roles(Role.Responsable, Role.Admin) async register(@Body() data: profesorDto) { Logger.debug("register profesor"); return this.profesorService.register(data); } @Put(':id_profesor/image') async updateImage( @Param('id_profesor') id_profesor: number, @Body() updateProfesorImageDto: UpdateProfesorImageDto, ): Promise { const { fotografia } = updateProfesorImageDto; const profesor = await this.profesorService.findOne(id_profesor); if (!profesor) { throw new HttpException('Profesor not found', 404); } profesor.fotografia = fotografia; return this.profesorService.update(profesor); } @Get() findAll() { Logger.debug("findAllProfesors"); return this.profesorService.findAll(); } @Get("page") findAllPaginated(@Query("page") page: number = 1, @Query("limit") limit: number = 10, @Query() filters: any) { try { Logger.debug("Page Profesors"); page = page < 1 ? 1 : page; limit = limit > 10 || limit < 1 ? 10 : limit; return this.profesorService.findAllPaginated(page, limit, filters); } catch (err) { Logger.error("profesor controller ", err.error); return []; } } @Put(":id_profesor") @Roles(Role.Responsable, Role.Admin) async modify(@Param("id_profesor", ParseIntPipe) id_profesor: number, @Body() data: profesorDto) { Logger.debug("put Profesors by id"); return this.profesorService.modify(id_profesor, data); } @Delete(":id_profesor") @Roles(Role.Responsable, Role.Admin) async remove(@Param("id_profesor", ParseIntPipe) id_profesor: number) { Logger.debug("delete Profesors by id"); return this.profesorService.remove(id_profesor); } @Get(":id_profesor") async profile(@Param("id_profesor", ParseIntPipe) id_profesor: number) { Logger.debug("get Profesors by id"); return this.profesorService.profile(id_profesor); } }