diff --git a/src/Profesor/profesor.controller.ts b/src/Profesor/profesor.controller.ts index 68e1215..a9c74c8 100644 --- a/src/Profesor/profesor.controller.ts +++ b/src/Profesor/profesor.controller.ts @@ -17,11 +17,11 @@ export class ProfesorController { } @Get('page') - findAllPaginated(@Query('page') page: number = 1, @Query('limit') limit: number = 10) { + findAllPaginated(@Query('page') page: number = 1, @Query('limit') limit: number = 10, @Query() filters: any) { page = page < 1 ? 1 : page; - limit = limit > 10 || limit < 1 ? 10 : limit; // Limitar el límite máximo a 10 por página + limit = limit > 10 || limit < 1 ? 10 : limit; - return this.profesorService.findAllPaginated(page, limit); + return this.profesorService.findAllPaginated(page, limit, filters); } @Put(':id_profesor') diff --git a/src/Profesor/profesor.service.ts b/src/Profesor/profesor.service.ts index 3dba275..56c8d28 100644 --- a/src/Profesor/profesor.service.ts +++ b/src/Profesor/profesor.service.ts @@ -100,14 +100,30 @@ export class ProfesorService { return query.getMany(); } - async findAllPaginated(page: number, limit: number): Promise<{ profesores: Profesor[], total: number, totalPages: number }> { - const [profesores, total] = await this.profesorRepository.findAndCount({ - skip: (page - 1) * limit, - take: limit, - order: { - nombre: 'ASC', - }, - }); + async findAllPaginated(page: number, limit: number, filters: any): Promise<{ profesores: Profesor[], total: number, totalPages: number }> { + const query = this.profesorRepository.createQueryBuilder('profesor'); + + if (filters.nombre) { + query.andWhere('profesor.nombre LIKE :nombre', { nombre: `%${filters.nombre}%` }); + } + + if (filters.adscripcion) { + query.andWhere('profesor.adscripcion = :adscripcion', { adscripcion: filters.adscripcion }); + } + + if (filters.categoria) { + query.andWhere('profesor.categoria = :categoria', { categoria: filters.categoria }); + } + + if (filters.edificio) { + query.andWhere('profesor.edificio = :edificio', { edificio: filters.edificio }); + } + + const [profesores, total] = await query + .skip((page - 1) * limit) + .take(limit) + .orderBy('profesor.nombre', 'ASC') + .getManyAndCount(); const totalPages = Math.ceil(total / limit);