From 9a98ac2851d69b0890fb31954bfbbdb53a8be138 Mon Sep 17 00:00:00 2001 From: lemuel Date: Fri, 23 Dec 2022 09:11:26 -0600 Subject: [PATCH] modulo service final --- src/app.module.ts | 4 +- ...iew.ts => full-informacion-modulo.view.ts} | 2 +- src/modulo/modulo.controller.ts | 11 +- src/modulo/modulo.module.ts | 4 +- src/modulo/modulo.service.ts | 142 +++++++++--------- 5 files changed, 83 insertions(+), 80 deletions(-) rename src/modulo/entity/views/{min-informacion-modulo.view.ts => full-informacion-modulo.view.ts} (95%) diff --git a/src/app.module.ts b/src/app.module.ts index dc447ac..1dd8579 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -86,7 +86,7 @@ import { InformacionEquipoTipoEntradaView } from './equipo-tipo-entrada/entity/v import { FullInformacionInstitucionUsuarioView } from './institucion-usuario/entity/views/full-informacion-institucion-usuario.view'; import { InformacionInstitucionUsuarioView } from './institucion-usuario/entity/views/informacion-institucion-usuario.view'; import { InformacionModuloView } from './modulo/entity/views/informacion-modulo.view'; -import { MinInformacionModuloView } from './modulo/entity/views/min-informacion-modulo.view'; +import { FullInformacionModuloView } from './modulo/entity/views/full-informacion-modulo.view'; import { FullInformacionMultaView } from './multa/entity/views/full-informacion-multa.view'; import { InformacionMultaView } from './multa/entity/views/informacion-multa.view'; import { FullInformacionOperadorView } from './operador/entity/views/full-informacion-operador.view'; @@ -168,7 +168,7 @@ import { ModuloMotivoModule } from './modulo-motivo/modulo-motivo.module'; FullInformacionInstitucionUsuarioView, InformacionInstitucionUsuarioView, InformacionModuloView, - MinInformacionModuloView, + FullInformacionModuloView, FullInformacionMultaView, InformacionMultaView, FullInformacionOperadorView, diff --git a/src/modulo/entity/views/min-informacion-modulo.view.ts b/src/modulo/entity/views/full-informacion-modulo.view.ts similarity index 95% rename from src/modulo/entity/views/min-informacion-modulo.view.ts rename to src/modulo/entity/views/full-informacion-modulo.view.ts index fc3c263..f4ce580 100644 --- a/src/modulo/entity/views/min-informacion-modulo.view.ts +++ b/src/modulo/entity/views/full-informacion-modulo.view.ts @@ -16,7 +16,7 @@ import { Institucion } from '../../../institucion/entity/institucion.entity'; .orderBy('institucion', 'ASC') .addOrderBy('modulo', 'ASC'), }) -export class MinInformacionModuloView { +export class FullInformacionModuloView { @ViewColumn() id_modulo: number; diff --git a/src/modulo/modulo.controller.ts b/src/modulo/modulo.controller.ts index c51aeae..e915bfc 100644 --- a/src/modulo/modulo.controller.ts +++ b/src/modulo/modulo.controller.ts @@ -68,7 +68,7 @@ export class ModuloController { const admin: Operador = req.user.operador; this.validarUsuarioService.validarAdmin(admin); - return this.moduloService.findMinInfoModuloById(parseInt(query.id_modulo)); + return this.moduloService.findMinInfoById(parseInt(query.id_modulo)); } @Serealize(OnlyModuloOutputDto) @@ -82,9 +82,7 @@ export class ModuloController { const admin: Operador = req.user.operador; this.validarUsuarioService.validarAdmin(admin); - return this.moduloService.findMinInfoModuloAll( - admin.institucion.id_institucion, - ); + return this.moduloService.findAllAdmin(admin); } @Serealize(OnlyModuloOutputDto) @@ -96,10 +94,7 @@ export class ModuloController { type: 'string', }) modulosActivos(@Query() query: IdInstitucionDto) { - return this.moduloService.findMinInfoModuloAll( - parseInt(query.id_institucion), - 1, - ); + return this.moduloService.findAllActivo(parseInt(query.id_institucion)); } @Serealize(MessageOutputDto) diff --git a/src/modulo/modulo.module.ts b/src/modulo/modulo.module.ts index 6b6fc7d..328e8b7 100644 --- a/src/modulo/modulo.module.ts +++ b/src/modulo/modulo.module.ts @@ -4,8 +4,8 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { ModuloController } from './modulo.controller'; import { ModuloService } from './modulo.service'; import { Modulo } from './entity/modulo.entity'; +import { FullInformacionModuloView } from './entity/views/full-informacion-modulo.view'; import { InformacionModuloView } from './entity/views/informacion-modulo.view'; -import { MinInformacionModuloView } from './entity/views/min-informacion-modulo.view'; import { InstitucionModule } from '../institucion/institucion.module'; import { ModuloMotivoModule } from '../modulo-motivo/modulo-motivo.module'; @@ -16,8 +16,8 @@ import { ModuloMotivoModule } from '../modulo-motivo/modulo-motivo.module'; PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([ Modulo, + FullInformacionModuloView, InformacionModuloView, - MinInformacionModuloView, ]), ], controllers: [ModuloController], diff --git a/src/modulo/modulo.service.ts b/src/modulo/modulo.service.ts index 7d9f192..96e1bd3 100644 --- a/src/modulo/modulo.service.ts +++ b/src/modulo/modulo.service.ts @@ -9,9 +9,9 @@ import { InjectRepository } from '@nestjs/typeorm'; import { FindOptionsWhere, Repository } from 'typeorm'; import { Institucion } from '../institucion/entity/institucion.entity'; import { Modulo } from './entity/modulo.entity'; -import { InformacionModuloView } from './entity/views/informacion-modulo.view'; -import { MinInformacionModuloView } from './entity/views/min-informacion-modulo.view'; import { Operador } from '../operador/entity/operador.entity'; +import { InformacionModuloView } from './entity/views/informacion-modulo.view'; +import { FullInformacionModuloView } from './entity/views/full-informacion-modulo.view'; import { InstitucionService } from '../institucion/institucion.service'; import { ModuloMotivoService } from '../modulo-motivo/modulo-motivo.service'; @@ -21,16 +21,15 @@ export class ModuloService { @InjectRepository(Modulo) private repository: Repository, @InjectRepository(InformacionModuloView) private informacionModuloView: Repository, - @InjectRepository(MinInformacionModuloView) - private minInformacionModuloView: Repository, + @InjectRepository(FullInformacionModuloView) + private fullInformacionModuloView: Repository, + private institucionService: InstitucionService, @Inject(forwardRef(() => ModuloMotivoService)) private moduloMotivoService: ModuloMotivoService, - private institucionService: InstitucionService, ) {} - create(admin: Operador, modulo: string) { - // Buscamos una modulo con ese nombre en la institución del admin - // que realiza esta acción + create(admin: Operador, modulo: string): Promise<{ message: string }> { + // Buscamos un registro con ese nombre en la institución del admin return this.findModulo(admin.institucion, modulo, true) .then((_) => // Creamos y guardamos un registro @@ -44,14 +43,39 @@ export class ModuloService { .then((_) => ({ message: 'Se creó correctamente un nuevo módulo.' })); } - findFullInfoById(id_modulo: number) { - return this.repository.findOne({ where: { id_modulo } }).then((modulo) => { - if (!modulo) throw new NotFoundException('No existe este id módulo.'); - return modulo; - }); + findAllActivo(id_institucion: number): Promise { + return this.institucionService + .findById(id_institucion) + .then((institucion) => + this.fullInformacionModuloView.find({ + where: { + activo_modulo: 1, + id_institucion: institucion.id_institucion, + }, + }), + ) + .then((infoModulos) => { + const modulos: Modulo[] = []; + + for (let i = 0; i < infoModulos.length; i++) + modulos.push(this.fullViewToModulo(infoModulos[i])); + return modulos; + }); } - findById(id_modulo: number) { + findAllAdmin(operador: Operador): Promise { + return this.fullInformacionModuloView + .find({ where: { id_institucion: operador.institucion.id_institucion } }) + .then((infoModulos) => { + const modulos: Modulo[] = []; + + for (let i = 0; i < infoModulos.length; i++) + modulos.push(this.fullViewToModulo(infoModulos[i])); + return modulos; + }); + } + + findById(id_modulo: number): Promise { return this.informacionModuloView .findOne({ where: { id_modulo } }) .then((infoModulo) => { @@ -64,98 +88,82 @@ export class ModuloService { }); } - findMinInfoModuloAll(id_institucion: number, activo = 0) { - return this.institucionService - .findById(id_institucion) - .then((institucion) => { - const busqueda: FindOptionsWhere = { - id_institucion: institucion.id_institucion, - }; - - if (activo) busqueda.activo_modulo = activo; - return this.minInformacionModuloView.find({ where: busqueda }); - }) - .then((infoModulos) => { - const modulos: Modulo[] = []; - - for (let i = 0; i < infoModulos.length; i++) - modulos.push( - this.repository.create({ - id_modulo: infoModulos[i].id_modulo, - activo: infoModulos[i].activo_modulo === 1, - modulo: infoModulos[i].modulo, - institucion: { - id_institucion: infoModulos[i].id_institucion, - institucion: infoModulos[i].institucion, - }, - }), - ); - return modulos; - }); + findFullInfoById(id_modulo: number): Promise { + return this.repository.findOne({ where: { id_modulo } }).then((modulo) => { + if (!modulo) throw new NotFoundException('No existe este id módulo.'); + return modulo; + }); } - findMinInfoModuloById(id_modulo: number) { - return this.minInformacionModuloView + findMinInfoById(id_modulo: number): Promise { + return this.fullInformacionModuloView .findOne({ where: { id_modulo } }) .then((infoModulo) => { if (!infoModulo) throw new NotFoundException('No existe este id módulo.'); - return this.repository.create({ - id_modulo: infoModulo.id_modulo, - activo: infoModulo.activo_modulo === 1, - modulo: infoModulo.modulo, - institucion: { - id_institucion: infoModulo.id_institucion, - institucion: infoModulo.institucion, - }, - }); + return this.fullViewToModulo(infoModulo); }); } - findModulo(institucion: Institucion, modulo: string, validarExiste = false) { - return this.minInformacionModuloView + findModulo( + institucion: Institucion, + modulo: string, + validarExiste = false, + ): Promise { + return this.fullInformacionModuloView .findOne({ where: { id_institucion: institucion.id_institucion, modulo }, }) .then((infoModulo) => { - if (!infoModulo) return null; - if (validarExiste) + if (infoModulo && validarExiste) throw new ConflictException( 'Ya existe un módulo en esta institución con este nombre, intente con otro.', ); - return this.repository.create({ - id_modulo: infoModulo.id_modulo, - institucion: { id_institucion: infoModulo.id_institucion }, - }); + return this.fullViewToModulo(infoModulo); }); } + private fullViewToModulo(infoModulo: FullInformacionModuloView): Modulo { + if (!infoModulo) return null; + return this.repository.create({ + id_modulo: infoModulo.id_modulo, + activo: infoModulo.activo_modulo === 1, + modulo: infoModulo.modulo, + institucion: { + id_institucion: infoModulo.id_institucion, + institucion: infoModulo.institucion, + }, + }); + } + update( admin: Operador, attrs: Partial, motivo?: string, numero_alumnos?: number, fecha_creacion?: string, - ) { + ): Promise<{ message: string }> { + // Validamos que si se manda uno solo de esos campos, se deba mandar todos los demas if ( - (!motivo || !numero_alumnos || !fecha_creacion) && - (motivo || numero_alumnos || fecha_creacion) + (motivo || numero_alumnos || fecha_creacion) && + (!motivo || !numero_alumnos || !fecha_creacion) ) throw new ConflictException('No se mandó toda la información necesaria.'); return this.findById(attrs.id_modulo) .then(async (modulo) => { - // Validamos que el modulo enviado sea del admin que realiza esta acción + // Validamos que el módulo pertenezca a la institución del admin if ( admin.institucion.id_institucion != modulo.institucion.id_institucion ) throw new ConflictException( - 'No puedes actualizar la información de este módulo porque no le pertenece a tu institución.', + 'No puedes modificar la información este módulo porque no pertenece a tu institución.', ); - // Buscamos un modulo en esa institución con ese nombre + // Si se quiere cambiar el nombre del módulo validamos que no exista uno con el mismo nombre if (attrs.modulo) await this.findModulo(modulo.institucion, attrs.modulo, true); // Asignamos valores enviados al objeto Object.assign(modulo, attrs); + // Se crea un registro del cambio de status de este módulo if (motivo) await this.moduloMotivoService.create( admin,