From 4c8da74726a31ee0de5db936cb3c50a1e9f6a9f3 Mon Sep 17 00:00:00 2001 From: xXpuma99Xx <51341582+xXpuma99Xx@users.noreply.github.com> Date: Sun, 16 Oct 2022 11:53:07 -0500 Subject: [PATCH] falta un update --- src/app.module.ts | 4 + .../full-informacion-equipo-programa.view.ts | 28 ----- ...ll-informacion-institucion-usuario.view.ts | 62 +++++++++++ .../views/informacion-equipo-programa.view.ts | 22 ---- .../informacion-institucion-usuario.view.ts | 44 ++++++++ .../institucion-usuario.module.ts | 8 +- .../institucion-usuario.service.ts | 104 +++++++++++++----- src/multa/multa.service.ts | 9 +- src/usuario/usuario.service.ts | 19 ++-- 9 files changed, 209 insertions(+), 91 deletions(-) delete mode 100644 src/institucion-usuario/entity/views/full-informacion-equipo-programa.view.ts create mode 100644 src/institucion-usuario/entity/views/full-informacion-institucion-usuario.view.ts delete mode 100644 src/institucion-usuario/entity/views/informacion-equipo-programa.view.ts create mode 100644 src/institucion-usuario/entity/views/informacion-institucion-usuario.view.ts diff --git a/src/app.module.ts b/src/app.module.ts index 2d8cd28..bac4534 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -80,6 +80,8 @@ import { FullInformacionEquipoProgramaView } from './equipo-programa/entity/view import { InformacionEquipoProgramaView } from './equipo-programa/entity/views/informacion-equipo-programa.view'; import { FullInformacionEquipoTipoEntradaView } from './equipo-tipo-entrada/entity/views/full-informacion-equipo-tipo-entrada.view'; import { InformacionEquipoTipoEntradaView } from './equipo-tipo-entrada/entity/views/informacion-equipo-tipo-entrada.view'; +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 { FullInformacionMultaView } from './multa/entity/views/full-informacion-multa.view'; @@ -157,6 +159,8 @@ import { InformacionUsuarioView } from './usuario/entity/views/informacion-usuar InformacionEquipoProgramaView, FullInformacionEquipoTipoEntradaView, InformacionEquipoTipoEntradaView, + FullInformacionInstitucionUsuarioView, + InformacionInstitucionUsuarioView, InformacionModuloView, MinInformacionModuloView, FullInformacionMultaView, diff --git a/src/institucion-usuario/entity/views/full-informacion-equipo-programa.view.ts b/src/institucion-usuario/entity/views/full-informacion-equipo-programa.view.ts deleted file mode 100644 index dba6f65..0000000 --- a/src/institucion-usuario/entity/views/full-informacion-equipo-programa.view.ts +++ /dev/null @@ -1,28 +0,0 @@ -// import { DataSource, ViewEntity, ViewColumn } from 'typeorm'; -// import { EquipoPrograma } from '../equipo-programa.entity'; -// import { Programa } from '../../../institucion-programa/entity/programa.entity'; - -// @ViewEntity({ -// expression: (dataSource: DataSource) => -// dataSource -// .createQueryBuilder() -// .select('ep.id_equipo_programa', 'id_equipo_programa') -// .addSelect('ep.id_equipo', 'id_equipo') -// .addSelect('ep.id_programa', 'id_programa') -// .addSelect('p.programa', 'programa') -// .from(EquipoPrograma, 'ep') -// .innerJoin(Programa, 'p', 'p.id_programa = ep.id_programa'), -// }) -// export class FullInformacionEquipoProgramaView { -// @ViewColumn() -// id_equipo_programa: number; - -// @ViewColumn() -// id_equipo: number; - -// @ViewColumn() -// id_programa: number; - -// @ViewColumn() -// programa: string; -// } diff --git a/src/institucion-usuario/entity/views/full-informacion-institucion-usuario.view.ts b/src/institucion-usuario/entity/views/full-informacion-institucion-usuario.view.ts new file mode 100644 index 0000000..4d7b89d --- /dev/null +++ b/src/institucion-usuario/entity/views/full-informacion-institucion-usuario.view.ts @@ -0,0 +1,62 @@ +import { DataSource, ViewEntity, ViewColumn } from 'typeorm'; +import { Carrera } from '../../../institucion-carrera/entity/carrera.entity'; +import { Institucion } from '../../../institucion/entity/institucion.entity'; +import { InstitucionCarrera } from '../../../institucion-carrera/entity/institucion-carrera.entity'; +import { InstitucionUsuario } from '../institucion-usuario.entity'; +import { Usuario } from '../../../usuario/entity/usuario.entity'; + +@ViewEntity({ + expression: (dataSource: DataSource) => + dataSource + .createQueryBuilder() + .select('iu.id_institucion_usuario', 'id_institucion_usuario') + .addSelect('iu.activo', 'activo') + .addSelect('iu.multa', 'multa') + .addSelect('iu.id_institucion_carrera', 'id_institucion_carrera') + .addSelect('iu.id_usuario', 'id_usuario') + .addSelect('ic.id_carrera', 'id_carrera') + .addSelect('ic.id_institucion', 'id_institucion') + .addSelect('u.correo', 'correo') + .addSelect('c.carrera', 'carrera') + .addSelect('i.institucion', 'institucion') + .from(InstitucionUsuario, 'iu') + .innerJoin( + InstitucionCarrera, + 'ic', + 'ic.id_institucion_carrera = iu.id_institucion_carrera', + ) + .innerJoin(Usuario, 'u', 'u.id_usuario = iu.id_usuario') + .innerJoin(Carrera, 'c', 'c.id_carrera = ic.id_carrera') + .innerJoin(Institucion, 'i', 'i.id_institucion = ic.id_institucion'), +}) +export class FullInformacionInstitucionUsuarioView { + @ViewColumn() + id_carrera: number; + + @ViewColumn() + activo: number; + + @ViewColumn() + carrera: string; + + @ViewColumn() + correo: string; + + @ViewColumn() + institucion: string; + + @ViewColumn() + id_institucion: number; + + @ViewColumn() + id_institucion_carrera: number; + + @ViewColumn() + id_institucion_usuario: number; + + @ViewColumn() + id_usuario: number; + + @ViewColumn() + multa: number; +} diff --git a/src/institucion-usuario/entity/views/informacion-equipo-programa.view.ts b/src/institucion-usuario/entity/views/informacion-equipo-programa.view.ts deleted file mode 100644 index 1c5acca..0000000 --- a/src/institucion-usuario/entity/views/informacion-equipo-programa.view.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { DataSource, ViewEntity, ViewColumn } from 'typeorm'; -import { InstitucionUsuario } from '../institucion-usuario.entity'; - -@ViewEntity({ - expression: (dataSource: DataSource) => - dataSource - .createQueryBuilder() - .select('ep.id_equipo_programa', 'id_equipo_programa') - .addSelect('ep.id_equipo', 'id_equipo') - .addSelect('ep.id_programa', 'id_programa') - .from(InstitucionUsuario, 'ep'), -}) -export class InformacionEquipoProgramaView { - @ViewColumn() - id_equipo_programa: number; - - @ViewColumn() - id_equipo: number; - - @ViewColumn() - id_programa: number; -} diff --git a/src/institucion-usuario/entity/views/informacion-institucion-usuario.view.ts b/src/institucion-usuario/entity/views/informacion-institucion-usuario.view.ts new file mode 100644 index 0000000..0578fcd --- /dev/null +++ b/src/institucion-usuario/entity/views/informacion-institucion-usuario.view.ts @@ -0,0 +1,44 @@ +import { DataSource, ViewEntity, ViewColumn } from 'typeorm'; +import { InstitucionCarrera } from '../../../institucion-carrera/entity/institucion-carrera.entity'; +import { InstitucionUsuario } from '../institucion-usuario.entity'; + +@ViewEntity({ + expression: (dataSource: DataSource) => + dataSource + .createQueryBuilder() + .select('iu.id_institucion_usuario', 'id_institucion_usuario') + .addSelect('iu.activo', 'activo') + .addSelect('iu.multa', 'multa') + .addSelect('iu.id_institucion_carrera', 'id_institucion_carrera') + .addSelect('iu.id_usuario', 'id_usuario') + .addSelect('ic.id_carrera', 'id_carrera') + .addSelect('ic.id_institucion', 'id_institucion') + .from(InstitucionUsuario, 'iu') + .innerJoin( + InstitucionCarrera, + 'ic', + 'ic.id_institucion_carrera = iu.id_institucion_carrera', + ), +}) +export class InformacionInstitucionUsuarioView { + @ViewColumn() + id_carrera: number; + + @ViewColumn() + activo: number; + + @ViewColumn() + id_institucion: number; + + @ViewColumn() + id_institucion_carrera: number; + + @ViewColumn() + id_institucion_usuario: number; + + @ViewColumn() + id_usuario: number; + + @ViewColumn() + multa: number; +} diff --git a/src/institucion-usuario/institucion-usuario.module.ts b/src/institucion-usuario/institucion-usuario.module.ts index 88eb561..273cf56 100644 --- a/src/institucion-usuario/institucion-usuario.module.ts +++ b/src/institucion-usuario/institucion-usuario.module.ts @@ -3,13 +3,19 @@ import { PassportModule } from '@nestjs/passport'; import { TypeOrmModule } from '@nestjs/typeorm'; import { InstitucionUsuarioService } from './institucion-usuario.service'; import { InstitucionUsuario } from './entity/institucion-usuario.entity'; +import { FullInformacionInstitucionUsuarioView } from './entity/views/full-informacion-institucion-usuario.view'; +import { InformacionInstitucionUsuarioView } from './entity/views/informacion-institucion-usuario.view'; import { InstitucionUsuarioController } from './institucion-usuario.controller'; import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ PassportModule.register({ defaultStrategy: 'jwt' }), - TypeOrmModule.forFeature([InstitucionUsuario]), + TypeOrmModule.forFeature([ + InstitucionUsuario, + FullInformacionInstitucionUsuarioView, + InformacionInstitucionUsuarioView, + ]), ValidarUsuarioModule, ], providers: [InstitucionUsuarioService], diff --git a/src/institucion-usuario/institucion-usuario.service.ts b/src/institucion-usuario/institucion-usuario.service.ts index 9ee2ae5..d1f4c48 100644 --- a/src/institucion-usuario/institucion-usuario.service.ts +++ b/src/institucion-usuario/institucion-usuario.service.ts @@ -4,12 +4,18 @@ import { Repository } from 'typeorm'; import { InstitucionCarrera } from '../institucion-carrera/entity/institucion-carrera.entity'; import { InstitucionUsuario } from './entity/institucion-usuario.entity'; import { Usuario } from '../usuario/entity/usuario.entity'; +import { FullInformacionInstitucionUsuarioView } from './entity/views/full-informacion-institucion-usuario.view'; +import { InformacionInstitucionUsuarioView } from './entity/views/informacion-institucion-usuario.view'; @Injectable() export class InstitucionUsuarioService { constructor( @InjectRepository(InstitucionUsuario) private repository: Repository, + @InjectRepository(FullInformacionInstitucionUsuarioView) + private fullInformacionInstitucionUsuarioView: Repository, + @InjectRepository(InformacionInstitucionUsuarioView) + private informacionInstitucionUsuarioView: Repository, ) {} create(institucionCarrera: InstitucionCarrera, usuario: Usuario) { @@ -21,51 +27,97 @@ export class InstitucionUsuarioService { })); } - findAllByIdUsuario(id_usuario: number) { - return this.repository.find({ - join: { - alias: 'iu', - innerJoinAndSelect: { ic: 'iu.institucionCarrera' }, - }, - where: { usuario: { id_usuario } }, - }); - } + findInfoInstitucionUsuarioAllByIdUsuario(id_usuario: number) { + return this.informacionInstitucionUsuarioView + .find({ where: { id_usuario } }) + .then((infoInstitucionUsuarios) => { + const institucionUsuarios: InstitucionUsuario[] = []; - findById(id_institucion_usuario: number) { - return this.repository - .findOne({ where: { id_institucion_usuario } }) - .then((institucionUsuario) => { - if (!institucionUsuario) - throw new ConflictException('No existe este id institución usuario.'); - return institucionUsuario; + for (let i = 0; i < infoInstitucionUsuarios.length; i++) + institucionUsuarios.push( + this.repository.create({ + id_institucion_usuario: + infoInstitucionUsuarios[i].id_institucion_usuario, + activo: infoInstitucionUsuarios[i].activo === 1, + multa: infoInstitucionUsuarios[i].multa === 1, + institucionCarrera: { + id_institucion_carrera: + infoInstitucionUsuarios[i].id_institucion_carrera, + carrera: { id_carrera: infoInstitucionUsuarios[i].id_carrera }, + institucion: { + id_institucion: infoInstitucionUsuarios[i].id_institucion, + }, + }, + }), + ); + return institucionUsuarios; }); } - findByUsuarioInstitucionCarrera( + findInfoInstitucionUsuarioById(id_institucion_usuario: number) { + return this.informacionInstitucionUsuarioView + .findOne({ where: { id_institucion_usuario } }) + .then((infoInstitucionUsuario) => { + if (!infoInstitucionUsuario) + throw new ConflictException('No existe este id institución usuario.'); + return this.repository.create({ + id_institucion_usuario: infoInstitucionUsuario.id_institucion_usuario, + activo: infoInstitucionUsuario.activo === 1, + multa: infoInstitucionUsuario.multa === 1, + institucionCarrera: { + id_institucion_carrera: + infoInstitucionUsuario.id_institucion_carrera, + carrera: { id_carrera: infoInstitucionUsuario.id_carrera }, + institucion: { + id_institucion: infoInstitucionUsuario.id_institucion, + }, + }, + }); + }); + } + + findFullInfoInstitucionUsuarioByUsuarioInstitucionCarrera( usuario: Usuario, institucionCarrera: InstitucionCarrera, ) { - return this.repository + return this.fullInformacionInstitucionUsuarioView .findOne({ - where: { activo: true, institucionCarrera, usuario }, + where: { + id_institucion_carrera: institucionCarrera.id_institucion_carrera, + id_usuario: usuario.id_usuario, + }, }) - .then((institucionUsuario) => { - if (!institucionUsuario) + .then((infoInstitucionUsuario) => { + if (!infoInstitucionUsuario || infoInstitucionUsuario.activo === 0) throw new ConflictException( 'Verificar sus datos, cualquier duda asistir al módulo PC PUMA.', ); - return institucionUsuario; + return this.repository.create({ + id_institucion_usuario: infoInstitucionUsuario.id_institucion_usuario, + activo: infoInstitucionUsuario.activo === 1, + multa: infoInstitucionUsuario.multa === 1, + institucionCarrera: { + id_institucion_carrera: + infoInstitucionUsuario.id_institucion_carrera, + carrera: { id_carrera: infoInstitucionUsuario.id_carrera }, + institucion: { + id_institucion: infoInstitucionUsuario.id_institucion, + }, + }, + usuario: { + id_usuario: infoInstitucionUsuario.id_usuario, + correo: infoInstitucionUsuario.correo, + }, + }); }); } update(attrs: Partial) { - return this.findById(attrs.id_institucion_usuario) + return this.findInfoInstitucionUsuarioById(attrs.id_institucion_usuario) .then((institucionUsuario) => { Object.assign(institucionUsuario, attrs); return this.repository.save(institucionUsuario); }) - .then((_) => ({ - message: 'Se guardaron los cambios correctamente.', - })); + .then((_) => ({ message: 'Se guardaron los cambios correctamente.' })); } } diff --git a/src/multa/multa.service.ts b/src/multa/multa.service.ts index 4adb6b2..cec6cc5 100644 --- a/src/multa/multa.service.ts +++ b/src/multa/multa.service.ts @@ -93,7 +93,7 @@ export class MultaService { return this.repository.save(this.repository.create(data)); }) .then((_) => - this.institucionUsuarioService.findAllByIdUsuario( + this.institucionUsuarioService.findInfoInstitucionUsuarioAllByIdUsuario( prestamo.usuario.id_usuario, ), ) @@ -265,9 +265,10 @@ export class MultaService { } async quitarMulta(id_institucion_usuario: number) { - const institucionUsuario = await this.institucionUsuarioService.findById( - id_institucion_usuario, - ); + const institucionUsuario = + await this.institucionUsuarioService.findInfoInstitucionUsuarioById( + id_institucion_usuario, + ); return this.repository .createQueryBuilder('mu') diff --git a/src/usuario/usuario.service.ts b/src/usuario/usuario.service.ts index 0d1af0e..52cb995 100644 --- a/src/usuario/usuario.service.ts +++ b/src/usuario/usuario.service.ts @@ -249,27 +249,26 @@ export class UsuarioService { throw new ConflictException( 'Verificar sus datos, cualquier duda asistir al módulo PC PUMA.', ); - return this.institucionUsuarioService.findByUsuarioInstitucionCarrera( + return this.institucionUsuarioService.findFullInfoInstitucionUsuarioByUsuarioInstitucionCarrera( existeUsuario, institucionCarrera, ); }) .then((institucionUsuario) => { - const usuario = institucionUsuario.usuario; - - if (!usuario.correo) + if (!institucionUsuario.usuario.correo) throw new ConflictException( - 'Tu institución no te asignó un correo institucional, dirigete al módulo ', + 'Tu institución no te asignó un correo institucional, dirigete al módulo para solucionarlo.', ); - const arrobaIndex = usuario.correo.indexOf('@'); + const arrobaIndex = institucionUsuario.usuario.correo.indexOf('@'); - message = `Se creó correctamente tu cuenta, mandamos un correo a ...${usuario.correo.slice( + message = `Se creó correctamente tu cuenta, mandamos un correo a ...${institucionUsuario.usuario.correo.slice( arrobaIndex - 3, )} con tus credenciales para acceder a este servicio.`; - usuario.telefono = telefono; - usuario.password = this.bcryptService.encriptar(password); - return this.repository.save(usuario); + institucionUsuario.usuario.telefono = telefono; + institucionUsuario.usuario.password = + this.bcryptService.encriptar(password); + return this.repository.save(institucionUsuario.usuario); }) .then((usuario) => this.nodemailerService.sendEmail({