From 894851f16d3301dba6724ed039b94a89f1c870b9 Mon Sep 17 00:00:00 2001 From: lemuel Date: Fri, 23 Dec 2022 10:53:38 -0600 Subject: [PATCH] modulo motivo service final --- src/modulo-motivo/modulo-motivo.controller.ts | 40 +++++++++-------- src/modulo-motivo/modulo-motivo.service.ts | 43 +++++++++++++------ src/modulo/modulo.service.ts | 2 +- 3 files changed, 52 insertions(+), 33 deletions(-) diff --git a/src/modulo-motivo/modulo-motivo.controller.ts b/src/modulo-motivo/modulo-motivo.controller.ts index 458d5f9..43bf7e7 100644 --- a/src/modulo-motivo/modulo-motivo.controller.ts +++ b/src/modulo-motivo/modulo-motivo.controller.ts @@ -39,29 +39,31 @@ export class ModuloMotivoController { this.validarUsuarioService.validarAdmin(admin); return this.moduloMotivoService.findAllByIdModulo( + admin, parseInt(query.id_modulo), parseInt(query.pagina), ); } - // @Serealize(ModuloMotivoOutputDto) - // @Get('reporte') - // @UseGuards(AuthGuard('jwt')) - // @ApiOperation({ - // description: 'Reporte de todos los cambios de status de un módulo.', - // }) - // @ApiBearerAuth('jwt') - // @ApiQuery({ - // description: 'Id del módulo.', - // name: 'id_modulo', - // type: 'string', - // }) - // reporte(@Request() req, @Query() query: ModuloOutputDto) { - // const admin: Operador = req.user.operador; + @Serealize(ModuloMotivoOutputDto) + @Get('reporte') + @UseGuards(AuthGuard('jwt')) + @ApiOperation({ + description: 'Reporte de todos los cambios de status de un módulo.', + }) + @ApiBearerAuth('jwt') + @ApiQuery({ + description: 'Id del módulo.', + name: 'id_modulo', + type: 'string', + }) + reporte(@Request() req, @Query() query: ModuloOutputDto) { + const admin: Operador = req.user.operador; - // this.validarUsuarioService.validarAdmin(admin); - // return this.moduloMotivoService.findAllByIdModulo( - // parseInt(query.id_modulo), - // ); - // } + this.validarUsuarioService.validarAdmin(admin); + return this.moduloMotivoService.findAllByIdModulo( + admin, + parseInt(query.id_modulo), + ); + } } diff --git a/src/modulo-motivo/modulo-motivo.service.ts b/src/modulo-motivo/modulo-motivo.service.ts index b693987..a726e2a 100644 --- a/src/modulo-motivo/modulo-motivo.service.ts +++ b/src/modulo-motivo/modulo-motivo.service.ts @@ -1,7 +1,12 @@ import * as moment from 'moment'; -import { forwardRef, Inject, Injectable } from '@nestjs/common'; +import { + ForbiddenException, + forwardRef, + Inject, + Injectable, +} from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; +import { FindManyOptions, Repository } from 'typeorm'; import { Modulo } from '../modulo/entity/modulo.entity'; import { ModuloMotivo } from './entity/modulo-motivo.entity'; import { Operador } from '../operador/entity/operador.entity'; @@ -17,30 +22,42 @@ export class ModuloMotivoService { ) {} create( - operador: Operador, modulo: Modulo, + operador: Operador, motivo: string, numero_alumnos: number, fecha_creacion: string, ) { + // Cramos y guardamos registro return this.repository.save( this.repository.create({ + fecha_creacion: moment(fecha_creacion).toDate(), motivo, numero_alumnos, - operador, modulo, - fecha_creacion: moment(fecha_creacion).toDate(), + operador, }), ); } - findAllByIdModulo(id_modulo: number, pagina: number) { - return this.moduloService.findById(id_modulo).then((modulo) => - this.repository.findAndCount({ - where: { modulo }, - skip: (pagina - 1) * 25, - take: 25, - }), - ); + async findAllByIdModulo( + admin: Operador, + id_modulo: number, + pagina?: number, + ): Promise { + const modulo = await this.moduloService.findById(id_modulo); + const options: FindManyOptions = { where: { modulo } }; + + // Validamos que el módulo pertenezca a la institución del admin + if (modulo.institucion.id_institucion != admin.institucion.id_institucion) + throw new ForbiddenException( + 'No puedes acceder a esta información porque no le pertenece a tu institución.', + ); + // Si se mandó página significa que requiere paginación + if (pagina) { + options.skip = (pagina - 1) * 25; + options.take = 25; + return this.repository.findAndCount(options); + } else return this.repository.find(options); } } diff --git a/src/modulo/modulo.service.ts b/src/modulo/modulo.service.ts index 49c7072..c78642a 100644 --- a/src/modulo/modulo.service.ts +++ b/src/modulo/modulo.service.ts @@ -166,8 +166,8 @@ export class ModuloService { // Se crea un registro del cambio de status de este módulo if (motivo) await this.moduloMotivoService.create( - admin, modulo, + admin, motivo, numero_alumnos, fecha_creacion,