From b4da40e915cdd4303506d36ef5055b6efdc158bd Mon Sep 17 00:00:00 2001 From: lemuel Date: Tue, 30 Aug 2022 19:36:53 -0500 Subject: [PATCH 01/16] login de usuario mejorado --- src/app.module.ts | 7 +- src/auth/auth.service.ts | 61 +++-------------- .../entity/views/informacion-usuario.view.ts | 68 +++++++++++++++++++ src/usuario/usuario.module.ts | 3 +- src/usuario/usuario.service.ts | 40 ++++++++++- 5 files changed, 124 insertions(+), 55 deletions(-) create mode 100644 src/usuario/entity/views/informacion-usuario.view.ts diff --git a/src/app.module.ts b/src/app.module.ts index 44ac88a..68c9e51 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -43,7 +43,6 @@ import { Carrito } from './carrito/entity/carrito.entity'; import { CarritoMotivo } from './carrito-motivo/entity/carrito-motivo.entity'; import { Dia } from './institucion-dia/entity/dia.entity'; import { Equipo } from './equipo/entity/equipo.entity'; -// import { EquipoPrestamoView } from './equipo/entity/views/equipo-prestamo.view'; import { EquipoMotivo } from './equipo-motivo/entity/equipo-motivo.entity'; import { EquipoPrograma } from './equipo-programa/entity/equipo-programa.entity'; import { EquipoTipoEntrada } from './equipo-tipo-entrada/entity/equipo-tipo-entrada.entity'; @@ -71,6 +70,9 @@ import { TipoEntrada } from './institucion-tipo-entrada/entity/tipo-entrada.enti import { TipoUsuario } from './tipo-usuario/entity/tipo-usuario.entity'; import { Usuario } from './usuario/entity/usuario.entity'; +// import { EquipoPrestamoView } from './equipo/entity/views/equipo-prestamo.view'; +import { InformacionUsuarioView } from './usuario/entity/views/informacion-usuario.view'; + @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true }), @@ -103,7 +105,6 @@ import { Usuario } from './usuario/entity/usuario.entity'; CarritoMotivo, Dia, Equipo, - // EquipoPrestamoView, EquipoMotivo, EquipoPrograma, EquipoTipoEntrada, @@ -130,6 +131,8 @@ import { Usuario } from './usuario/entity/usuario.entity'; TipoEntrada, TipoUsuario, Usuario, + // EquipoPrestamoView, + InformacionUsuarioView, ], }; }, diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index a0b5420..be658b5 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -77,57 +77,16 @@ export class AuthService { } loginUsuario(usuario: string, password: string) { - return this.usuarioService - .findByUsuario(usuario, false, false, true) - .then((usuario) => { - this.validarLogin(usuario, password); - - const instituciones: { - id_institucion_usuario: number; - institucionCarrera: { - id_institucion_carrera: number; - institucion: { id_institucion: number }; - carrera: { id_carrera: number }; - }; - }[] = []; - - for (let i = 0; i < usuario.instituciones.length; i++) - if ( - usuario.instituciones[i].activo && - !usuario.instituciones[i].multa - ) - instituciones.push({ - id_institucion_usuario: - usuario.instituciones[i].id_institucion_usuario, - institucionCarrera: { - id_institucion_carrera: - usuario.instituciones[i].institucionCarrera - .id_institucion_carrera, - carrera: { - id_carrera: - usuario.instituciones[i].institucionCarrera.carrera - .id_carrera, - }, - institucion: { - id_institucion: - usuario.instituciones[i].institucionCarrera.institucion - .id_institucion, - }, - }, - }); - - const payload: JwtPayload = { - id_usuario: usuario.id_usuario, - nombre: usuario.nombre, - usuario: usuario.usuario, - instituciones: instituciones, - tipoUsuario: { - id_tipo_usuario: usuario.tipoUsuario.id_tipo_usuario, - }, - }; - - return { token: this.jwtService.sign(payload), usuario }; - }); + return this.usuarioService.informacionUsuario(usuario).then((data) => { + if ( + !data.usuario || + !this.bcryptService.comparar(password, data.password) + ) + throw new UnauthorizedException( + 'Usuario y/o password incorrectos, ingresa unas credenciales válidas.', + ); + return { token: this.jwtService.sign(data.usuario) }; + }); } validarLogin(usuarioOperador: Usuario | Operador, password: string) { diff --git a/src/usuario/entity/views/informacion-usuario.view.ts b/src/usuario/entity/views/informacion-usuario.view.ts new file mode 100644 index 0000000..367a19c --- /dev/null +++ b/src/usuario/entity/views/informacion-usuario.view.ts @@ -0,0 +1,68 @@ +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/institucion-usuario.entity'; +import { TipoUsuario } from '../../../tipo-usuario/entity/tipo-usuario.entity'; +import { Usuario } from '../usuario.entity'; + +@ViewEntity({ + expression: (dataSource: DataSource) => + dataSource + .createQueryBuilder() + .from(Usuario, 'u') + .select('u.id_usuario', 'id_usuario') + .addSelect('u.nombre', 'nombre') + .addSelect('u.password', 'password') + .addSelect('u.usuario', 'usuario') + .addSelect('tu.id_tipo_usuario', 'id_tipo_usuario') + .addSelect('is.activo', 'activo') + .addSelect('is.id_institucion_usuario', 'id_institucion_usuario') + .addSelect('ic.id_institucion_carrera', 'id_institucion_carrera') + .addSelect('is.multa', 'multa') + .addSelect('c.id_carrera', 'id_carrera') + .addSelect('i.id_institucion', 'id_institucion') + .innerJoin(InstitucionUsuario, 'is', 'is.id_usuario = u.id_usuario') + .innerJoin(TipoUsuario, 'tu', 'tu.id_tipo_usuario = u.id_tipo_usuario') + .innerJoin( + InstitucionCarrera, + 'ic', + 'ic.id_institucion_carrera = is.id_institucion_carrera', + ) + .innerJoin(Carrera, 'c', 'c.id_carrera = ic.id_carrera') + .innerJoin(Institucion, 'i', 'i.id_institucion = ic.id_institucion'), +}) +export class InformacionUsuarioView { + @ViewColumn() + id_usuario: number; + + @ViewColumn() + activo: boolean; + + @ViewColumn() + multa: boolean; + + @ViewColumn() + id_carrera: number; + + @ViewColumn() + id_institucion: number; + + @ViewColumn() + id_institucion_carrera: number; + + @ViewColumn() + id_institucion_usuario: number; + + @ViewColumn() + id_tipo_usuario: number; + + @ViewColumn() + nombre: string; + + @ViewColumn() + password: string; + + @ViewColumn() + usuario: string; +} diff --git a/src/usuario/usuario.module.ts b/src/usuario/usuario.module.ts index 55b457f..df94c8a 100644 --- a/src/usuario/usuario.module.ts +++ b/src/usuario/usuario.module.ts @@ -4,6 +4,7 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { UsuarioController } from './usuario.controller'; import { UsuarioService } from './usuario.service'; import { Usuario } from './entity/usuario.entity'; +import { InformacionUsuarioView } from './entity/views/informacion-usuario.view'; import { BcryptModule } from '../bcrypt/bcrypt.module'; import { InstitucionModule } from '../institucion/institucion.module'; import { InstitucionCarreraModule } from '../institucion-carrera/institucion-carrera.module'; @@ -20,7 +21,7 @@ import { TipoUsuarioModule } from '../tipo-usuario/tipo-usuario.module'; NodemailerModule, PassportModule.register({ defaultStrategy: 'jwt' }), TipoUsuarioModule, - TypeOrmModule.forFeature([Usuario]), + TypeOrmModule.forFeature([Usuario, InformacionUsuarioView]), ], controllers: [UsuarioController], providers: [UsuarioService], diff --git a/src/usuario/usuario.service.ts b/src/usuario/usuario.service.ts index 18a297c..108b71a 100644 --- a/src/usuario/usuario.service.ts +++ b/src/usuario/usuario.service.ts @@ -8,6 +8,7 @@ import { Repository } from 'typeorm'; import { InstitucionCarrera } from '../institucion-carrera/entity/institucion-carrera.entity'; import { TipoUsuario } from '../tipo-usuario/entity/tipo-usuario.entity'; import { Usuario } from './entity/usuario.entity'; +import { InformacionUsuarioView } from './entity/views/informacion-usuario.view'; import { BcryptService } from '../bcrypt/bcrypt.service'; import { InstitucionService } from '../institucion/institucion.service'; import { InstitucionCarreraService } from '../institucion-carrera/institucion-carrera.service'; @@ -19,6 +20,8 @@ import { TipoUsuarioService } from '../tipo-usuario/tipo-usuario.service'; export class UsuarioService { constructor( @InjectRepository(Usuario) private repository: Repository, + @InjectRepository(InformacionUsuarioView) + private equipoPrestamoView: Repository, private bcryptService: BcryptService, private institucionService: InstitucionService, private institucionCarreraService: InstitucionCarreraService, @@ -128,7 +131,7 @@ export class UsuarioService { }); } - findByUsuario( + async findByUsuario( usuario: string, validarNoExiste = true, password = false, @@ -154,6 +157,41 @@ export class UsuarioService { }); } + informacionUsuario(usuario: string) { + return this.equipoPrestamoView.find({ where: { usuario } }).then((data) => { + const instituciones: { + id_institucion_usuario: number; + institucionCarrera: { + id_institucion_carrera: number; + institucion: { id_institucion: number }; + carrera: { id_carrera: number }; + }; + }[] = []; + + if (data.length === 0) return { usuario: null, password: null }; + for (let i = 0; i < data.length; i++) + if (data[i].activo && !data[i].multa) + instituciones.push({ + id_institucion_usuario: data[i].id_institucion_usuario, + institucionCarrera: { + id_institucion_carrera: data[i].id_institucion_carrera, + institucion: { id_institucion: data[i].id_institucion }, + carrera: { id_carrera: data[i].id_carrera }, + }, + }); + return { + usuario: { + id_usuario: data[0].id_usuario, + nombre: data[0].nombre, + usuario: data[0].usuario, + instituciones, + tipoUsuario: { id_tipo_usuario: data[0].id_tipo_usuario }, + }, + password: data[0].password, + }; + }); + } + passwordReset(id_usuario: number) { const password = this.bcryptService.generarPassword(); From 56fd937fd82993742f318e3b18d1d0bde1ad0ad7 Mon Sep 17 00:00:00 2001 From: lemuel Date: Wed, 31 Aug 2022 11:29:48 -0500 Subject: [PATCH 02/16] views operador y usurario --- src/app.module.ts | 2 + src/auth/auth.service.ts | 54 +++++---------- .../entity/views/informacion-operador.view.ts | 42 ++++++++++++ src/operador/operador.module.ts | 3 +- src/operador/operador.service.ts | 49 ++++++++++++++ .../entity/views/informacion-usuario.view.ts | 2 +- src/usuario/usuario.service.ts | 66 ++++++++++--------- 7 files changed, 145 insertions(+), 73 deletions(-) create mode 100644 src/operador/entity/views/informacion-operador.view.ts diff --git a/src/app.module.ts b/src/app.module.ts index 68c9e51..402491b 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -71,6 +71,7 @@ import { TipoUsuario } from './tipo-usuario/entity/tipo-usuario.entity'; import { Usuario } from './usuario/entity/usuario.entity'; // import { EquipoPrestamoView } from './equipo/entity/views/equipo-prestamo.view'; +import { InformacionOperadorView } from './operador/entity/views/informacion-operador.view'; import { InformacionUsuarioView } from './usuario/entity/views/informacion-usuario.view'; @Module({ @@ -132,6 +133,7 @@ import { InformacionUsuarioView } from './usuario/entity/views/informacion-usuar TipoUsuario, Usuario, // EquipoPrestamoView, + InformacionOperadorView, InformacionUsuarioView, ], }; diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index be658b5..33efc47 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -1,11 +1,9 @@ import { - ConflictException, + BadRequestException, Injectable, UnauthorizedException, } from '@nestjs/common'; import { JwtService } from '@nestjs/jwt'; -import { Operador } from '../operador/entity/operador.entity'; -import { Usuario } from '../usuario/entity/usuario.entity'; import { BcryptService } from '../bcrypt/bcrypt.service'; import { ModuloService } from '../modulo/modulo.service'; import { OperadorService } from '../operador/operador.service'; @@ -24,9 +22,8 @@ export class AuthService { loginAdmin(admin: string, password: string) { return this.operadorService.findAdmin(admin, false).then((operador) => { - this.validarLogin(operador, password); - if (!operador.activo) - throw new ConflictException('Esta cuenta se encuentra desactivada.'); + // if (!operador.activo) + // throw new ConflictException('Esta cuenta se encuentra desactivada.'); const payload: JwtPayload = { id_operador: operador.id_operador, @@ -48,31 +45,20 @@ export class AuthService { const modulo = await this.moduloService.findById(id_modulo); return this.operadorService - .findByOperador(modulo.institucion, operador, false) - .then((operador) => { - this.validarLogin(operador, password); + .informacionOperador(modulo.institucion, operador) + .then((data) => { if ( - operador.institucion.id_institucion != - modulo.institucion.id_institucion + !data.operador || + !this.bcryptService.comparar(password, data.password) ) - throw new ConflictException( - 'Este módulo no pertenece a tu institución, selecciona una que si.', + throw new BadRequestException( + 'Usuario y/o password incorrectos, ingresa unas credenciales válidas.', ); - - const payload: JwtPayload = { - id_operador: operador.id_operador, - id_modulo: modulo.id_modulo, - nombre: operador.nombre, - operador: operador.operador, - institucion: operador.institucion - ? { id_institucion: operador.institucion.id_institucion } - : null, - tipoUsuario: { - id_tipo_usuario: operador.tipoUsuario.id_tipo_usuario, - }, - }; - - return { token: this.jwtService.sign(payload) }; + if (!data.activo) + throw new UnauthorizedException( + 'Esta cuenta se encuentra desactivada.', + ); + return { token: this.jwtService.sign(data.operador) }; }); } @@ -82,20 +68,10 @@ export class AuthService { !data.usuario || !this.bcryptService.comparar(password, data.password) ) - throw new UnauthorizedException( + throw new BadRequestException( 'Usuario y/o password incorrectos, ingresa unas credenciales válidas.', ); return { token: this.jwtService.sign(data.usuario) }; }); } - - validarLogin(usuarioOperador: Usuario | Operador, password: string) { - if ( - !usuarioOperador || - !this.bcryptService.comparar(password, usuarioOperador.password) - ) - throw new UnauthorizedException( - 'Usuario y/o password incorrectos, ingresa unas credenciales válidas.', - ); - } } diff --git a/src/operador/entity/views/informacion-operador.view.ts b/src/operador/entity/views/informacion-operador.view.ts new file mode 100644 index 0000000..5d78f99 --- /dev/null +++ b/src/operador/entity/views/informacion-operador.view.ts @@ -0,0 +1,42 @@ +import { DataSource, ViewEntity, ViewColumn } from 'typeorm'; +import { Institucion } from '../../../institucion/entity/institucion.entity'; +import { TipoUsuario } from '../../../tipo-usuario/entity/tipo-usuario.entity'; +import { Operador } from '../operador.entity'; + +@ViewEntity({ + expression: (dataSource: DataSource) => + dataSource + .createQueryBuilder() + .select('o.id_operador', 'id_operador') + .addSelect('o.activo', 'activo') + .addSelect('o.nombre', 'nombre') + .addSelect('o.operador', 'operador') + .addSelect('o.password', 'password') + .addSelect('tu.id_tipo_usuario', 'id_tipo_usuario') + .addSelect('i.id_institucion', 'id_institucion') + .from(Operador, 'o') + .innerJoin(TipoUsuario, 'tu', 'tu.id_tipo_usuario = o.id_tipo_usuario') + .innerJoin(Institucion, 'i', 'i.id_institucion = o.id_institucion'), +}) +export class InformacionOperadorView { + @ViewColumn() + id_operador: number; + + @ViewColumn() + activo: boolean; + + @ViewColumn() + id_institucion: number; + + @ViewColumn() + id_tipo_usuario: number; + + @ViewColumn() + nombre: string; + + @ViewColumn() + operador: string; + + @ViewColumn() + password: string; +} diff --git a/src/operador/operador.module.ts b/src/operador/operador.module.ts index 458daf1..c3d346a 100644 --- a/src/operador/operador.module.ts +++ b/src/operador/operador.module.ts @@ -4,6 +4,7 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { OperadorController } from './operador.controller'; import { OperadorService } from './operador.service'; import { Operador } from './entity/operador.entity'; +import { InformacionOperadorView } from './entity/views/informacion-operador.view'; import { BcryptModule } from '../bcrypt/bcrypt.module'; import { InstitucionModule } from '../institucion/institucion.module'; import { NodemailerModule } from '../nodemailer/nodemailer.module'; @@ -16,7 +17,7 @@ import { TipoUsuarioModule } from '../tipo-usuario/tipo-usuario.module'; NodemailerModule, PassportModule.register({ defaultStrategy: 'jwt' }), TipoUsuarioModule, - TypeOrmModule.forFeature([Operador]), + TypeOrmModule.forFeature([Operador, InformacionOperadorView]), ], controllers: [OperadorController], providers: [OperadorService], diff --git a/src/operador/operador.service.ts b/src/operador/operador.service.ts index 357a0ca..982c2ce 100644 --- a/src/operador/operador.service.ts +++ b/src/operador/operador.service.ts @@ -7,6 +7,7 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Between, Repository } from 'typeorm'; import { Institucion } from '../institucion/entity/institucion.entity'; import { Operador } from './entity/operador.entity'; +import { InformacionOperadorView } from './entity/views/informacion-operador.view'; import { BcryptService } from '../bcrypt/bcrypt.service'; import { InstitucionService } from '../institucion/institucion.service'; import { NodemailerService } from '../nodemailer/nodemailer.service'; @@ -16,6 +17,8 @@ import { TipoUsuarioService } from '../tipo-usuario/tipo-usuario.service'; export class OperadorService { constructor( @InjectRepository(Operador) private repository: Repository, + @InjectRepository(InformacionOperadorView) + private informacionOperadorView: Repository, private bcryptService: BcryptService, private institucionService: InstitucionService, private nodemailerService: NodemailerService, @@ -170,6 +173,52 @@ export class OperadorService { }); } + informacionOperador(institucion: Institucion, operador: string) { + return this.informacionOperadorView + .findOne({ + where: { operador, id_institucion: institucion.id_institucion }, + }) + .then((operador) => { + if (!operador) return { operador: null, activo: null, password: null }; + return { + operador: { + id_operador: operador.id_operador, + nombre: operador.nombre, + operador: operador.operador, + institucion: { id_institucion: operador.id_institucion }, + tipoUsuario: { id_tipo_usuario: operador.id_tipo_usuario }, + }, + activo: operador.activo, + password: operador.password, + }; + }); + } + + informacionAdmin(institucion: Institucion, admin: string) { + return this.informacionOperadorView + .findOne({ + where: { + operador: admin, + id_institucion: institucion.id_institucion, + id_tipo_usuario: Between(2, 3), + }, + }) + .then((admin) => { + if (!admin) return { operador: null, activo: null, password: null }; + return { + operador: { + id_operador: admin.id_operador, + nombre: admin.nombre, + operador: admin.operador, + institucion: { id_institucion: admin.id_institucion }, + tipoUsuario: { id_tipo_usuario: admin.id_tipo_usuario }, + }, + activo: admin.activo, + password: admin.password, + }; + }); + } + passwordReset(admin: Operador, id_operador: number, password?: string) { return this.findById(id_operador) .then((operador) => { diff --git a/src/usuario/entity/views/informacion-usuario.view.ts b/src/usuario/entity/views/informacion-usuario.view.ts index 367a19c..55f4ca5 100644 --- a/src/usuario/entity/views/informacion-usuario.view.ts +++ b/src/usuario/entity/views/informacion-usuario.view.ts @@ -10,7 +10,6 @@ import { Usuario } from '../usuario.entity'; expression: (dataSource: DataSource) => dataSource .createQueryBuilder() - .from(Usuario, 'u') .select('u.id_usuario', 'id_usuario') .addSelect('u.nombre', 'nombre') .addSelect('u.password', 'password') @@ -22,6 +21,7 @@ import { Usuario } from '../usuario.entity'; .addSelect('is.multa', 'multa') .addSelect('c.id_carrera', 'id_carrera') .addSelect('i.id_institucion', 'id_institucion') + .from(Usuario, 'u') .innerJoin(InstitucionUsuario, 'is', 'is.id_usuario = u.id_usuario') .innerJoin(TipoUsuario, 'tu', 'tu.id_tipo_usuario = u.id_tipo_usuario') .innerJoin( diff --git a/src/usuario/usuario.service.ts b/src/usuario/usuario.service.ts index 108b71a..4eede49 100644 --- a/src/usuario/usuario.service.ts +++ b/src/usuario/usuario.service.ts @@ -21,7 +21,7 @@ export class UsuarioService { constructor( @InjectRepository(Usuario) private repository: Repository, @InjectRepository(InformacionUsuarioView) - private equipoPrestamoView: Repository, + private informacionUsuarioView: Repository, private bcryptService: BcryptService, private institucionService: InstitucionService, private institucionCarreraService: InstitucionCarreraService, @@ -158,38 +158,40 @@ export class UsuarioService { } informacionUsuario(usuario: string) { - return this.equipoPrestamoView.find({ where: { usuario } }).then((data) => { - const instituciones: { - id_institucion_usuario: number; - institucionCarrera: { - id_institucion_carrera: number; - institucion: { id_institucion: number }; - carrera: { id_carrera: number }; - }; - }[] = []; + return this.informacionUsuarioView + .find({ where: { usuario } }) + .then((data) => { + const instituciones: { + id_institucion_usuario: number; + institucionCarrera: { + id_institucion_carrera: number; + institucion: { id_institucion: number }; + carrera: { id_carrera: number }; + }; + }[] = []; - if (data.length === 0) return { usuario: null, password: null }; - for (let i = 0; i < data.length; i++) - if (data[i].activo && !data[i].multa) - instituciones.push({ - id_institucion_usuario: data[i].id_institucion_usuario, - institucionCarrera: { - id_institucion_carrera: data[i].id_institucion_carrera, - institucion: { id_institucion: data[i].id_institucion }, - carrera: { id_carrera: data[i].id_carrera }, - }, - }); - return { - usuario: { - id_usuario: data[0].id_usuario, - nombre: data[0].nombre, - usuario: data[0].usuario, - instituciones, - tipoUsuario: { id_tipo_usuario: data[0].id_tipo_usuario }, - }, - password: data[0].password, - }; - }); + if (data.length === 0) return { usuario: null, password: null }; + for (let i = 0; i < data.length; i++) + if (data[i].activo && !data[i].multa) + instituciones.push({ + id_institucion_usuario: data[i].id_institucion_usuario, + institucionCarrera: { + id_institucion_carrera: data[i].id_institucion_carrera, + institucion: { id_institucion: data[i].id_institucion }, + carrera: { id_carrera: data[i].id_carrera }, + }, + }); + return { + usuario: { + id_usuario: data[0].id_usuario, + nombre: data[0].nombre, + usuario: data[0].usuario, + instituciones, + tipoUsuario: { id_tipo_usuario: data[0].id_tipo_usuario }, + }, + password: data[0].password, + }; + }); } passwordReset(id_usuario: number) { From 3eb50a964ec22e99678fe7e213fcc405a6fc5385 Mon Sep 17 00:00:00 2001 From: lemuel Date: Wed, 31 Aug 2022 11:52:44 -0500 Subject: [PATCH 03/16] login admin mejorado --- src/auth/auth.service.ts | 32 +++++++++++++++----------------- src/operador/operador.service.ts | 3 +-- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index 33efc47..9bbe853 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -21,23 +21,19 @@ export class AuthService { ) {} loginAdmin(admin: string, password: string) { - return this.operadorService.findAdmin(admin, false).then((operador) => { - // if (!operador.activo) - // throw new ConflictException('Esta cuenta se encuentra desactivada.'); - - const payload: JwtPayload = { - id_operador: operador.id_operador, - nombre: operador.nombre, - operador: operador.operador, - institucion: operador.institucion - ? { id_institucion: operador.institucion.id_institucion } - : null, - tipoUsuario: { - id_tipo_usuario: operador.tipoUsuario.id_tipo_usuario, - }, - }; - - return { operador, token: this.jwtService.sign(payload) }; + return this.operadorService.informacionAdmin(admin).then((data) => { + if ( + !data.operador || + !this.bcryptService.comparar(password, data.password) + ) + throw new BadRequestException( + 'Usuario y/o password incorrectos, ingresa unas credenciales válidas.', + ); + if (!data.activo) + throw new UnauthorizedException( + 'Esta cuenta se encuentra desactivada.', + ); + return { token: this.jwtService.sign(data.operador) }; }); } @@ -64,6 +60,8 @@ export class AuthService { loginUsuario(usuario: string, password: string) { return this.usuarioService.informacionUsuario(usuario).then((data) => { + if (!data.password) + throw new BadRequestException('Este usuario no ha sido registrado.'); if ( !data.usuario || !this.bcryptService.comparar(password, data.password) diff --git a/src/operador/operador.service.ts b/src/operador/operador.service.ts index 982c2ce..f341ce1 100644 --- a/src/operador/operador.service.ts +++ b/src/operador/operador.service.ts @@ -194,12 +194,11 @@ export class OperadorService { }); } - informacionAdmin(institucion: Institucion, admin: string) { + informacionAdmin(admin: string) { return this.informacionOperadorView .findOne({ where: { operador: admin, - id_institucion: institucion.id_institucion, id_tipo_usuario: Between(2, 3), }, }) From 03e9f1a145250f6b2479feaebb2910e905ee1683 Mon Sep 17 00:00:00 2001 From: lemuel Date: Wed, 31 Aug 2022 17:32:00 -0500 Subject: [PATCH 04/16] a medias --- src/app.gateway.ts | 10 +-- src/app.module.ts | 4 +- src/auth/auth.service.ts | 1 - ...amo.view.ts => informacion-equipo.view.ts} | 51 +++++++------ src/equipo/equipo.module.ts | 4 +- src/equipo/equipo.service.ts | 8 +- .../entity/views/informacion-operador.view.ts | 8 +- src/operador/operador.service.ts | 42 +++++----- src/upload-file/upload-file.service.ts | 76 +++++++++++++------ .../entity/views/informacion-usuario.view.ts | 32 ++++---- 10 files changed, 127 insertions(+), 109 deletions(-) rename src/equipo/entity/views/{equipo-prestamo.view.ts => informacion-equipo.view.ts} (60%) diff --git a/src/app.gateway.ts b/src/app.gateway.ts index 266fd7d..c22d4f7 100644 --- a/src/app.gateway.ts +++ b/src/app.gateway.ts @@ -10,15 +10,15 @@ import { Socket, Server } from 'socket.io'; @WebSocketGateway({ cors: { origin: [ - // 'http://localhost:3176', - // 'http://localhost:3186', + 'http://localhost:3176', + 'http://localhost:3186', // 'http://132.248.80.196:3155', // 'http://132.248.80.196:3185', // 'https://pmodulospcpuma.unam.mx', // 'https://pmodulospcpuma.unam.mx:3015', - 'https://modulospcpuma.unam.mx', - 'https://modulospcpuma.unam.mx:3015', - 'https://betelgeuse.acatlan.unam.mx:3180', + // 'https://modulospcpuma.unam.mx', + // 'https://modulospcpuma.unam.mx:3015', + // 'https://betelgeuse.acatlan.unam.mx:3180', ], }, }) diff --git a/src/app.module.ts b/src/app.module.ts index 402491b..a93c7cd 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -70,7 +70,7 @@ import { TipoEntrada } from './institucion-tipo-entrada/entity/tipo-entrada.enti import { TipoUsuario } from './tipo-usuario/entity/tipo-usuario.entity'; import { Usuario } from './usuario/entity/usuario.entity'; -// import { EquipoPrestamoView } from './equipo/entity/views/equipo-prestamo.view'; +import { InformacionEquipoView } from './equipo/entity/views/informacion-equipo.view'; import { InformacionOperadorView } from './operador/entity/views/informacion-operador.view'; import { InformacionUsuarioView } from './usuario/entity/views/informacion-usuario.view'; @@ -132,7 +132,7 @@ import { InformacionUsuarioView } from './usuario/entity/views/informacion-usuar TipoEntrada, TipoUsuario, Usuario, - // EquipoPrestamoView, + InformacionEquipoView, InformacionOperadorView, InformacionUsuarioView, ], diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index 9bbe853..9a66360 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -8,7 +8,6 @@ import { BcryptService } from '../bcrypt/bcrypt.service'; import { ModuloService } from '../modulo/modulo.service'; import { OperadorService } from '../operador/operador.service'; import { UsuarioService } from '../usuario/usuario.service'; -import { JwtPayload } from './dto/jwt-payload'; @Injectable() export class AuthService { diff --git a/src/equipo/entity/views/equipo-prestamo.view.ts b/src/equipo/entity/views/informacion-equipo.view.ts similarity index 60% rename from src/equipo/entity/views/equipo-prestamo.view.ts rename to src/equipo/entity/views/informacion-equipo.view.ts index 3313372..093d410 100644 --- a/src/equipo/entity/views/equipo-prestamo.view.ts +++ b/src/equipo/entity/views/informacion-equipo.view.ts @@ -6,54 +6,57 @@ import { Modulo } from '../../../modulo/entity/modulo.entity'; import { EquipoPrograma } from '../../../equipo-programa/entity/equipo-programa.entity'; import { EquipoTipoEntrada } from '../../../equipo-tipo-entrada/entity/equipo-tipo-entrada.entity'; import { Programa } from '../../../institucion-programa/entity/programa.entity'; -import { TipoCarrito } from '../../../institucion-tipo-carrito/entity/tipo-carrito.entity'; import { TipoEntrada } from '../../../institucion-tipo-entrada/entity/tipo-entrada.entity'; -import { Status } from '../../../status/entity/status.entity'; @ViewEntity({ expression: (dataSource: DataSource) => dataSource .createQueryBuilder() - .from(Equipo, 'e') .select('e.id_equipo', 'id_equipo') + .addSelect('e.equipo', 'equipo') + .addSelect('e.id_carrito', 'id_carrito') + .addSelect('e.id_status', 'id_status') + .addSelect('e.numero_inventario', 'numero_inventario') .addSelect('e.prestado', 'prestado') - .addSelect('c.activo', 'activo') - .addSelect('s.id_status', 'id_status') - .addSelect('m.id_modulo', 'id_modulo') - .addSelect('i.id_institucion', 'id_institucion') + .addSelect('c.activo', 'activo_carrito') + .addSelect('c.carrito', 'carrito') + .addSelect('c.id_modulo', 'id_modulo') + .addSelect('c.id_tipo_carrito', 'id_tipo_carrito') + .addSelect('m.activo', 'activo_modulo') + .addSelect('m.id_institucion', 'id_institucion') + .addSelect('i.activo', 'activo_institucion') // .addSelect('p.id_programa') // .addSelect('p.id_programa') // .addSelect('te.id_tipo_entrada') // .addSelect('tc.id_tipo_carrito') + .from(Equipo, 'e') .innerJoin(Carrito, 'c', 'c.id_carrito = e.id_carrito') - .innerJoin(EquipoPrograma, 'ps', 'ps.id_equipo = e.id_equipo') - .innerJoin(EquipoTipoEntrada, 'tes', 'tes.id_equipo = e.id_equipo') - .innerJoin(Status, 's', 's.id_status = e.id_status') - // .innerJoin(TipoEntrada, 'te', 'te.id_tipo_entrada = c.id_tipo_entrada') .innerJoin(Modulo, 'm', 'm.id_modulo = c.id_modulo') - // .innerJoin(Programa, 'p', 'p.id_programa = e.id_programa') - .innerJoin(TipoCarrito, 'tc', 'tc.id_tipo_carrito = c.id_tipo_carrito') - .innerJoin(Institucion, 'i', 'i.id_institucion = m.id_institucion') - .where( - 'e.prestado = 1 && s.id_status = 1 && c.activo = 1 && m.activo = 1 && i.activo = 1', - ), + .innerJoin(Institucion, 'i', 'i.id_institucion = m.id_institucion'), + // .innerJoin(EquipoPrograma, 'ps', 'ps.id_equipo = e.id_equipo') + // .innerJoin(EquipoTipoEntrada, 'tes', 'tes.id_equipo = e.id_equipo') + // .innerJoin(TipoEntrada, 'te', 'te.id_tipo_entrada = c.id_tipo_entrada') + // .innerJoin(Programa, 'p', 'p.id_programa = e.id_programa') }) -export class EquipoPrestamoView { +export class InformacionEquipoView { @ViewColumn() id_equipo: number; + @ViewColumn() + equipo: string; + @ViewColumn() prestado: boolean; - @ViewColumn() - activo: boolean; - - @ViewColumn() - id_status: number; - @ViewColumn() id_modulo: number; + @ViewColumn() + id_carrito: number; + @ViewColumn() id_institucion: number; + + @ViewColumn() + id_status: number; } diff --git a/src/equipo/equipo.module.ts b/src/equipo/equipo.module.ts index d976ddf..6f59bd5 100644 --- a/src/equipo/equipo.module.ts +++ b/src/equipo/equipo.module.ts @@ -4,7 +4,7 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { EquipoController } from './equipo.controller'; import { EquipoService } from './equipo.service'; import { Equipo } from './entity/equipo.entity'; -// import { EquipoPrestamoView } from './entity/views/equipo-prestamo.view'; +import { InformacionEquipoView } from './entity/views/informacion-equipo.view'; import { CarritoModule } from '../carrito/carrito.module'; import { EquipoProgramaModule } from '../equipo-programa/equipo-programa.module'; import { InstitucionModule } from '../institucion/institucion.module'; @@ -33,7 +33,7 @@ import { StatusModule } from '../status/status.module'; OperadorModule, PassportModule.register({ defaultStrategy: 'jwt' }), StatusModule, - TypeOrmModule.forFeature([Equipo /*, EquipoPrestamoView*/]), + TypeOrmModule.forFeature([Equipo, InformacionEquipoView]), ], controllers: [EquipoController], providers: [EquipoService], diff --git a/src/equipo/equipo.service.ts b/src/equipo/equipo.service.ts index f31d496..0cd4341 100644 --- a/src/equipo/equipo.service.ts +++ b/src/equipo/equipo.service.ts @@ -10,7 +10,7 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { Carrito } from '../carrito/entity/carrito.entity'; import { Equipo } from './entity/equipo.entity'; -// import { EquipoPrestamoView } from './entity/views/equipo-prestamo.view'; +import { InformacionEquipoView } from './entity/views/informacion-equipo.view'; import { Institucion } from '../institucion/entity/institucion.entity'; import { Marca } from '../marca/entity/marca.entity'; import { Modelo } from '../modelo/entity/modelo.entity'; @@ -36,8 +36,8 @@ import { StatusService } from '../status/status.service'; export class EquipoService { constructor( @InjectRepository(Equipo) private repository: Repository, - // @InjectRepository(EquipoPrestamoView) - // private equipoPrestamoView: Repository, + @InjectRepository(InformacionEquipoView) + private informacionEquipoView: Repository, private carritoService: CarritoService, @Inject(forwardRef(() => EquipoProgramaService)) private equipoProgramaService: EquipoProgramaService, @@ -300,9 +300,7 @@ export class EquipoService { .where('e.prestado = 0') .orderBy('c.carrito') .addOrderBy('e.equipo'); - // const a = await this.equipoPrestamoView.find(); - // console.log(a); if (programa) { query.andWhere('ps.id_programa = :id_programa', { id_programa: programa.id_programa, diff --git a/src/operador/entity/views/informacion-operador.view.ts b/src/operador/entity/views/informacion-operador.view.ts index 5d78f99..2f2911d 100644 --- a/src/operador/entity/views/informacion-operador.view.ts +++ b/src/operador/entity/views/informacion-operador.view.ts @@ -9,14 +9,12 @@ import { Operador } from '../operador.entity'; .createQueryBuilder() .select('o.id_operador', 'id_operador') .addSelect('o.activo', 'activo') + .addSelect('o.id_institucion', 'id_institucion') + .addSelect('o.id_tipo_usuario', 'id_tipo_usuario') .addSelect('o.nombre', 'nombre') .addSelect('o.operador', 'operador') .addSelect('o.password', 'password') - .addSelect('tu.id_tipo_usuario', 'id_tipo_usuario') - .addSelect('i.id_institucion', 'id_institucion') - .from(Operador, 'o') - .innerJoin(TipoUsuario, 'tu', 'tu.id_tipo_usuario = o.id_tipo_usuario') - .innerJoin(Institucion, 'i', 'i.id_institucion = o.id_institucion'), + .from(Operador, 'o'), }) export class InformacionOperadorView { @ViewColumn() diff --git a/src/operador/operador.service.ts b/src/operador/operador.service.ts index f341ce1..2b4b88f 100644 --- a/src/operador/operador.service.ts +++ b/src/operador/operador.service.ts @@ -173,27 +173,6 @@ export class OperadorService { }); } - informacionOperador(institucion: Institucion, operador: string) { - return this.informacionOperadorView - .findOne({ - where: { operador, id_institucion: institucion.id_institucion }, - }) - .then((operador) => { - if (!operador) return { operador: null, activo: null, password: null }; - return { - operador: { - id_operador: operador.id_operador, - nombre: operador.nombre, - operador: operador.operador, - institucion: { id_institucion: operador.id_institucion }, - tipoUsuario: { id_tipo_usuario: operador.id_tipo_usuario }, - }, - activo: operador.activo, - password: operador.password, - }; - }); - } - informacionAdmin(admin: string) { return this.informacionOperadorView .findOne({ @@ -218,6 +197,27 @@ export class OperadorService { }); } + informacionOperador(institucion: Institucion, operador: string) { + return this.informacionOperadorView + .findOne({ + where: { operador, id_institucion: institucion.id_institucion }, + }) + .then((operador) => { + if (!operador) return { operador: null, activo: null, password: null }; + return { + operador: { + id_operador: operador.id_operador, + nombre: operador.nombre, + operador: operador.operador, + institucion: { id_institucion: operador.id_institucion }, + tipoUsuario: { id_tipo_usuario: operador.id_tipo_usuario }, + }, + activo: operador.activo, + password: operador.password, + }; + }); + } + passwordReset(admin: Operador, id_operador: number, password?: string) { return this.findById(id_operador) .then((operador) => { diff --git a/src/upload-file/upload-file.service.ts b/src/upload-file/upload-file.service.ts index 0b80272..3f3bccb 100644 --- a/src/upload-file/upload-file.service.ts +++ b/src/upload-file/upload-file.service.ts @@ -131,7 +131,8 @@ export class UploadFileService { errores: string[], equiposNuevos: Equipo[], ) { - let error = this.errorBase(index); + const errorAux = this.errorBase(index); + let error = errorAux; if ( !dataEquipo.carrito || @@ -145,23 +146,38 @@ export class UploadFileService { !dataEquipo.tipo ) { if (!dataEquipo.carrito) error += ' falta del campo carrito'; - if (error != this.errorBase(index)) error += ','; - if (!dataEquipo.entradas) error += ' falta del campo entradas'; - if (error != this.errorBase(index)) error += ','; - if (!dataEquipo.equipo) error += ' falta del campo equipo'; - if (error != this.errorBase(index)) error += ','; - if (!dataEquipo.marca) error += ' falta del campo marca'; - if (error != this.errorBase(index)) error += ','; - if (!dataEquipo.modelo) error += ' falta del campo modelo'; - if (error != this.errorBase(index)) error += ','; - if (!dataEquipo.modulo) error += ' falta del campo modulo'; - if (error != this.errorBase(index)) error += ','; - if (!dataEquipo.numero_inventario) + if (!dataEquipo.entradas) { + if (error != errorAux) error += ','; + error += ' falta del campo entradas'; + } + if (!dataEquipo.equipo) { + if (error != errorAux) error += ','; + error += ' falta del campo equipo'; + } + if (!dataEquipo.marca) { + if (error != errorAux) error += ','; + error += ' falta del campo marca'; + } + if (!dataEquipo.modelo) { + if (error != errorAux) error += ','; + error += ' falta del campo modelo'; + } + if (!dataEquipo.modulo) { + if (error != errorAux) error += ','; + error += ' falta del campo modulo'; + } + if (!dataEquipo.numero_inventario) { + if (error != errorAux) error += ','; error += ' falta del campo numero_inventario'; - if (error != this.errorBase(index)) error += ','; - if (!dataEquipo.numero_serie) error += ' falta del campo numero_serie'; - if (error != this.errorBase(index)) error += ','; - if (!dataEquipo.tipo) error += ' falta del campo tipo'; + } + if (!dataEquipo.numero_serie) { + if (error != errorAux) error += ','; + error += ' falta del campo numero_serie'; + } + if (!dataEquipo.tipo) { + if (error != errorAux) error += ','; + error += ' falta del campo tipo'; + } errores.push(error + '.'); return; } @@ -205,14 +221,22 @@ export class UploadFileService { if (!tipoCarrito || !marca || !modelo || !modulo || !carrito) { if (!tipoCarrito) error += ' no existe este tipo de carrito'; - if (error != this.errorBase(index)) error += ','; - if (!marca) error += ' no existe esta marca'; - if (error != this.errorBase(index)) error += ','; - if (!modelo) error += ' no existe este modelo'; - if (error != this.errorBase(index)) error += ','; - if (!modulo) error += ' no existe este módulo'; - if (error != this.errorBase(index)) error += ','; - if (!carrito) error += ' no existe este carrito'; + if (!marca) { + if (error != errorAux) error += ','; + error += ' no existe esta marca'; + } + if (!modelo) { + if (error != errorAux) error += ','; + error += ' no existe este modelo'; + } + if (!modulo) { + if (error != errorAux) error += ','; + error += ' no existe este módulo'; + } + if (!carrito) { + if (error != errorAux) error += ','; + error += ' no existe este carrito'; + } errores.push(error + '.'); return; } @@ -228,6 +252,7 @@ export class UploadFileService { dataEquipo.numero_inventario, false, ); + console.log('hola'); if (equipo) { errores.push( `${error} ya existe un equipo con ese número de inventario en esta institución.`, @@ -242,6 +267,7 @@ export class UploadFileService { marca, modelo, ); + console.log('adios'); const entradas = dataEquipo.entradas.split(','); const programas = dataEquipo.programas diff --git a/src/usuario/entity/views/informacion-usuario.view.ts b/src/usuario/entity/views/informacion-usuario.view.ts index 55f4ca5..00fe385 100644 --- a/src/usuario/entity/views/informacion-usuario.view.ts +++ b/src/usuario/entity/views/informacion-usuario.view.ts @@ -1,9 +1,6 @@ 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/institucion-usuario.entity'; -import { TipoUsuario } from '../../../tipo-usuario/entity/tipo-usuario.entity'; import { Usuario } from '../usuario.entity'; @ViewEntity({ @@ -11,26 +8,23 @@ import { Usuario } from '../usuario.entity'; dataSource .createQueryBuilder() .select('u.id_usuario', 'id_usuario') + .addSelect('u.id_tipo_usuario', 'id_tipo_usuario') .addSelect('u.nombre', 'nombre') .addSelect('u.password', 'password') .addSelect('u.usuario', 'usuario') - .addSelect('tu.id_tipo_usuario', 'id_tipo_usuario') - .addSelect('is.activo', 'activo') - .addSelect('is.id_institucion_usuario', 'id_institucion_usuario') - .addSelect('ic.id_institucion_carrera', 'id_institucion_carrera') - .addSelect('is.multa', 'multa') - .addSelect('c.id_carrera', 'id_carrera') - .addSelect('i.id_institucion', 'id_institucion') + .addSelect('iu.activo', 'activo') + .addSelect('iu.id_institucion_carrera', 'id_institucion_carrera') + .addSelect('iu.id_institucion_usuario', 'id_institucion_usuario') + .addSelect('iu.multa', 'multa') + .addSelect('ic.id_carrera', 'id_carrera') + .addSelect('ic.id_institucion', 'id_institucion') .from(Usuario, 'u') - .innerJoin(InstitucionUsuario, 'is', 'is.id_usuario = u.id_usuario') - .innerJoin(TipoUsuario, 'tu', 'tu.id_tipo_usuario = u.id_tipo_usuario') + .innerJoin(InstitucionUsuario, 'iu', 'iu.id_usuario = u.id_usuario') .innerJoin( InstitucionCarrera, 'ic', - 'ic.id_institucion_carrera = is.id_institucion_carrera', - ) - .innerJoin(Carrera, 'c', 'c.id_carrera = ic.id_carrera') - .innerJoin(Institucion, 'i', 'i.id_institucion = ic.id_institucion'), + 'ic.id_institucion_carrera = iu.id_institucion_carrera', + ), }) export class InformacionUsuarioView { @ViewColumn() @@ -39,9 +33,6 @@ export class InformacionUsuarioView { @ViewColumn() activo: boolean; - @ViewColumn() - multa: boolean; - @ViewColumn() id_carrera: number; @@ -57,6 +48,9 @@ export class InformacionUsuarioView { @ViewColumn() id_tipo_usuario: number; + @ViewColumn() + multa: boolean; + @ViewColumn() nombre: string; From df04dcb4d9719f9c638863601925c77f96a46b23 Mon Sep 17 00:00:00 2001 From: lemuel Date: Wed, 31 Aug 2022 23:43:55 -0500 Subject: [PATCH 05/16] CARGA masiva corregida --- src/app.module.ts | 4 + src/auth/auth.service.ts | 26 ++- .../views/informacion-equipo-programa.view.ts | 22 ++ src/equipo-programa/equipo-programa.module.ts | 3 +- .../equipo-programa.service.ts | 48 +++- .../informacion-equipo-tipo-entrada.view.ts | 22 ++ .../equipo-tipo-entrada.module.ts | 6 +- .../equipo-tipo-entrada.service.ts | 47 ++-- .../entity/views/informacion-equipo.view.ts | 22 +- src/equipo/equipo.service.ts | 52 +++-- src/upload-file/upload-file.service.ts | 208 +++++++++--------- src/usuario/usuario.service.ts | 2 +- 12 files changed, 300 insertions(+), 162 deletions(-) create mode 100644 src/equipo-programa/entity/views/informacion-equipo-programa.view.ts create mode 100644 src/equipo-tipo-entrada/entity/views/informacion-equipo-tipo-entrada.view.ts diff --git a/src/app.module.ts b/src/app.module.ts index a93c7cd..bfd8767 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -71,6 +71,8 @@ import { TipoUsuario } from './tipo-usuario/entity/tipo-usuario.entity'; import { Usuario } from './usuario/entity/usuario.entity'; import { InformacionEquipoView } from './equipo/entity/views/informacion-equipo.view'; +import { InformacionEquipoProgramaView } from './equipo-programa/entity/views/informacion-equipo-programa.view'; +import { InformacionEquipoTipoEntradaView } from './equipo-tipo-entrada/entity/views/informacion-equipo-tipo-entrada.view'; import { InformacionOperadorView } from './operador/entity/views/informacion-operador.view'; import { InformacionUsuarioView } from './usuario/entity/views/informacion-usuario.view'; @@ -133,6 +135,8 @@ import { InformacionUsuarioView } from './usuario/entity/views/informacion-usuar TipoUsuario, Usuario, InformacionEquipoView, + InformacionEquipoProgramaView, + InformacionEquipoTipoEntradaView, InformacionOperadorView, InformacionUsuarioView, ], diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index 9a66360..b128a84 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -58,17 +58,19 @@ export class AuthService { } loginUsuario(usuario: string, password: string) { - return this.usuarioService.informacionUsuario(usuario).then((data) => { - if (!data.password) - throw new BadRequestException('Este usuario no ha sido registrado.'); - if ( - !data.usuario || - !this.bcryptService.comparar(password, data.password) - ) - throw new BadRequestException( - 'Usuario y/o password incorrectos, ingresa unas credenciales válidas.', - ); - return { token: this.jwtService.sign(data.usuario) }; - }); + return this.usuarioService + .informacionUsuarioByUsuario(usuario) + .then((data) => { + if (!data.password) + throw new BadRequestException('Este usuario no ha sido registrado.'); + if ( + !data.usuario || + !this.bcryptService.comparar(password, data.password) + ) + throw new BadRequestException( + 'Usuario y/o password incorrectos, ingresa unas credenciales válidas.', + ); + return { token: this.jwtService.sign(data.usuario) }; + }); } } diff --git a/src/equipo-programa/entity/views/informacion-equipo-programa.view.ts b/src/equipo-programa/entity/views/informacion-equipo-programa.view.ts new file mode 100644 index 0000000..e22e5ba --- /dev/null +++ b/src/equipo-programa/entity/views/informacion-equipo-programa.view.ts @@ -0,0 +1,22 @@ +import { DataSource, ViewEntity, ViewColumn } from 'typeorm'; +import { EquipoPrograma } from '../equipo-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') + .from(EquipoPrograma, 'ep'), +}) +export class InformacionEquipoProgramaView { + @ViewColumn() + id_equipo_programa: number; + + @ViewColumn() + id_equipo: number; + + @ViewColumn() + id_programa: number; +} diff --git a/src/equipo-programa/equipo-programa.module.ts b/src/equipo-programa/equipo-programa.module.ts index f11fae7..520b53a 100644 --- a/src/equipo-programa/equipo-programa.module.ts +++ b/src/equipo-programa/equipo-programa.module.ts @@ -4,6 +4,7 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { EquipoProgramaController } from './equipo-programa.controller'; import { EquipoProgramaService } from './equipo-programa.service'; import { EquipoPrograma } from '../equipo-programa/entity/equipo-programa.entity'; +import { InformacionEquipoProgramaView } from './entity/views/informacion-equipo-programa.view'; import { EquipoModule } from '../equipo/equipo.module'; import { InstitucionProgramaModule } from '../institucion-programa/institucion-programa.module'; @@ -12,7 +13,7 @@ import { InstitucionProgramaModule } from '../institucion-programa/institucion-p forwardRef(() => EquipoModule), InstitucionProgramaModule, PassportModule.register({ defaultStrategy: 'jwt' }), - TypeOrmModule.forFeature([EquipoPrograma]), + TypeOrmModule.forFeature([EquipoPrograma, InformacionEquipoProgramaView]), ], controllers: [EquipoProgramaController], providers: [EquipoProgramaService], diff --git a/src/equipo-programa/equipo-programa.service.ts b/src/equipo-programa/equipo-programa.service.ts index e31218d..1dbba66 100644 --- a/src/equipo-programa/equipo-programa.service.ts +++ b/src/equipo-programa/equipo-programa.service.ts @@ -10,6 +10,7 @@ import { Repository } from 'typeorm'; import { Equipo } from '../equipo/entity/equipo.entity'; import { EquipoPrograma } from './entity/equipo-programa.entity'; import { Programa } from '../institucion-programa/entity/programa.entity'; +import { InformacionEquipoProgramaView } from './entity/views/informacion-equipo-programa.view'; import { EquipoService } from '../equipo/equipo.service'; import { InstitucionProgramaService } from '../institucion-programa/institucion-programa.service'; import { Operador } from '../operador/entity/operador.entity'; @@ -19,6 +20,8 @@ export class EquipoProgramaService { constructor( @InjectRepository(EquipoPrograma) private repository: Repository, + @InjectRepository(InformacionEquipoProgramaView) + private informacionEquipoProgramaView: Repository, @Inject(forwardRef(() => EquipoService)) private equipoService: EquipoService, private institucionProgramaService: InstitucionProgramaService, @@ -29,9 +32,6 @@ export class EquipoProgramaService { id_equipo: number | Equipo, id_programa: number | Programa, ) { - const sinPrograma = await this.institucionProgramaService.findProgramaById( - 1, - ); const equipo = typeof id_equipo === 'number' ? await this.equipoService.findById(id_equipo) @@ -41,13 +41,39 @@ export class EquipoProgramaService { ? await this.institucionProgramaService.findProgramaById(id_programa) : id_programa; - return this.findEquipoProgramaByEquipoPrograma(equipo, programa) - .then((_) => - this.findEquipoProgramaByEquipoPrograma(equipo, sinPrograma, false), - ) + return this.informacionEquipoPrograma( + equipo.id_equipo, + programa.id_programa, + ) + .then((existeEquipoPrograma) => { + if (existeEquipoPrograma) + throw new ConflictException( + 'Este software ya fue asignado a este equipo.', + ); + return this.informacionEquipoPrograma(equipo.id_equipo, 1); + }) .then(async (existeEquipoSinPrograma) => { if (existeEquipoSinPrograma) - await this.repository.remove(existeEquipoSinPrograma); + await this.repository.delete({ + id_equipo_programa: existeEquipoSinPrograma.id_equipo_programa, + }); + return this.repository.save( + this.repository.create({ equipo, programa }), + ); + }) + .then((equipoPrograma) => ({ + message: `Se asignó el software: ${equipoPrograma.programa.programa}, al equipo con número de inventario: ${equipo.numero_inventario}.`, + equipoPrograma, + })); + } + + async createCargaMasiva(equipo: Equipo, programa: Programa) { + return this.informacionEquipoPrograma(equipo.id_equipo, 1) + .then(async (existeEquipoSinPrograma) => { + if (existeEquipoSinPrograma) + await this.repository.delete({ + id_equipo_programa: existeEquipoSinPrograma.id_equipo_programa, + }); return this.repository.save( this.repository.create({ equipo, programa }), ); @@ -120,4 +146,10 @@ export class EquipoProgramaService { return equipoPrograma; }); } + + informacionEquipoPrograma(id_equipo: number, id_programa: number) { + return this.informacionEquipoProgramaView.findOne({ + where: { id_equipo, id_programa }, + }); + } } diff --git a/src/equipo-tipo-entrada/entity/views/informacion-equipo-tipo-entrada.view.ts b/src/equipo-tipo-entrada/entity/views/informacion-equipo-tipo-entrada.view.ts new file mode 100644 index 0000000..f15b983 --- /dev/null +++ b/src/equipo-tipo-entrada/entity/views/informacion-equipo-tipo-entrada.view.ts @@ -0,0 +1,22 @@ +import { DataSource, ViewEntity, ViewColumn } from 'typeorm'; +import { EquipoTipoEntrada } from '../equipo-tipo-entrada.entity'; + +@ViewEntity({ + expression: (dataSource: DataSource) => + dataSource + .createQueryBuilder() + .select('ete.id_equipo_tipo_entrada', 'id_equipo_tipo_entrada') + .addSelect('ete.id_equipo', 'id_equipo') + .addSelect('ete.id_tipo_entrada', 'id_tipo_entrada') + .from(EquipoTipoEntrada, 'ete'), +}) +export class InformacionEquipoTipoEntradaView { + @ViewColumn() + id_equipo_tipo_entrada: number; + + @ViewColumn() + id_equipo: number; + + @ViewColumn() + id_tipo_entrada: number; +} diff --git a/src/equipo-tipo-entrada/equipo-tipo-entrada.module.ts b/src/equipo-tipo-entrada/equipo-tipo-entrada.module.ts index b127918..2cca286 100644 --- a/src/equipo-tipo-entrada/equipo-tipo-entrada.module.ts +++ b/src/equipo-tipo-entrada/equipo-tipo-entrada.module.ts @@ -4,6 +4,7 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { EquipoTipoEntradaController } from './equipo-tipo-entrada.controller'; import { EquipoTipoEntradaService } from './equipo-tipo-entrada.service'; import { EquipoTipoEntrada } from '../equipo-tipo-entrada/entity/equipo-tipo-entrada.entity'; +import { InformacionEquipoTipoEntradaView } from './entity/views/informacion-equipo-tipo-entrada.view'; import { EquipoModule } from '../equipo/equipo.module'; import { InstitucionTipoEntradaModule } from '../institucion-tipo-entrada/institucion-tipo-entrada.module'; @@ -12,7 +13,10 @@ import { InstitucionTipoEntradaModule } from '../institucion-tipo-entrada/instit EquipoModule, InstitucionTipoEntradaModule, PassportModule.register({ defaultStrategy: 'jwt' }), - TypeOrmModule.forFeature([EquipoTipoEntrada]), + TypeOrmModule.forFeature([ + EquipoTipoEntrada, + InformacionEquipoTipoEntradaView, + ]), ], controllers: [EquipoTipoEntradaController], providers: [EquipoTipoEntradaService], diff --git a/src/equipo-tipo-entrada/equipo-tipo-entrada.service.ts b/src/equipo-tipo-entrada/equipo-tipo-entrada.service.ts index dd40214..5534d83 100644 --- a/src/equipo-tipo-entrada/equipo-tipo-entrada.service.ts +++ b/src/equipo-tipo-entrada/equipo-tipo-entrada.service.ts @@ -4,6 +4,7 @@ import { Repository } from 'typeorm'; import { Equipo } from '../equipo/entity/equipo.entity'; import { EquipoTipoEntrada } from './entity/equipo-tipo-entrada.entity'; import { TipoEntrada } from '../institucion-tipo-entrada/entity/tipo-entrada.entity'; +import { InformacionEquipoTipoEntradaView } from './entity/views/informacion-equipo-tipo-entrada.view'; import { EquipoService } from '../equipo/equipo.service'; import { InstitucionTipoEntradaService } from '../institucion-tipo-entrada/institucion-tipo-entrada.service'; @@ -12,6 +13,8 @@ export class EquipoTipoEntradaService { constructor( @InjectRepository(EquipoTipoEntrada) private repository: Repository, + @InjectRepository(InformacionEquipoTipoEntradaView) + private informacionEquipoTipoEntradaView: Repository, private equipoService: EquipoService, private institucionTipoEntradaService: InstitucionTipoEntradaService, ) {} @@ -31,10 +34,28 @@ export class EquipoTipoEntradaService { ) : id_tipo_entrada; - return this.findEquipoTipoEntradaByEquipoTipoEntrada(equipo, tipoEntrada) - .then((_) => - this.repository.save(this.repository.create({ equipo, tipoEntrada })), - ) + return this.informacionEquipoTipoEntrada( + equipo.id_equipo, + tipoEntrada.id_tipo_entrada, + ) + .then((existeEquipoTipoEntrada) => { + if (existeEquipoTipoEntrada) + throw new ConflictException( + 'Este tipo de entrada ya fue asignado a este equipo.', + ); + return this.repository.save( + this.repository.create({ equipo, tipoEntrada }), + ); + }) + .then((equipoTipoEntrada) => ({ + message: `Se asignó el tipo de entrada: ${tipoEntrada.tipo_entrada}, al equipo con número de inventario: ${equipo.numero_inventario}.`, + equipoTipoEntrada, + })); + } + + async createCargaMasiva(equipo: Equipo, tipoEntrada: TipoEntrada) { + return this.repository + .save(this.repository.create({ equipo, tipoEntrada })) .then((equipoTipoEntrada) => ({ message: `Se asignó el tipo de entrada: ${tipoEntrada.tipo_entrada}, al equipo con número de inventario: ${equipo.numero_inventario}.`, equipoTipoEntrada, @@ -59,19 +80,9 @@ export class EquipoTipoEntradaService { }); } - findEquipoTipoEntradaByEquipoTipoEntrada( - equipo: Equipo, - tipoEntrada: TipoEntrada, - validarExistencia = true, - ) { - return this.repository - .findOne({ where: { equipo, tipoEntrada } }) - .then((equipoTipoEntrada) => { - if (validarExistencia && equipoTipoEntrada) - throw new ConflictException( - 'Este tipo de entrada ya fue asignado a este equipo.', - ); - return equipoTipoEntrada; - }); + informacionEquipoTipoEntrada(id_equipo: number, id_tipo_entrada: number) { + return this.informacionEquipoTipoEntradaView.findOne({ + where: { id_equipo, id_tipo_entrada }, + }); } } diff --git a/src/equipo/entity/views/informacion-equipo.view.ts b/src/equipo/entity/views/informacion-equipo.view.ts index 093d410..1f59385 100644 --- a/src/equipo/entity/views/informacion-equipo.view.ts +++ b/src/equipo/entity/views/informacion-equipo.view.ts @@ -43,10 +43,19 @@ export class InformacionEquipoView { id_equipo: number; @ViewColumn() - equipo: string; + activo_carrito: boolean; @ViewColumn() - prestado: boolean; + activo_institucion: boolean; + + @ViewColumn() + activo_modulo: boolean; + + @ViewColumn() + carrito: string; + + @ViewColumn() + equipo: string; @ViewColumn() id_modulo: number; @@ -57,6 +66,15 @@ export class InformacionEquipoView { @ViewColumn() id_institucion: number; + @ViewColumn() + id_tipo_carrito: number; + @ViewColumn() id_status: number; + + @ViewColumn() + numero_inventario: string; + + @ViewColumn() + prestado: boolean; } diff --git a/src/equipo/equipo.service.ts b/src/equipo/equipo.service.ts index 0cd4341..fd5553f 100644 --- a/src/equipo/equipo.service.ts +++ b/src/equipo/equipo.service.ts @@ -10,7 +10,6 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { Carrito } from '../carrito/entity/carrito.entity'; import { Equipo } from './entity/equipo.entity'; -import { InformacionEquipoView } from './entity/views/informacion-equipo.view'; import { Institucion } from '../institucion/entity/institucion.entity'; import { Marca } from '../marca/entity/marca.entity'; import { Modelo } from '../modelo/entity/modelo.entity'; @@ -19,6 +18,7 @@ import { Operador } from '../operador/entity/operador.entity'; import { Programa } from '../institucion-programa/entity/programa.entity'; import { TipoCarrito } from '../institucion-tipo-carrito/entity/tipo-carrito.entity'; import { TipoEntrada } from '../institucion-tipo-entrada/entity/tipo-entrada.entity'; +import { InformacionEquipoView } from './entity/views/informacion-equipo.view'; import { CarritoService } from '../carrito/carrito.service'; import { EquipoProgramaService } from '../equipo-programa/equipo-programa.service'; import { InstitucionService } from '../institucion/institucion.service'; @@ -253,6 +253,25 @@ export class EquipoService { }); } + async findEquipoByEquipo( + id_carrito: number | Carrito, + equipo: string, + validarNoExiste = true, + ) { + const carrito = + typeof id_carrito === 'number' + ? await this.carritoService.findById(id_carrito) + : id_carrito; + + return this.repository + .findOne({ where: { carrito, equipo } }) + .then((equipo) => { + if (validarNoExiste && !equipo) + throw new NotFoundException('No existe este equipo.'); + return equipo; + }); + } + async findEquipo( modulo: Modulo, tipoCarrito: TipoCarrito, @@ -333,6 +352,18 @@ export class EquipoService { }); } + informacionEquipoByEquipo(id_carrito: number, equipo: string) { + return this.informacionEquipoView.findOne({ + where: { equipo, id_carrito }, + }); + } + + informacionEquipoNumeroInventario(id_institucion: number, equipo: string) { + return this.informacionEquipoView.findOne({ + where: { equipo, id_institucion }, + }); + } + reseteoTotal() { return this.repository .createQueryBuilder() @@ -341,25 +372,6 @@ export class EquipoService { .execute(); } - async findEquipoByEquipo( - id_carrito: number | Carrito, - equipo: string, - validarNoExiste = true, - ) { - const carrito = - typeof id_carrito === 'number' - ? await this.carritoService.findById(id_carrito) - : id_carrito; - - return this.repository - .findOne({ where: { carrito, equipo } }) - .then((equipo) => { - if (validarNoExiste && !equipo) - throw new NotFoundException('No existe este equipo.'); - return equipo; - }); - } - async update( // operador: Operador, attrs: Partial, diff --git a/src/upload-file/upload-file.service.ts b/src/upload-file/upload-file.service.ts index 3f3bccb..fe410d7 100644 --- a/src/upload-file/upload-file.service.ts +++ b/src/upload-file/upload-file.service.ts @@ -211,11 +211,17 @@ export class UploadFileService { false, ) : null; + // let equipo = carrito + // ? await this.equipoService.findEquipoByEquipo( + // carrito, + // dataEquipo.equipo, + // false, + // ) + // : null; let equipo = carrito - ? await this.equipoService.findEquipoByEquipo( - carrito, + ? await this.equipoService.informacionEquipoByEquipo( + carrito.id_carrito, dataEquipo.equipo, - false, ) : null; @@ -243,116 +249,120 @@ export class UploadFileService { if (equipo) { errores.push( - `${error} ya existe un equipo de cómputo con el sobrenombre: ${equipo.equipo} en el carrito: ${equipo.carrito.carrito}.`, + `${error} ya existe un equipo de cómputo con el sobrenombre: ${equipo.equipo} en el carrito: ${equipo.carrito}.`, + // `${error} ya existe un equipo de cómputo con el sobrenombre: ${equipo.equipo} en el carrito: ${equipo.carrito.carrito}.`, ); return; } else { - equipo = await this.equipoService.findByNumeroInventario( - institucion, + // equipo = await this.equipoService.findByNumeroInventario( + // institucion, + // dataEquipo.numero_inventario, + // false, + // ); + equipo = await this.equipoService.informacionEquipoNumeroInventario( + institucion.id_institucion, dataEquipo.numero_inventario, - false, ); - console.log('hola'); + if (equipo) { errores.push( `${error} ya existe un equipo con ese número de inventario en esta institución.`, ); return; } - equipo = await this.equipoService.create( - carrito, - dataEquipo.equipo, - dataEquipo.numero_inventario, - dataEquipo.numero_serie, - marca, - modelo, - ); - console.log('adios'); + await this.equipoService + .create( + carrito, + dataEquipo.equipo, + dataEquipo.numero_inventario, + dataEquipo.numero_serie, + marca, + modelo, + ) + .then(async (equipo) => { + const entradas = dataEquipo.entradas.split(','); + const programas = dataEquipo.programas + ? dataEquipo.programas.split(',') + : []; - const entradas = dataEquipo.entradas.split(','); - const programas = dataEquipo.programas - ? dataEquipo.programas.split(',') - : []; + equipo.programas = []; + equipo.tiposEntradas = []; + for (let j = 0; j < entradas.length; j++) { + const tipoEntrada = + await this.institucionTipoEntradaService.findTipoEntradaByTipoEntrada( + entradas[j].trim(), + false, + ); + const existeEquipoTipoEntrada = tipoEntrada + ? await this.equipoTipoEntradaService.informacionEquipoTipoEntrada( + equipo.id_equipo, + tipoEntrada.id_tipo_entrada, + ) + : null; - equipo.programas = []; - equipo.tiposEntradas = []; - for (let j = 0; j < entradas.length; j++) { - const tipoEntrada = - await this.institucionTipoEntradaService.findTipoEntradaByTipoEntrada( - entradas[j].trim(), - false, - ); - const existeEquipoTipoEntrada = tipoEntrada - ? await this.equipoTipoEntradaService.findEquipoTipoEntradaByEquipoTipoEntrada( - equipo, - tipoEntrada, - false, - ) - : null; + if (!tipoEntrada || existeEquipoTipoEntrada) { + if (!tipoEntrada) + errores.push( + `No se asignó el conector: ${ + entradas[j] + }, al equipo de la linea ${ + index + 2 + } porque no existe este conector.`, + ); + if (existeEquipoTipoEntrada) + errores.push( + `El conector: ${ + entradas[j] + }, ya fue asignado al equipo de la linea ${index + 2}.`, + ); + continue; + } + await this.equipoTipoEntradaService + .createCargaMasiva(equipo, tipoEntrada) + .then((res) => { + equipo.tiposEntradas.push(res.equipoTipoEntrada); + mensajes.push(res.message); + }); + } + for (let j = 0; j < programas.length; j++) { + const programa = + await this.institucionProgramaService.findProgramaByPrograma( + programas[j].trim(), + false, + ); + const existeEquipoPrograma = programa + ? await this.equipoProgramaService.informacionEquipoPrograma( + equipo.id_equipo, + programa.id_programa, + ) + : null; - if (!tipoEntrada || existeEquipoTipoEntrada) { - if (!tipoEntrada) - errores.push( - `No se asignó el conector: ${ - entradas[j] - }, al equipo de la linea ${ - index + 2 - } porque no existe este conector.`, - ); - if (existeEquipoTipoEntrada) - errores.push( - `El conector: ${ - entradas[j] - }, ya fue asignado al equipo de la linea ${index + 2}.`, - ); - continue; - } - await this.equipoTipoEntradaService - .create(equipo, tipoEntrada) - .then((res) => { - equipo.tiposEntradas.push(res.equipoTipoEntrada); - mensajes.push(res.message); - }); - } - for (let j = 0; j < programas.length; j++) { - const programa = - await this.institucionProgramaService.findProgramaByPrograma( - programas[j].trim(), - false, - ); - const existeEquipoPrograma = programa - ? await this.equipoProgramaService.findEquipoProgramaByEquipoPrograma( - equipo, - programa, - false, - ) - : null; - - if (!programa || existeEquipoPrograma) { - if (!programa) - errores.push( - `No se asignó el software: ${ - programas[j] - }, al equipo de la linea ${ - index + 2 - } porque no existe este software.`, - ); - if (existeEquipoPrograma) - errores.push( - `El programa: ${ - programas[j] - }, ya lo tiene asignado el equipo de la linea ${index + 2}.`, - ); - continue; - } - await this.equipoProgramaService - .create(equipo, programa) - .then((res) => { - equipo.programas.push(res.equipoPrograma); - mensajes.push(res.message); - }); - } - equiposNuevos.push(equipo); + if (!programa || existeEquipoPrograma) { + if (!programa) + errores.push( + `No se asignó el software: ${ + programas[j] + }, al equipo de la linea ${ + index + 2 + } porque no existe este software.`, + ); + if (existeEquipoPrograma) + errores.push( + `El programa: ${ + programas[j] + }, ya lo tiene asignado el equipo de la linea ${index + 2}.`, + ); + continue; + } + await this.equipoProgramaService + .createCargaMasiva(equipo, programa) + .then((res) => { + equipo.programas.push(res.equipoPrograma); + mensajes.push(res.message); + }); + } + equiposNuevos.push(equipo); + }); } } diff --git a/src/usuario/usuario.service.ts b/src/usuario/usuario.service.ts index 4eede49..f374ed1 100644 --- a/src/usuario/usuario.service.ts +++ b/src/usuario/usuario.service.ts @@ -157,7 +157,7 @@ export class UsuarioService { }); } - informacionUsuario(usuario: string) { + informacionUsuarioByUsuario(usuario: string) { return this.informacionUsuarioView .find({ where: { usuario } }) .then((data) => { From d5445c272413ff93ad4e2ff65f984ebe5da085c8 Mon Sep 17 00:00:00 2001 From: lemuel Date: Wed, 31 Aug 2022 23:44:34 -0500 Subject: [PATCH 06/16] CARGA masiva corregida --- src/app.gateway.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/app.gateway.ts b/src/app.gateway.ts index c22d4f7..266fd7d 100644 --- a/src/app.gateway.ts +++ b/src/app.gateway.ts @@ -10,15 +10,15 @@ import { Socket, Server } from 'socket.io'; @WebSocketGateway({ cors: { origin: [ - 'http://localhost:3176', - 'http://localhost:3186', + // 'http://localhost:3176', + // 'http://localhost:3186', // 'http://132.248.80.196:3155', // 'http://132.248.80.196:3185', // 'https://pmodulospcpuma.unam.mx', // 'https://pmodulospcpuma.unam.mx:3015', - // 'https://modulospcpuma.unam.mx', - // 'https://modulospcpuma.unam.mx:3015', - // 'https://betelgeuse.acatlan.unam.mx:3180', + 'https://modulospcpuma.unam.mx', + 'https://modulospcpuma.unam.mx:3015', + 'https://betelgeuse.acatlan.unam.mx:3180', ], }, }) From 42ca27ac3ac216d16ac4b998b93c9fadcf083922 Mon Sep 17 00:00:00 2001 From: lemuel Date: Thu, 1 Sep 2022 09:50:41 -0500 Subject: [PATCH 07/16] sin modulo en token --- src/app.gateway.ts | 10 +++++----- src/auth/strategy/jwt-strategy.service.ts | 16 +++++++++------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/app.gateway.ts b/src/app.gateway.ts index 266fd7d..c22d4f7 100644 --- a/src/app.gateway.ts +++ b/src/app.gateway.ts @@ -10,15 +10,15 @@ import { Socket, Server } from 'socket.io'; @WebSocketGateway({ cors: { origin: [ - // 'http://localhost:3176', - // 'http://localhost:3186', + 'http://localhost:3176', + 'http://localhost:3186', // 'http://132.248.80.196:3155', // 'http://132.248.80.196:3185', // 'https://pmodulospcpuma.unam.mx', // 'https://pmodulospcpuma.unam.mx:3015', - 'https://modulospcpuma.unam.mx', - 'https://modulospcpuma.unam.mx:3015', - 'https://betelgeuse.acatlan.unam.mx:3180', + // 'https://modulospcpuma.unam.mx', + // 'https://modulospcpuma.unam.mx:3015', + // 'https://betelgeuse.acatlan.unam.mx:3180', ], }, }) diff --git a/src/auth/strategy/jwt-strategy.service.ts b/src/auth/strategy/jwt-strategy.service.ts index 53411a8..f89b339 100644 --- a/src/auth/strategy/jwt-strategy.service.ts +++ b/src/auth/strategy/jwt-strategy.service.ts @@ -38,16 +38,18 @@ export class JwtStrategyService extends PassportStrategy(Strategy) { .then(async (operador) => { if (!operador.activo) throw new ForbiddenException('Esta cuenta esta desactivada.'); - if (operador.tipoUsuario.id_tipo_usuario === 4) { - if (payload.id_modulo) + /* + if (operador.tipoUsuario.id_tipo_usuario === 4) { + if (payload.id_modulo) await this.moduloService - .findById(payload.id_modulo) - .then((modulo) => (user.modulo = modulo)); - else + .findById(payload.id_modulo) + .then((modulo) => (user.modulo = modulo)); + else throw new ForbiddenException( 'Credenciales no válidas, inicia sesión de nuevo.', - ); - } + ); + } + */ user.operador = operador; }); return user; From 0febd029312b9f1507363f7808796de3801cf8c0 Mon Sep 17 00:00:00 2001 From: lemuel Date: Thu, 1 Sep 2022 12:07:16 -0500 Subject: [PATCH 08/16] recaptcha en registro --- src/app.gateway.ts | 10 +++++----- src/usuario/usuario.controller.ts | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/app.gateway.ts b/src/app.gateway.ts index c22d4f7..266fd7d 100644 --- a/src/app.gateway.ts +++ b/src/app.gateway.ts @@ -10,15 +10,15 @@ import { Socket, Server } from 'socket.io'; @WebSocketGateway({ cors: { origin: [ - 'http://localhost:3176', - 'http://localhost:3186', + // 'http://localhost:3176', + // 'http://localhost:3186', // 'http://132.248.80.196:3155', // 'http://132.248.80.196:3185', // 'https://pmodulospcpuma.unam.mx', // 'https://pmodulospcpuma.unam.mx:3015', - // 'https://modulospcpuma.unam.mx', - // 'https://modulospcpuma.unam.mx:3015', - // 'https://betelgeuse.acatlan.unam.mx:3180', + 'https://modulospcpuma.unam.mx', + 'https://modulospcpuma.unam.mx:3015', + 'https://betelgeuse.acatlan.unam.mx:3180', ], }, }) diff --git a/src/usuario/usuario.controller.ts b/src/usuario/usuario.controller.ts index 2584998..e554d5c 100644 --- a/src/usuario/usuario.controller.ts +++ b/src/usuario/usuario.controller.ts @@ -34,7 +34,7 @@ export class UsuarioController { constructor(private usuarioService: UsuarioService) {} @Post('registrar') - // @Recaptcha() + @Recaptcha() @ApiOperation({ description: 'Enpoint que realiza el registro de un usuario.', }) From 5c3bcb6c558af600aa029b2396ac75230a10a74f Mon Sep 17 00:00:00 2001 From: lemuel Date: Fri, 2 Sep 2022 16:15:05 -0500 Subject: [PATCH 09/16] modulo validar usuario --- src/app.module.ts | 2 + src/auth/strategy/jwt-strategy.service.ts | 14 +-- .../carrera-programa.controller.ts | 30 ++--- .../carrera-programa.module.ts | 2 + .../carrito-motivo.controller.ts | 26 ++-- src/carrito-motivo/carrito-motivo.module.ts | 8 +- src/carrito-motivo/carrito-motivo.service.ts | 2 +- src/carrito/carrito.controller.ts | 38 ++---- src/carrito/carrito.module.ts | 2 + src/carrito/carrito.service.ts | 6 +- src/equipo-motivo/equipo-motivo.controller.ts | 24 ++-- src/equipo-motivo/equipo-motivo.module.ts | 2 + .../equipo-programa.controller.ts | 25 ++-- src/equipo-programa/equipo-programa.module.ts | 2 + .../equipo-tipo-entrada.controller.ts | 25 ++-- .../equipo-tipo-entrada.module.ts | 2 + src/equipo/equipo.controller.ts | 33 ++--- src/equipo/equipo.module.ts | 2 + .../hora-excepcion.controller.ts | 22 ++-- src/hora-excepcion/hora-excepcion.module.ts | 2 + .../institucion-dia.controller.ts | 22 ++-- src/institucion-dia/institucion-dia.module.ts | 2 + .../institucion-infraccion.controller.ts | 27 +--- .../institucion-infraccion.module.ts | 2 + .../institucion-programa.controller.ts | 37 ++---- .../institucion-programa.module.ts | 2 + .../institucion-tipo-carrito.controller.ts | 33 ++--- .../institucion-tipo-carrito.module.ts | 2 + .../institucion-tipo-entrada.controller.ts | 37 ++---- .../institucion-tipo-entrada.module.ts | 2 + .../institucion-usuario.controller.ts | 15 +-- .../institucion-usuario.module.ts | 2 + src/institucion/institucion.controller.ts | 34 ++--- src/institucion/institucion.module.ts | 2 + src/marca/marca.controller.ts | 22 ++-- src/marca/marca.module.ts | 2 + src/modelo/modelo.controller.ts | 17 ++- src/modelo/modelo.module.ts | 2 + src/modulo/modulo.controller.ts | 33 ++--- src/modulo/modulo.module.ts | 2 + src/multa/multa.controller.ts | 55 ++------ src/multa/multa.module.ts | 2 + src/operador/operador.controller.ts | 44 ++----- src/operador/operador.module.ts | 2 + src/prestamo/prestamo.controller.ts | 118 ++++-------------- src/prestamo/prestamo.module.ts | 3 + src/status/status.controller.ts | 24 ++-- src/status/status.module.ts | 2 + src/tipo-usuario/tipo-usuario.controller.ts | 27 ++-- src/tipo-usuario/tipo-usuario.module.ts | 2 + src/upload-file/upload-file.controller.ts | 37 +++++- src/upload-file/upload-file.module.ts | 2 + src/usuario/usuario.controller.ts | 44 ++----- src/usuario/usuario.module.ts | 2 + src/validar-usuario/validar-usuario.module.ts | 8 ++ .../validar-usuario.service.spec.ts | 18 +++ .../validar-usuario.service.ts | 53 ++++++++ 57 files changed, 390 insertions(+), 619 deletions(-) create mode 100644 src/validar-usuario/validar-usuario.module.ts create mode 100644 src/validar-usuario/validar-usuario.service.spec.ts create mode 100644 src/validar-usuario/validar-usuario.service.ts diff --git a/src/app.module.ts b/src/app.module.ts index bfd8767..3b79de4 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -75,6 +75,7 @@ import { InformacionEquipoProgramaView } from './equipo-programa/entity/views/in import { InformacionEquipoTipoEntradaView } from './equipo-tipo-entrada/entity/views/informacion-equipo-tipo-entrada.view'; import { InformacionOperadorView } from './operador/entity/views/informacion-operador.view'; import { InformacionUsuarioView } from './usuario/entity/views/informacion-usuario.view'; +import { ValidarUsuarioModule } from './validar-usuario/validar-usuario.module'; @Module({ imports: [ @@ -173,6 +174,7 @@ import { InformacionUsuarioView } from './usuario/entity/views/informacion-usuar TipoUsuarioModule, UploadFileModule, UsuarioModule, + ValidarUsuarioModule, ], }) export class AppModule {} diff --git a/src/auth/strategy/jwt-strategy.service.ts b/src/auth/strategy/jwt-strategy.service.ts index f89b339..003e6c9 100644 --- a/src/auth/strategy/jwt-strategy.service.ts +++ b/src/auth/strategy/jwt-strategy.service.ts @@ -39,16 +39,16 @@ export class JwtStrategyService extends PassportStrategy(Strategy) { if (!operador.activo) throw new ForbiddenException('Esta cuenta esta desactivada.'); /* - if (operador.tipoUsuario.id_tipo_usuario === 4) { - if (payload.id_modulo) + if (operador.tipoUsuario.id_tipo_usuario === 4) { + if (payload.id_modulo) await this.moduloService - .findById(payload.id_modulo) - .then((modulo) => (user.modulo = modulo)); - else + .findById(payload.id_modulo) + .then((modulo) => (user.modulo = modulo)); + else throw new ForbiddenException( 'Credenciales no válidas, inicia sesión de nuevo.', - ); - } + ); + } */ user.operador = operador; }); diff --git a/src/carrera-programa/carrera-programa.controller.ts b/src/carrera-programa/carrera-programa.controller.ts index 3ed6a6a..6eb756c 100644 --- a/src/carrera-programa/carrera-programa.controller.ts +++ b/src/carrera-programa/carrera-programa.controller.ts @@ -1,6 +1,5 @@ import { Body, - ForbiddenException, Controller, Delete, Get, @@ -19,17 +18,21 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { CarreraProgramaService } from './carrera-programa.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; +import { Usuario } from '../usuario/entity/usuario.entity'; import { IdInstitucionDto } from '../dto/id-institucion.dto'; import { CreateCarreraProgramaDto } from './dto/input/create.dto'; import { DeleteCarreraProgramaDto } from './dto/input/delete.dto'; import { CarreraProgramaOutputDto } from './dto/output/carrera-programa.dto'; -import { Usuario } from '../usuario/entity/usuario.entity'; @Controller('carrera-programa') @ApiTags('carrera-programa') export class CarreraProgramaController { - constructor(private carreraProgramaService: CarreraProgramaService) {} + constructor( + private carreraProgramaService: CarreraProgramaService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Post() @UseGuards(AuthGuard('jwt')) @@ -47,10 +50,7 @@ export class CarreraProgramaController { create(@Request() req, @Body() body: CreateCarreraProgramaDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.carreraProgramaService.create( admin, body.id_institucion_carrera, @@ -72,10 +72,7 @@ export class CarreraProgramaController { delete(@Request() req, @Body() body: DeleteCarreraProgramaDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.carreraProgramaService.delete(admin, body.id_carrera_programa); } @@ -96,14 +93,9 @@ export class CarreraProgramaController { const usuarioOperador: Operador | Usuario = req.user.operador || req.user.usuario; - if ( - !usuarioOperador || - (usuarioOperador.tipoUsuario.id_tipo_usuario != 3 && - usuarioOperador.tipoUsuario.id_tipo_usuario < 5) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + if ('id_usuario' in usuarioOperador) + this.validarUsuarioService.validarUsuario(usuarioOperador); + else this.validarUsuarioService.validarAdmin(usuarioOperador); return this.carreraProgramaService.findByIdInstitucion( usuarioOperador, parseInt(query.id_institucion), diff --git a/src/carrera-programa/carrera-programa.module.ts b/src/carrera-programa/carrera-programa.module.ts index 68aea8c..85ad715 100644 --- a/src/carrera-programa/carrera-programa.module.ts +++ b/src/carrera-programa/carrera-programa.module.ts @@ -7,6 +7,7 @@ import { CarreraPrograma } from './entity/carrera-programa.entity'; import { InstitucionModule } from '../institucion/institucion.module'; import { InstitucionCarreraModule } from '../institucion-carrera/institucion-carrera.module'; import { InstitucionProgramaModule } from '../institucion-programa/institucion-programa.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ @@ -15,6 +16,7 @@ import { InstitucionProgramaModule } from '../institucion-programa/institucion-p InstitucionProgramaModule, PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([CarreraPrograma]), + ValidarUsuarioModule, ], controllers: [CarreraProgramaController], providers: [CarreraProgramaService], diff --git a/src/carrito-motivo/carrito-motivo.controller.ts b/src/carrito-motivo/carrito-motivo.controller.ts index 6041383..4236a6d 100644 --- a/src/carrito-motivo/carrito-motivo.controller.ts +++ b/src/carrito-motivo/carrito-motivo.controller.ts @@ -1,11 +1,4 @@ -import { - Controller, - ForbiddenException, - Get, - Query, - Request, - UseGuards, -} from '@nestjs/common'; +import { Controller, Get, Query, Request, UseGuards } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; import { ApiBearerAuth, @@ -14,7 +7,8 @@ import { ApiTags, } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; -import { CaritoMotivoService } from './carrito-motivo.service'; +import { CarritoMotivoService } from './carrito-motivo.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { GetDto } from './dto/input/get.dto'; import { CarritoMotivoOutputDto } from './dto/output/carrito-motivo.dto'; @@ -22,7 +16,10 @@ import { CarritoMotivoOutputDto } from './dto/output/carrito-motivo.dto'; @Controller('carrito-motivo') @ApiTags('carrito-motivo') export class CarritoMotivoController { - constructor(private carritoMotivoService: CaritoMotivoService) {} + constructor( + private carritoMotivoService: CarritoMotivoService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Serealize(CarritoMotivoOutputDto) @Get() @@ -45,14 +42,7 @@ export class CarritoMotivoController { get(@Request() req, @Query() query: GetDto) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.carritoMotivoService.findAllByIdCarrito( parseInt(query.id_carrito), parseInt(query.pagina), diff --git a/src/carrito-motivo/carrito-motivo.module.ts b/src/carrito-motivo/carrito-motivo.module.ts index 420ca39..eec07a6 100644 --- a/src/carrito-motivo/carrito-motivo.module.ts +++ b/src/carrito-motivo/carrito-motivo.module.ts @@ -2,11 +2,12 @@ import { forwardRef, Module } from '@nestjs/common'; import { PassportModule } from '@nestjs/passport'; import { TypeOrmModule } from '@nestjs/typeorm'; import { CarritoMotivoController } from './carrito-motivo.controller'; -import { CaritoMotivoService } from './carrito-motivo.service'; +import { CarritoMotivoService } from './carrito-motivo.service'; import { CarritoMotivo } from './entity/carrito-motivo.entity'; import { CarritoModule } from '../carrito/carrito.module'; import { OperadorModule } from '../operador/operador.module'; import { StatusModule } from '../status/status.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ @@ -15,9 +16,10 @@ import { StatusModule } from '../status/status.module'; StatusModule, PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([CarritoMotivo]), + ValidarUsuarioModule, ], controllers: [CarritoMotivoController], - providers: [CaritoMotivoService], - exports: [CaritoMotivoService], + providers: [CarritoMotivoService], + exports: [CarritoMotivoService], }) export class CarritoMotivoModule {} diff --git a/src/carrito-motivo/carrito-motivo.service.ts b/src/carrito-motivo/carrito-motivo.service.ts index a626474..3c32f2d 100644 --- a/src/carrito-motivo/carrito-motivo.service.ts +++ b/src/carrito-motivo/carrito-motivo.service.ts @@ -9,7 +9,7 @@ import { CarritoService } from '../carrito/carrito.service'; import { OperadorService } from '../operador/operador.service'; @Injectable() -export class CaritoMotivoService { +export class CarritoMotivoService { constructor( @InjectRepository(CarritoMotivo) private repository: Repository, diff --git a/src/carrito/carrito.controller.ts b/src/carrito/carrito.controller.ts index 566a85e..0a540f1 100644 --- a/src/carrito/carrito.controller.ts +++ b/src/carrito/carrito.controller.ts @@ -20,6 +20,7 @@ import { import { Operador } from '../operador/entity/operador.entity'; import { Serealize } from '../interceptors/serialize.interceptor'; import { CarritoService } from './carrito.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { CarritoDto } from './dto/input/carrito.dto'; import { CarritosDto } from './dto/input/carritos.dto'; import { CreateCarritoDto } from './dto/input/create.dto'; @@ -30,7 +31,10 @@ import { CarritosOutputDto } from './dto/output/carritos.dto'; @Controller('carrito') @ApiTags('carrito') export class CarritoController { - constructor(private carritoService: CarritoService) {} + constructor( + private carritoService: CarritoService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Serealize(CarritoOutputDto) @Get('carrito') @@ -47,14 +51,7 @@ export class CarritoController { carrito(@Request() req, @Query() query: CarritoDto) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.carritoService .findById(parseInt(query.id_carrito)) .then((carrito) => { @@ -128,14 +125,7 @@ export class CarritoController { carritos(@Request() req, @Query() query: CarritosDto) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.carritoService.findAll(operador, query); } @@ -156,10 +146,7 @@ export class CarritoController { create(@Request() req, @Body() body: CreateCarritoDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.carritoService.create( admin, body.id_modulo, @@ -191,14 +178,7 @@ export class CarritoController { const data = { ...body }; const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdminOperador(operador); delete data.motivo; return this.carritoService.update(operador, data, body.motivo); } diff --git a/src/carrito/carrito.module.ts b/src/carrito/carrito.module.ts index 3a983e8..c2431c4 100644 --- a/src/carrito/carrito.module.ts +++ b/src/carrito/carrito.module.ts @@ -10,6 +10,7 @@ import { InstitucionTipoCarritoModule } from '../institucion-tipo-carrito/instit import { MarcaModule } from '../marca/marca.module'; import { ModeloModule } from '../modelo/modelo.module'; import { ModuloModule } from '../modulo/modulo.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ @@ -21,6 +22,7 @@ import { ModuloModule } from '../modulo/modulo.module'; ModuloModule, PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([Carrito]), + ValidarUsuarioModule, ], controllers: [CarritoController], providers: [CarritoService], diff --git a/src/carrito/carrito.service.ts b/src/carrito/carrito.service.ts index fc97f6e..024c3b4 100644 --- a/src/carrito/carrito.service.ts +++ b/src/carrito/carrito.service.ts @@ -12,7 +12,7 @@ import { Carrito } from './entity/carrito.entity'; import { Modulo } from '../modulo/entity/modulo.entity'; import { Operador } from '../operador/entity/operador.entity'; import { TipoCarrito } from '../institucion-tipo-carrito/entity/tipo-carrito.entity'; -import { CaritoMotivoService } from '../carrito-motivo/carrito-motivo.service'; +import { CarritoMotivoService } from '../carrito-motivo/carrito-motivo.service'; import { InstitucionService } from '../institucion/institucion.service'; import { InstitucionTipoCarritoService } from '../institucion-tipo-carrito/institucion-tipo-carrito.service'; import { MarcaService } from '../marca/marca.service'; @@ -23,8 +23,8 @@ import { ModuloService } from '../modulo/modulo.service'; export class CarritoService { constructor( @InjectRepository(Carrito) private repository: Repository, - @Inject(forwardRef(() => CaritoMotivoService)) - private caritoMotivoService: CaritoMotivoService, + @Inject(forwardRef(() => CarritoMotivoService)) + private caritoMotivoService: CarritoMotivoService, private institucionService: InstitucionService, private institucionTipoCarritoService: InstitucionTipoCarritoService, private marcaService: MarcaService, diff --git a/src/equipo-motivo/equipo-motivo.controller.ts b/src/equipo-motivo/equipo-motivo.controller.ts index 80ef4d7..c6078e3 100644 --- a/src/equipo-motivo/equipo-motivo.controller.ts +++ b/src/equipo-motivo/equipo-motivo.controller.ts @@ -1,11 +1,4 @@ -import { - Controller, - ForbiddenException, - Get, - Query, - Request, - UseGuards, -} from '@nestjs/common'; +import { Controller, Get, Query, Request, UseGuards } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; import { ApiBearerAuth, @@ -15,6 +8,7 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { EquipoMotivoService } from './equipo-motivo.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { IdEquipoPaginaDto } from '../dto/id-equipo-pagina.dto'; import { EquipoMotivoOutputDto } from './dto/output/equipo-motivo.dto'; @@ -22,7 +16,10 @@ import { EquipoMotivoOutputDto } from './dto/output/equipo-motivo.dto'; @Controller('equipo-motivo') @ApiTags('equipo-motivo') export class EquipoMotivoController { - constructor(private equipoMotivoService: EquipoMotivoService) {} + constructor( + private equipoMotivoService: EquipoMotivoService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Serealize(EquipoMotivoOutputDto) @Get() @@ -45,14 +42,7 @@ export class EquipoMotivoController { get(@Request() req, @Query() query: IdEquipoPaginaDto) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.equipoMotivoService.findAllByIdEquipo( parseInt(query.id_equipo), parseInt(query.pagina), diff --git a/src/equipo-motivo/equipo-motivo.module.ts b/src/equipo-motivo/equipo-motivo.module.ts index 99a3b19..4360db4 100644 --- a/src/equipo-motivo/equipo-motivo.module.ts +++ b/src/equipo-motivo/equipo-motivo.module.ts @@ -7,6 +7,7 @@ import { EquipoMotivo } from './entity/equipo-motivo.entity'; import { EquipoModule } from '../equipo/equipo.module'; import { OperadorModule } from '../operador/operador.module'; import { StatusModule } from '../status/status.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ @@ -15,6 +16,7 @@ import { StatusModule } from '../status/status.module'; StatusModule, PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([EquipoMotivo]), + ValidarUsuarioModule, ], controllers: [EquipoMotivoController], providers: [EquipoMotivoService], diff --git a/src/equipo-programa/equipo-programa.controller.ts b/src/equipo-programa/equipo-programa.controller.ts index 5a09431..846c18d 100644 --- a/src/equipo-programa/equipo-programa.controller.ts +++ b/src/equipo-programa/equipo-programa.controller.ts @@ -2,7 +2,6 @@ import { Body, Controller, Delete, - ForbiddenException, Post, Request, UseGuards, @@ -11,13 +10,17 @@ import { AuthGuard } from '@nestjs/passport'; import { ApiBearerAuth, ApiBody, ApiOperation, ApiTags } from '@nestjs/swagger'; import { Operador } from '../operador/entity/operador.entity'; import { EquipoProgramaService } from './equipo-programa.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { CreateEquipoProgramaDto } from './dto/input/create.dto'; import { DeleteEquipoProgramaDto } from './dto/input/delete.dto'; @Controller('equipo-programa') @ApiTags('equipo-programa') export class EquipoProgramaController { - constructor(private equipoProgramaService: EquipoProgramaService) {} + constructor( + private equipoProgramaService: EquipoProgramaService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Post() @UseGuards(AuthGuard('jwt')) @@ -33,14 +36,7 @@ export class EquipoProgramaController { create(@Request() req, @Body() body: CreateEquipoProgramaDto) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.equipoProgramaService.create(body.id_equipo, body.id_programa); } @@ -58,14 +54,7 @@ export class EquipoProgramaController { delete(@Request() req, @Body() body: DeleteEquipoProgramaDto) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.equipoProgramaService.delete(operador, body.id_equipo_programa); } } diff --git a/src/equipo-programa/equipo-programa.module.ts b/src/equipo-programa/equipo-programa.module.ts index 520b53a..dba6fe5 100644 --- a/src/equipo-programa/equipo-programa.module.ts +++ b/src/equipo-programa/equipo-programa.module.ts @@ -7,6 +7,7 @@ import { EquipoPrograma } from '../equipo-programa/entity/equipo-programa.entity import { InformacionEquipoProgramaView } from './entity/views/informacion-equipo-programa.view'; import { EquipoModule } from '../equipo/equipo.module'; import { InstitucionProgramaModule } from '../institucion-programa/institucion-programa.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ @@ -14,6 +15,7 @@ import { InstitucionProgramaModule } from '../institucion-programa/institucion-p InstitucionProgramaModule, PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([EquipoPrograma, InformacionEquipoProgramaView]), + ValidarUsuarioModule, ], controllers: [EquipoProgramaController], providers: [EquipoProgramaService], diff --git a/src/equipo-tipo-entrada/equipo-tipo-entrada.controller.ts b/src/equipo-tipo-entrada/equipo-tipo-entrada.controller.ts index e6d23f1..4a5bdcc 100644 --- a/src/equipo-tipo-entrada/equipo-tipo-entrada.controller.ts +++ b/src/equipo-tipo-entrada/equipo-tipo-entrada.controller.ts @@ -2,7 +2,6 @@ import { Body, Controller, Delete, - ForbiddenException, Post, Request, UseGuards, @@ -10,6 +9,7 @@ import { import { AuthGuard } from '@nestjs/passport'; import { ApiBearerAuth, ApiBody, ApiOperation, ApiTags } from '@nestjs/swagger'; import { EquipoTipoEntradaService } from './equipo-tipo-entrada.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { CreateEquipoTipoEntradaDto } from './dto/input/create.dto'; import { DeleteEquipoTipoEntradaDto } from './dto/input/delete.dto'; @@ -17,7 +17,10 @@ import { DeleteEquipoTipoEntradaDto } from './dto/input/delete.dto'; @Controller('equipo-tipo-entrada') @ApiTags('equipo-tipo-entrada') export class EquipoTipoEntradaController { - constructor(private equipoTipoEntradaService: EquipoTipoEntradaService) {} + constructor( + private equipoTipoEntradaService: EquipoTipoEntradaService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Post() @UseGuards(AuthGuard('jwt')) @@ -33,14 +36,7 @@ export class EquipoTipoEntradaController { create(@Request() req, @Body() body: CreateEquipoTipoEntradaDto) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.equipoTipoEntradaService.create( body.id_equipo, body.id_tipo_entrada, @@ -61,14 +57,7 @@ export class EquipoTipoEntradaController { delete(@Request() req, @Body() body: DeleteEquipoTipoEntradaDto) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.equipoTipoEntradaService.delete(body.id_equipo_tipo_entrada); } } diff --git a/src/equipo-tipo-entrada/equipo-tipo-entrada.module.ts b/src/equipo-tipo-entrada/equipo-tipo-entrada.module.ts index 2cca286..95311ad 100644 --- a/src/equipo-tipo-entrada/equipo-tipo-entrada.module.ts +++ b/src/equipo-tipo-entrada/equipo-tipo-entrada.module.ts @@ -7,6 +7,7 @@ import { EquipoTipoEntrada } from '../equipo-tipo-entrada/entity/equipo-tipo-ent import { InformacionEquipoTipoEntradaView } from './entity/views/informacion-equipo-tipo-entrada.view'; import { EquipoModule } from '../equipo/equipo.module'; import { InstitucionTipoEntradaModule } from '../institucion-tipo-entrada/institucion-tipo-entrada.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ @@ -17,6 +18,7 @@ import { InstitucionTipoEntradaModule } from '../institucion-tipo-entrada/instit EquipoTipoEntrada, InformacionEquipoTipoEntradaView, ]), + ValidarUsuarioModule, ], controllers: [EquipoTipoEntradaController], providers: [EquipoTipoEntradaService], diff --git a/src/equipo/equipo.controller.ts b/src/equipo/equipo.controller.ts index af60498..4a3accf 100644 --- a/src/equipo/equipo.controller.ts +++ b/src/equipo/equipo.controller.ts @@ -18,6 +18,7 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { EquipoService } from './equipo.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { NumeroInventarioDto } from '../dto/numero-inventario.dto'; import { EquiposDto } from './dto/input/equipos.dto'; @@ -28,7 +29,10 @@ import { EquiposOutputDto } from './dto/output/equipos.dto'; @Controller('equipo') @ApiTags('equipo') export class EquipoController { - constructor(private equipoService: EquipoService) {} + constructor( + private equipoService: EquipoService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Serealize(EquipoOutputDto) @Get('equipo') @@ -51,14 +55,7 @@ export class EquipoController { equipo(@Request() req, @Query() query: NumeroInventarioDto) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.equipoService .findByNumeroInventario( parseInt(query.id_institucion), @@ -159,14 +156,7 @@ export class EquipoController { equipos(@Request() req, @Query() query: EquiposDto) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.equipoService.findAll(operador, query); } @@ -196,14 +186,7 @@ export class EquipoController { const operador: Operador = req.user.operador; const data = { ...body }; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdminOperador(operador); delete data.id_carrito; delete data.id_status; delete data.id_operador; diff --git a/src/equipo/equipo.module.ts b/src/equipo/equipo.module.ts index 6f59bd5..00af674 100644 --- a/src/equipo/equipo.module.ts +++ b/src/equipo/equipo.module.ts @@ -17,6 +17,7 @@ import { ModuloModule } from '../modulo/modulo.module'; import { EquipoMotivoModule } from '../equipo-motivo/equipo-motivo.module'; import { OperadorModule } from '../operador/operador.module'; import { StatusModule } from '../status/status.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ @@ -34,6 +35,7 @@ import { StatusModule } from '../status/status.module'; PassportModule.register({ defaultStrategy: 'jwt' }), StatusModule, TypeOrmModule.forFeature([Equipo, InformacionEquipoView]), + ValidarUsuarioModule, ], controllers: [EquipoController], providers: [EquipoService], diff --git a/src/hora-excepcion/hora-excepcion.controller.ts b/src/hora-excepcion/hora-excepcion.controller.ts index 2013319..cd510c9 100644 --- a/src/hora-excepcion/hora-excepcion.controller.ts +++ b/src/hora-excepcion/hora-excepcion.controller.ts @@ -2,7 +2,6 @@ import { Body, Controller, Delete, - ForbiddenException, Get, Post, Query, @@ -19,6 +18,7 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { HoraExcepcionService } from './hora-excepcion.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { CreateHoraExcepcionDto } from './dto/input/create.dto'; import { DeleteHoraExcepcionDto } from './dto/input/delete.dto'; @@ -28,7 +28,10 @@ import { HoraExcepcionOutputDto } from './dto/output/hora-excepcion.dto'; @Controller('hora-excepcion') @ApiTags('hora-excepcion') export class HoraExcepcionController { - constructor(private horaExcepcionService: HoraExcepcionService) {} + constructor( + private horaExcepcionService: HoraExcepcionService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Post() @UseGuards(AuthGuard('jwt')) @@ -51,10 +54,7 @@ export class HoraExcepcionController { create(@Request() req, @Body() body: CreateHoraExcepcionDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.horaExcepcionService.create( admin, body.id_institucion_dia, @@ -76,10 +76,7 @@ export class HoraExcepcionController { delete(@Request() req, @Body() body: DeleteHoraExcepcionDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.horaExcepcionService.delete(admin, body.id_hora_excepcion); } @@ -98,10 +95,7 @@ export class HoraExcepcionController { get(@Request() req, @Query() query: GetHoraExcepcionDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.horaExcepcionService.findAllByIdInstitucionDia( parseInt(query.id_institucion_dia), ); diff --git a/src/hora-excepcion/hora-excepcion.module.ts b/src/hora-excepcion/hora-excepcion.module.ts index a1d68e0..4e91f55 100644 --- a/src/hora-excepcion/hora-excepcion.module.ts +++ b/src/hora-excepcion/hora-excepcion.module.ts @@ -5,12 +5,14 @@ import { HoraExcepcionController } from './hora-excepcion.controller'; import { HoraExcepcionService } from './hora-excepcion.service'; import { HoraExcepcion } from './entity/hora-excepcion.entity'; import { InstitucionDiaModule } from '../institucion-dia/institucion-dia.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ InstitucionDiaModule, PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([HoraExcepcion]), + ValidarUsuarioModule, ], controllers: [HoraExcepcionController], providers: [HoraExcepcionService], diff --git a/src/institucion-dia/institucion-dia.controller.ts b/src/institucion-dia/institucion-dia.controller.ts index 5a2f0b2..1256da1 100644 --- a/src/institucion-dia/institucion-dia.controller.ts +++ b/src/institucion-dia/institucion-dia.controller.ts @@ -1,7 +1,6 @@ import { Body, Controller, - ForbiddenException, Get, Put, Query, @@ -18,6 +17,7 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { InstitucionDiaService } from './institucion-dia.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { IdInstitucionDto } from '../dto/id-institucion.dto'; import { UpdateInstitucionDiaDto } from './dto/input/update.dto'; @@ -27,7 +27,10 @@ import { Usuario } from '../usuario/entity/usuario.entity'; @Controller('institucion-dia') @ApiTags('institucion-dia') export class InstitucionDiaController { - constructor(private institucionDiaService: InstitucionDiaService) {} + constructor( + private institucionDiaService: InstitucionDiaService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Serealize(InstitucionCarreaOutputDto) @Get() @@ -44,10 +47,7 @@ export class InstitucionDiaController { dias(@Request() req, @Query() query: IdInstitucionDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.institucionDiaService.findAllByIdInstitucion( parseInt(query.id_institucion), ); @@ -69,10 +69,7 @@ export class InstitucionDiaController { hoy(@Request() req, @Query() query: IdInstitucionDto) { const usuario: Usuario = req.user.usuario; - if (!usuario) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarUsuario(usuario); return this.institucionDiaService.hoy(parseInt(query.id_institucion)); } @@ -102,10 +99,7 @@ export class InstitucionDiaController { update(@Request() req, @Body() body: UpdateInstitucionDiaDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.institucionDiaService.update(admin, body); } } diff --git a/src/institucion-dia/institucion-dia.module.ts b/src/institucion-dia/institucion-dia.module.ts index ba116a9..a2453e2 100644 --- a/src/institucion-dia/institucion-dia.module.ts +++ b/src/institucion-dia/institucion-dia.module.ts @@ -6,12 +6,14 @@ import { InstitucionDiaService } from './institucion-dia.service'; import { Dia } from './entity/dia.entity'; import { InstitucionDia } from './entity/institucion-dia.entity'; import { InstitucionModule } from '../institucion/institucion.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ InstitucionModule, PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([Dia, InstitucionDia]), + ValidarUsuarioModule, ], controllers: [InstitucionDiaController], providers: [InstitucionDiaService], diff --git a/src/institucion-infraccion/institucion-infraccion.controller.ts b/src/institucion-infraccion/institucion-infraccion.controller.ts index 69d182c..0738130 100644 --- a/src/institucion-infraccion/institucion-infraccion.controller.ts +++ b/src/institucion-infraccion/institucion-infraccion.controller.ts @@ -1,7 +1,6 @@ import { Body, Controller, - ForbiddenException, Get, Post, Put, @@ -19,6 +18,7 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { InstitucionInfraccionService } from './institucion-infraccion.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { IdInstitucionDto } from '../dto/id-institucion.dto'; import { CreateInstitucionInfraccionDto } from './dto/input/create.dto'; @@ -31,6 +31,7 @@ import { InstitucionInfraccionOutputDto } from './dto/output/institucion-infracc export class InstitucionInfraccionController { constructor( private institucionInfraccionService: InstitucionInfraccionService, + private validarUsuarioService: ValidarUsuarioService, ) {} @Post() @@ -44,10 +45,7 @@ export class InstitucionInfraccionController { create(@Request() req, @Body() body: CreateInstitucionInfraccionDto) { const superAdmin: Operador = req.user.operador; - if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarSuperAdmin(superAdmin); return this.institucionInfraccionService.create(body.infraccion); } @@ -59,10 +57,7 @@ export class InstitucionInfraccionController { get(@Request() req) { const superAdmin: Operador = req.user.operador; - if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarSuperAdmin(superAdmin); return this.institucionInfraccionService.findAll(); } @@ -81,14 +76,7 @@ export class InstitucionInfraccionController { infracciones(@Request() req, @Query() query: IdInstitucionDto) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.institucionInfraccionService.findAllByIdInstitucion( parseInt(query.id_institucion), ); @@ -109,10 +97,7 @@ export class InstitucionInfraccionController { update(@Request() req, @Body() body: UpdateInstitucionInfraccionDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.institucionInfraccionService.update(admin, body); } } diff --git a/src/institucion-infraccion/institucion-infraccion.module.ts b/src/institucion-infraccion/institucion-infraccion.module.ts index 16196cc..531ce63 100644 --- a/src/institucion-infraccion/institucion-infraccion.module.ts +++ b/src/institucion-infraccion/institucion-infraccion.module.ts @@ -6,12 +6,14 @@ import { InstitucionInfraccionService } from './institucion-infraccion.service'; import { Infraccion } from './entity/infraccion.entity'; import { InstitucionInfraccion } from './entity/institucion-infraccion.entity'; import { InstitucionModule } from '../institucion/institucion.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ InstitucionModule, PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([Infraccion, InstitucionInfraccion]), + ValidarUsuarioModule, ], controllers: [InstitucionInfraccionController], providers: [InstitucionInfraccionService], diff --git a/src/institucion-programa/institucion-programa.controller.ts b/src/institucion-programa/institucion-programa.controller.ts index e88571d..4f1ba38 100644 --- a/src/institucion-programa/institucion-programa.controller.ts +++ b/src/institucion-programa/institucion-programa.controller.ts @@ -1,6 +1,5 @@ import { Body, - ForbiddenException, Controller, Get, Post, @@ -19,6 +18,7 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { InstitucionProgramaService } from './institucion-programa.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { Usuario } from '../usuario/entity/usuario.entity'; import { IdInstitucionDto } from '../dto/id-institucion.dto'; @@ -31,7 +31,10 @@ import { ProgramaOutputDto } from './dto/output/programa.dto'; @Controller('institucion-programa') @ApiTags('institucion-programa') export class InstitucionProgramaController { - constructor(private institucionProgramaService: InstitucionProgramaService) {} + constructor( + private institucionProgramaService: InstitucionProgramaService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Post() @UseGuards(AuthGuard('jwt')) @@ -44,10 +47,7 @@ export class InstitucionProgramaController { create(@Request() req, @Body() body: CreateProgramaDto) { const superAdmin: Operador = req.user.operador; - if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarSuperAdmin(superAdmin); return this.institucionProgramaService.create(body.programa); } @@ -59,15 +59,7 @@ export class InstitucionProgramaController { get(@Request() req) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 2 && - operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarOperador(operador); return this.institucionProgramaService.findAllProgramas(); } @@ -86,10 +78,7 @@ export class InstitucionProgramaController { programas(@Request() req, @Query() query: IdInstitucionDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.institucionProgramaService.findAllByIdInstitucion( parseInt(query.id_institucion), ); @@ -111,10 +100,7 @@ export class InstitucionProgramaController { programasMostrar(@Request() req, @Query() query: IdInstitucionDto) { const usuario: Usuario = req.user.usuario; - if (!usuario) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarUsuario(usuario); return this.institucionProgramaService.findAllByIdInstitucion( parseInt(query.id_institucion), true, @@ -137,10 +123,7 @@ export class InstitucionProgramaController { update(@Request() req, @Body() body: UpdateProgramaDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.institucionProgramaService.update(admin, body); } } diff --git a/src/institucion-programa/institucion-programa.module.ts b/src/institucion-programa/institucion-programa.module.ts index 89978ea..e6a4e2b 100644 --- a/src/institucion-programa/institucion-programa.module.ts +++ b/src/institucion-programa/institucion-programa.module.ts @@ -6,12 +6,14 @@ import { InstitucionProgramaService } from './institucion-programa.service'; import { InstitucionPrograma } from './entity/institucion-programa.entity'; import { Programa } from './entity/programa.entity'; import { InstitucionModule } from '../institucion/institucion.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ InstitucionModule, PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([InstitucionPrograma, Programa]), + ValidarUsuarioModule, ], controllers: [InstitucionProgramaController], providers: [InstitucionProgramaService], diff --git a/src/institucion-tipo-carrito/institucion-tipo-carrito.controller.ts b/src/institucion-tipo-carrito/institucion-tipo-carrito.controller.ts index 39d957b..b8eccb0 100644 --- a/src/institucion-tipo-carrito/institucion-tipo-carrito.controller.ts +++ b/src/institucion-tipo-carrito/institucion-tipo-carrito.controller.ts @@ -1,7 +1,6 @@ import { Body, Controller, - ForbiddenException, Get, Post, Put, @@ -19,6 +18,7 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { InstitucionTipoCarritoService } from './institucion-tipo-carrito.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { Usuario } from '../usuario/entity/usuario.entity'; import { IdInstitucionDto } from '../dto/id-institucion.dto'; @@ -33,6 +33,7 @@ import { TipoCarritoOutputDto } from './dto/output/tipo-carrito.dto'; export class InstitucionTipoCarritoController { constructor( private institucionTipoCarritoService: InstitucionTipoCarritoService, + private validarUsuarioService: ValidarUsuarioService, ) {} @Post() @@ -46,10 +47,7 @@ export class InstitucionTipoCarritoController { create(@Request() req, @Body() body: CreateInstitucionTipoCarritoDto) { const superAdmin: Operador = req.user.operador; - if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarSuperAdmin(superAdmin); return this.institucionTipoCarritoService.create( body.letra, body.tipo_carrito, @@ -66,15 +64,7 @@ export class InstitucionTipoCarritoController { get(@Request() req) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 2 && - operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarOperador(operador); return this.institucionTipoCarritoService.findAll(); } @@ -94,10 +84,7 @@ export class InstitucionTipoCarritoController { tiposCarrito(@Request() req, @Query() query: IdInstitucionDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.institucionTipoCarritoService.findAllByIdInstitucion( parseInt(query.id_institucion), ); @@ -119,10 +106,7 @@ export class InstitucionTipoCarritoController { tiposCarritoMostrar(@Request() req, @Query() query: IdInstitucionDto) { const usuario: Usuario = req.user.usuario; - if (!usuario) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarUsuario(usuario); return this.institucionTipoCarritoService.findAllByIdInstitucion( parseInt(query.id_institucion), true, @@ -145,10 +129,7 @@ export class InstitucionTipoCarritoController { update(@Request() req, @Body() body: UpdateInstitucionTipoCarritoDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.institucionTipoCarritoService.update(admin, body); } } diff --git a/src/institucion-tipo-carrito/institucion-tipo-carrito.module.ts b/src/institucion-tipo-carrito/institucion-tipo-carrito.module.ts index b6f5069..0213fcf 100644 --- a/src/institucion-tipo-carrito/institucion-tipo-carrito.module.ts +++ b/src/institucion-tipo-carrito/institucion-tipo-carrito.module.ts @@ -6,12 +6,14 @@ import { InstitucionTipoCarritoService } from './institucion-tipo-carrito.servic import { InstitucionTipoCarrito } from './entity/institucion-tipo-carrito.entity'; import { TipoCarrito } from './entity/tipo-carrito.entity'; import { InstitucionModule } from '../institucion/institucion.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ InstitucionModule, PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([InstitucionTipoCarrito, TipoCarrito]), + ValidarUsuarioModule, ], controllers: [InstitucionTipoCarritoController], providers: [InstitucionTipoCarritoService], diff --git a/src/institucion-tipo-entrada/institucion-tipo-entrada.controller.ts b/src/institucion-tipo-entrada/institucion-tipo-entrada.controller.ts index 4d021f2..56844b9 100644 --- a/src/institucion-tipo-entrada/institucion-tipo-entrada.controller.ts +++ b/src/institucion-tipo-entrada/institucion-tipo-entrada.controller.ts @@ -1,7 +1,6 @@ import { Body, Controller, - ForbiddenException, Get, Post, Put, @@ -19,6 +18,7 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { InstitucionTipoEntradaService } from './institucion-tipo-entrada.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { Usuario } from '../usuario/entity/usuario.entity'; import { IdInstitucionDto } from '../dto/id-institucion.dto'; @@ -31,7 +31,10 @@ import { TipoEntradaOutputDto } from './dto/output/tipo-entrada.dto'; @Controller('institucion-tipo-entrada') @ApiTags('institucion-tipo-entrada') export class InstitucionTipoEntradaController { - constructor(private tipoEntradaService: InstitucionTipoEntradaService) {} + constructor( + private tipoEntradaService: InstitucionTipoEntradaService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Post() @UseGuards(AuthGuard('jwt')) @@ -44,10 +47,7 @@ export class InstitucionTipoEntradaController { create(@Request() req, @Body() body: CreateInstitucionTipoEntradaDto) { const superAdmin: Operador = req.user.operador; - if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarSuperAdmin(superAdmin); return this.tipoEntradaService.create(body.tipo_entrada); } @@ -61,15 +61,7 @@ export class InstitucionTipoEntradaController { get(@Request() req) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 2 && - operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarOperador(operador); return this.tipoEntradaService.findAll(); } @@ -89,10 +81,7 @@ export class InstitucionTipoEntradaController { tiposEntrada(@Request() req, @Query() query: IdInstitucionDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.tipoEntradaService.findAllByIdInstitucion( parseInt(query.id_institucion), ); @@ -114,10 +103,7 @@ export class InstitucionTipoEntradaController { tipoEntradaMostrar(@Request() req, @Query() query: IdInstitucionDto) { const usuario: Usuario = req.user.usuario; - if (!usuario) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarUsuario(usuario); return this.tipoEntradaService.findAllByIdInstitucion( parseInt(query.id_institucion), true, @@ -140,10 +126,7 @@ export class InstitucionTipoEntradaController { update(@Request() req, @Body() body: UpdateInstitucionTipoEntradaDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.tipoEntradaService.update(admin, body); } } diff --git a/src/institucion-tipo-entrada/institucion-tipo-entrada.module.ts b/src/institucion-tipo-entrada/institucion-tipo-entrada.module.ts index 848b649..bb6612b 100644 --- a/src/institucion-tipo-entrada/institucion-tipo-entrada.module.ts +++ b/src/institucion-tipo-entrada/institucion-tipo-entrada.module.ts @@ -6,12 +6,14 @@ import { InstitucionTipoEntradaService } from './institucion-tipo-entrada.servic import { InstitucionModule } from '../institucion/institucion.module'; import { InstitucionTipoEntrada } from './entity/institucion-tipo-entrada.entity'; import { TipoEntrada } from './entity/tipo-entrada.entity'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ InstitucionModule, PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([InstitucionTipoEntrada, TipoEntrada]), + ValidarUsuarioModule, ], controllers: [InstitucionTipoEntradaController], providers: [InstitucionTipoEntradaService], diff --git a/src/institucion-usuario/institucion-usuario.controller.ts b/src/institucion-usuario/institucion-usuario.controller.ts index 7327d16..685fda9 100644 --- a/src/institucion-usuario/institucion-usuario.controller.ts +++ b/src/institucion-usuario/institucion-usuario.controller.ts @@ -9,13 +9,17 @@ import { import { AuthGuard } from '@nestjs/passport'; import { ApiBearerAuth, ApiBody, ApiOperation, ApiTags } from '@nestjs/swagger'; import { InstitucionUsuarioService } from './institucion-usuario.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { UpdateInstitucionUsuarioInputDto } from './dto/input/update.dto'; @Controller('institucion-usuario') @ApiTags('institucion-usuario') export class InstitucionUsuarioController { - constructor(private institucionUsuarioService: InstitucionUsuarioService) {} + constructor( + private institucionUsuarioService: InstitucionUsuarioService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Put() @UseGuards(AuthGuard('jwt')) @@ -38,14 +42,7 @@ export class InstitucionUsuarioController { update(@Request() req, @Body() body: UpdateInstitucionUsuarioInputDto) { const admin: Operador = req.user.operador; - if ( - !admin || - (admin.tipoUsuario.id_tipo_usuario != 3 && - admin.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdminOperador(admin); return this.institucionUsuarioService.update(body); } } diff --git a/src/institucion-usuario/institucion-usuario.module.ts b/src/institucion-usuario/institucion-usuario.module.ts index bb202fb..88eb561 100644 --- a/src/institucion-usuario/institucion-usuario.module.ts +++ b/src/institucion-usuario/institucion-usuario.module.ts @@ -4,11 +4,13 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { InstitucionUsuarioService } from './institucion-usuario.service'; import { InstitucionUsuario } from './entity/institucion-usuario.entity'; import { InstitucionUsuarioController } from './institucion-usuario.controller'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([InstitucionUsuario]), + ValidarUsuarioModule, ], providers: [InstitucionUsuarioService], exports: [InstitucionUsuarioService], diff --git a/src/institucion/institucion.controller.ts b/src/institucion/institucion.controller.ts index b86902a..5e49861 100644 --- a/src/institucion/institucion.controller.ts +++ b/src/institucion/institucion.controller.ts @@ -18,6 +18,7 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { InstitucionService } from './institucion.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { IdInstitucionDto } from '../dto/id-institucion.dto'; import { UpdateInstitucionDto } from './dto/input/update.dto'; @@ -29,7 +30,10 @@ import { InstitucionesMinOutputDto } from './dto/output/instituciones-min.dto'; @Controller('institucion') @ApiTags('institucion') export class InstitucionController { - constructor(private institucionService: InstitucionService) {} + constructor( + private institucionService: InstitucionService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Serealize(InstitucionesMinOutputDto) @Get('instituciones-activas') @@ -50,10 +54,7 @@ export class InstitucionController { get(@Request() req) { const superAdmin: Operador = req.user.operador; - if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarSuperAdmin(superAdmin); return this.institucionService.findAll(); } @@ -72,14 +73,7 @@ export class InstitucionController { institucion(@Request() req, @Query() query: IdInstitucionDto) { const admin: Operador = req.user.operador; - if ( - !admin || - (admin.tipoUsuario.id_tipo_usuario != 2 && - admin.tipoUsuario.id_tipo_usuario != 3) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarSuperAdminAdmin(admin); return this.institucionService .findById(parseInt(query.id_institucion)) .then((institucion) => { @@ -104,10 +98,7 @@ export class InstitucionController { instituciones(@Request() req) { const superAdmin: Operador = req.user.operador; - if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarSuperAdmin(superAdmin); return this.institucionService.findAll(); } @@ -140,14 +131,7 @@ export class InstitucionController { update(@Request() req, @Body() body: UpdateInstitucionDto) { const admin: Operador = req.user.operador; - if ( - !admin || - (admin.tipoUsuario.id_tipo_usuario != 2 && - admin.tipoUsuario.id_tipo_usuario != 3) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarSuperAdminAdmin(admin); return this.institucionService.update(admin, body); } } diff --git a/src/institucion/institucion.module.ts b/src/institucion/institucion.module.ts index cd81e3d..b49895d 100644 --- a/src/institucion/institucion.module.ts +++ b/src/institucion/institucion.module.ts @@ -4,11 +4,13 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { InstitucionController } from './institucion.controller'; import { InstitucionService } from './institucion.service'; import { Institucion } from './entity/institucion.entity'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([Institucion]), + ValidarUsuarioModule, ], controllers: [InstitucionController], providers: [InstitucionService], diff --git a/src/marca/marca.controller.ts b/src/marca/marca.controller.ts index 00d47d3..ed988b5 100644 --- a/src/marca/marca.controller.ts +++ b/src/marca/marca.controller.ts @@ -1,7 +1,6 @@ import { Body, Controller, - ForbiddenException, Get, Post, Query, @@ -18,6 +17,7 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { MarcaService } from './marca.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { CreateMarcaDto } from './dto/input/create.dto'; import { MarcaDto } from './dto/input/marca.dto'; @@ -26,7 +26,10 @@ import { MarcaOutputDto } from './dto/output/marca.dto'; @Controller('marca') @ApiTags('marca') export class MarcaController { - constructor(private marcaService: MarcaService) {} + constructor( + private marcaService: MarcaService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Post() @UseGuards(AuthGuard('jwt')) @@ -39,10 +42,7 @@ export class MarcaController { create(@Request() req, @Body() body: CreateMarcaDto) { const superAdmin: Operador = req.user.operador; - if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarSuperAdmin(superAdmin); return this.marcaService.create(body.marca, body.tipo); } @@ -59,15 +59,7 @@ export class MarcaController { get(@Request() req, @Query() query: MarcaDto) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 2 && - operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarOperador(operador); return this.marcaService.findAll(query.tipo); } } diff --git a/src/marca/marca.module.ts b/src/marca/marca.module.ts index a2783d4..284d2a9 100644 --- a/src/marca/marca.module.ts +++ b/src/marca/marca.module.ts @@ -4,11 +4,13 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { MarcaController } from './marca.controller'; import { MarcaService } from './marca.service'; import { Marca } from './entity/marca.entity'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([Marca]), + ValidarUsuarioModule, ], controllers: [MarcaController], providers: [MarcaService], diff --git a/src/modelo/modelo.controller.ts b/src/modelo/modelo.controller.ts index 5aa7227..fd34a0d 100644 --- a/src/modelo/modelo.controller.ts +++ b/src/modelo/modelo.controller.ts @@ -18,6 +18,7 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { ModeloService } from './modelo.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { CreateModeloDto } from './dto/input/create.dto'; import { ModeloDto } from './dto/input/modelo.dto'; @@ -26,7 +27,10 @@ import { ModeloOutputDto } from './dto/output/modelo.dto'; @Controller('modelo') @ApiTags('modelo') export class ModeloController { - constructor(private modeloService: ModeloService) {} + constructor( + private modeloService: ModeloService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Post() @UseGuards(AuthGuard('jwt')) @@ -39,6 +43,7 @@ export class ModeloController { create(@Request() req, @Body() body: CreateModeloDto) { const superAdmin: Operador = req.user.operador; + this.validarUsuarioService.validarSuperAdmin(superAdmin); if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) throw new ForbiddenException( 'No tienes los permisos necesarios para realizar esta acción.', @@ -59,15 +64,7 @@ export class ModeloController { get(@Request() req, @Query() query: ModeloDto) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 2 && - operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para accedar a esta información.', - ); + this.validarUsuarioService.validarOperador(operador); return this.modeloService.findAll(query.tipo); } } diff --git a/src/modelo/modelo.module.ts b/src/modelo/modelo.module.ts index 2fe3807..d9b11d3 100644 --- a/src/modelo/modelo.module.ts +++ b/src/modelo/modelo.module.ts @@ -4,11 +4,13 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { ModeloController } from './modelo.controller'; import { ModeloService } from './modelo.service'; import { Modelo } from './entity/modelo.entity'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([Modelo]), + ValidarUsuarioModule, ], controllers: [ModeloController], providers: [ModeloService], diff --git a/src/modulo/modulo.controller.ts b/src/modulo/modulo.controller.ts index 474ed01..c81195a 100644 --- a/src/modulo/modulo.controller.ts +++ b/src/modulo/modulo.controller.ts @@ -1,7 +1,6 @@ import { Body, Controller, - ForbiddenException, Get, Post, Put, @@ -19,8 +18,8 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { ModuloService } from './modulo.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; -import { Usuario } from '../usuario/entity/usuario.entity'; import { IdInstitucionDto } from '../dto/id-institucion.dto'; import { CreateModuloDto } from './dto/input/create.dto'; import { ModuloDto } from './dto/input/modulo.dto'; @@ -31,7 +30,10 @@ import { ModuloMinOutputDto } from './dto/output/modulo-min.dto'; @Controller('modulo') @ApiTags('modulo') export class ModuloController { - constructor(private moduloService: ModuloService) {} + constructor( + private moduloService: ModuloService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Post() @UseGuards(AuthGuard('jwt')) @@ -44,10 +46,7 @@ export class ModuloController { create(@Request() req, @Body() body: CreateModuloDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.moduloService.create(admin, body.modulo); } @@ -66,10 +65,7 @@ export class ModuloController { modulo(@Request() req, @Query() query: ModuloDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.moduloService.findById(parseInt(query.id_modulo)); } @@ -88,15 +84,7 @@ export class ModuloController { modulos(@Request() req, @Query() query: IdInstitucionDto) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 2 && - operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarOperador(operador); return this.moduloService.findAllByIdInstitucion( parseInt(query.id_institucion), ); @@ -134,10 +122,7 @@ export class ModuloController { update(@Request() req, @Body() body: UpdateModuloDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.moduloService.update(admin, body); } } diff --git a/src/modulo/modulo.module.ts b/src/modulo/modulo.module.ts index 6eb86b3..2e74289 100644 --- a/src/modulo/modulo.module.ts +++ b/src/modulo/modulo.module.ts @@ -5,12 +5,14 @@ import { ModuloController } from './modulo.controller'; import { ModuloService } from './modulo.service'; import { Modulo } from './entity/modulo.entity'; import { InstitucionModule } from '../institucion/institucion.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ InstitucionModule, PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([Modulo]), + ValidarUsuarioModule, ], controllers: [ModuloController], providers: [ModuloService], diff --git a/src/multa/multa.controller.ts b/src/multa/multa.controller.ts index c9b550a..fb956b8 100644 --- a/src/multa/multa.controller.ts +++ b/src/multa/multa.controller.ts @@ -1,7 +1,6 @@ import { Body, Controller, - ForbiddenException, Get, Post, Put, @@ -19,6 +18,7 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { MultaService } from './multa.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { Usuario } from '../usuario/entity/usuario.entity'; import { IdUsuarioDto } from '../dto/id-usuario.dto'; @@ -35,7 +35,10 @@ import { MultasUsuarioOutputDto } from './dto/output/multas-usuario.dto'; @Controller('multa') @ApiTags('multa') export class MultaController { - constructor(private multaService: MultaService) {} + constructor( + private multaService: MultaService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Post() @UseGuards(AuthGuard('jwt')) @@ -57,14 +60,7 @@ export class MultaController { multar(@Request() req, @Body() body: MultarDto) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.multaService.create( body.id_prestamo, body.id_operador, @@ -102,15 +98,7 @@ export class MultaController { multas(@Request() req, @Query() query: MultasDto) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 2 && - operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.multaService.findAll(query); } @@ -134,14 +122,7 @@ export class MultaController { multasEquipo(@Request() req, @Query() query: IdEquipoPaginaDto) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.multaService.findAllByIdEquipo( parseInt(query.id_equipo), parseInt(query.pagina), @@ -168,15 +149,7 @@ export class MultaController { multasUsuario(@Request() req, @Query() query: IdUsuarioPaginaDto) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 2 && - operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.multaService.findAllByIdUsuario( parseInt(query.id_usuario), parseInt(query.pagina), @@ -199,10 +172,7 @@ export class MultaController { multasActivas(@Request() req, @Query() query: IdUsuarioDto) { const usuario: Usuario = req.user.usuario; - if (!usuario) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarUsuario(usuario); return this.multaService.findMultasActivas(parseInt(query.id_usuario)); } @@ -220,10 +190,7 @@ export class MultaController { quitarMulta(@Request() req, @Body() body: QuitarMultarDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.multaService.quitarMulta(body.id_institucion_usuario); } diff --git a/src/multa/multa.module.ts b/src/multa/multa.module.ts index 37950b7..9e84dab 100644 --- a/src/multa/multa.module.ts +++ b/src/multa/multa.module.ts @@ -11,6 +11,7 @@ import { InstitucionUsuarioModule } from '../institucion-usuario/institucion-usu import { OperadorModule } from '../operador/operador.module'; import { PrestamoModule } from '../prestamo/prestamo.module'; import { UsuarioModule } from '../usuario/usuario.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ @@ -23,6 +24,7 @@ import { UsuarioModule } from '../usuario/usuario.module'; OperadorModule, TypeOrmModule.forFeature([Multa]), UsuarioModule, + ValidarUsuarioModule, ], controllers: [MultaController], providers: [MultaService], diff --git a/src/operador/operador.controller.ts b/src/operador/operador.controller.ts index b4c8af2..ef5d26e 100644 --- a/src/operador/operador.controller.ts +++ b/src/operador/operador.controller.ts @@ -1,7 +1,6 @@ import { Body, Controller, - ForbiddenException, Get, Post, Put, @@ -19,6 +18,7 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { OperadorService } from './operador.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from './entity/operador.entity'; import { CreateAdminDto } from './dto/input/create-admin.dto'; import { CreateOperadorDto } from './dto/input/create-operador.dto'; @@ -29,7 +29,10 @@ import { OperadorOutputDto } from './dto/output/operador.dto'; @Controller('operador') @ApiTags('operador') export class OperadorController { - constructor(private operadorService: OperadorService) {} + constructor( + private operadorService: OperadorService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Post('admin') @UseGuards(AuthGuard('jwt')) @@ -51,10 +54,7 @@ export class OperadorController { createAdmin(@Request() req, @Body() body: CreateAdminDto) { const superAdmin: Operador = req.user.operador; - if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarSuperAdmin(superAdmin); return this.operadorService.create( body.id_institucion, 3, @@ -84,10 +84,7 @@ export class OperadorController { createOperador(@Request() req, @Body() body: CreateOperadorDto) { const admin: Operador = req.user.operador; - if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdmin(admin); return this.operadorService.create( admin.institucion, 4, @@ -132,14 +129,7 @@ export class OperadorController { operadores(@Request() req, @Query() query: OperadoresDto) { const admin: Operador = req.user.operador; - if ( - !admin || - (admin.tipoUsuario.id_tipo_usuario != 2 && - admin.tipoUsuario.id_tipo_usuario != 3) - ) - throw new ForbiddenException( - 'No tienes permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarSuperAdminAdmin(admin); return this.operadorService.findAll(query); } @@ -156,14 +146,7 @@ export class OperadorController { passwordResset(@Request() req, @Body() body: UpdateOperadorDto) { const admin: Operador = req.user.operador; - if ( - !admin || - (admin.tipoUsuario.id_tipo_usuario != 2 && - admin.tipoUsuario.id_tipo_usuario != 3) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarSuperAdminAdmin(admin); return this.operadorService.passwordReset( admin, body.id_operador, @@ -192,14 +175,7 @@ export class OperadorController { update(@Request() req, @Body() body: UpdateOperadorDto) { const admin: Operador = req.user.operador; - if ( - !admin || - (admin.tipoUsuario.id_tipo_usuario != 2 && - admin.tipoUsuario.id_tipo_usuario != 3) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarSuperAdminAdmin(admin); return this.operadorService.update(admin, body); } } diff --git a/src/operador/operador.module.ts b/src/operador/operador.module.ts index c3d346a..79d445a 100644 --- a/src/operador/operador.module.ts +++ b/src/operador/operador.module.ts @@ -9,6 +9,7 @@ import { BcryptModule } from '../bcrypt/bcrypt.module'; import { InstitucionModule } from '../institucion/institucion.module'; import { NodemailerModule } from '../nodemailer/nodemailer.module'; import { TipoUsuarioModule } from '../tipo-usuario/tipo-usuario.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ @@ -18,6 +19,7 @@ import { TipoUsuarioModule } from '../tipo-usuario/tipo-usuario.module'; PassportModule.register({ defaultStrategy: 'jwt' }), TipoUsuarioModule, TypeOrmModule.forFeature([Operador, InformacionOperadorView]), + ValidarUsuarioModule, ], controllers: [OperadorController], providers: [OperadorService], diff --git a/src/prestamo/prestamo.controller.ts b/src/prestamo/prestamo.controller.ts index 8b3959e..30414e5 100644 --- a/src/prestamo/prestamo.controller.ts +++ b/src/prestamo/prestamo.controller.ts @@ -1,7 +1,6 @@ import { Body, Controller, - ForbiddenException, Get, Post, Put, @@ -19,6 +18,7 @@ import { } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { PrestamoService } from './prestamo.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { IdEquipoPaginaDto } from '../dto/id-equipo-pagina.dto'; import { IdUsuarioDto } from '../dto/id-usuario.dto'; @@ -45,7 +45,10 @@ import { Usuario } from '../usuario/entity/usuario.entity'; @Controller('prestamo') @ApiTags('prestamo') export class PrestamoController { - constructor(private prestamoService: PrestamoService) {} + constructor( + private prestamoService: PrestamoService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Serealize(ActivosOutputDto) @Get('activos') @@ -111,14 +114,7 @@ export class PrestamoController { activos(@Request() req, @Query() query: ActivosDto) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.prestamoService.findAll(query); } @@ -137,14 +133,7 @@ export class PrestamoController { cancelarOperador(@Request() req, @Body() body: CancelarOperadorDto) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.prestamoService.cancelarOperador( body.id_prestamo, body.id_operador, @@ -165,10 +154,7 @@ export class PrestamoController { cancelarUsuario(@Request() req, @Body() body: CancelarUsuarioDto) { const usuario: Usuario = req.user.usuario; - if (!usuario) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarUsuario(usuario); return this.prestamoService.cancelarUsuario(body.id_prestamo); } @@ -186,14 +172,7 @@ export class PrestamoController { entregar(@Request() req, @Body() body: EntregarDto) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.prestamoService.entregar(body.id_prestamo, body.id_operador); } @@ -273,14 +252,7 @@ export class PrestamoController { historial(@Request() req, @Query() query: HistorialDto) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.prestamoService.findAll(query); } @@ -305,14 +277,7 @@ export class PrestamoController { historialEquipo(@Request() req, @Query() query: IdEquipoPaginaDto) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.prestamoService.findAllByIdEquipo( parseInt(query.id_equipo), parseInt(query.pagina), @@ -340,14 +305,7 @@ export class PrestamoController { historialUsuario(@Request() req, @Query() query: IdUsuarioPaginaDto) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.prestamoService.findAllByIdUsuario( parseInt(query.id_usuario), parseInt(query.pagina), @@ -376,10 +334,7 @@ export class PrestamoController { pedir(@Request() req, @Body() body: PedirDto) { const usuario: Usuario = req.user.usuario; - if (!usuario) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarUsuario(usuario); return this.prestamoService.create( usuario, body.id_modulo, @@ -400,17 +355,12 @@ export class PrestamoController { type: 'text', }) prestamoIdPrestamo(@Request() req, @Query() query: IdPrestamoDto) { - const operador: Operador = req.user.operador; - const usuario: Usuario = req.user.usuario; + const usuarioOperador: Operador | Usuario = + req.user.operador || req.user.usuario; - if ( - operador && - operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4 - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + if ('id_usuario' in usuarioOperador) + this.validarUsuarioService.validarUsuario(usuarioOperador); + else this.validarUsuarioService.validarAdminOperador(usuarioOperador); return this.prestamoService.findById(parseInt(query.id_prestamo)); } @@ -430,10 +380,7 @@ export class PrestamoController { prestamoIdUsuario(@Request() req, @Query() query: IdUsuarioDto) { const usuario: Usuario = req.user.usuario; - if (!usuario) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarUsuario(usuario); return this.prestamoService.findByIdUsuario(parseInt(query.id_usuario)); } @@ -461,14 +408,7 @@ export class PrestamoController { ) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.prestamoService.findByNumeroInventario( parseInt(query.id_institucion), query.numero_inventario, @@ -495,14 +435,7 @@ export class PrestamoController { regresarIdPrestamo(@Request() req, @Body() body: RegresarIdPrestamoDto) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.prestamoService.regresarIdPrestamo( body.id_operador, body.id_prestamo, @@ -534,14 +467,7 @@ export class PrestamoController { ) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdminOperador(operador); return this.prestamoService.regresarNumeroInventario( body.id_operador, body.numero_inventario, diff --git a/src/prestamo/prestamo.module.ts b/src/prestamo/prestamo.module.ts index aa849d5..a59d8a3 100644 --- a/src/prestamo/prestamo.module.ts +++ b/src/prestamo/prestamo.module.ts @@ -16,6 +16,8 @@ import { ModuloModule } from '../modulo/modulo.module'; import { MultaModule } from '../multa/multa.module'; import { TipoUsuarioModule } from '../tipo-usuario/tipo-usuario.module'; import { UsuarioModule } from '../usuario/usuario.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; + @Module({ imports: [ EquipoModule, @@ -31,6 +33,7 @@ import { UsuarioModule } from '../usuario/usuario.module'; TypeOrmModule.forFeature([Prestamo]), TipoUsuarioModule, UsuarioModule, + ValidarUsuarioModule, ], controllers: [PrestamoController], providers: [AppGateway, PrestamoService], diff --git a/src/status/status.controller.ts b/src/status/status.controller.ts index 4a6c7f0..73d17cb 100644 --- a/src/status/status.controller.ts +++ b/src/status/status.controller.ts @@ -1,21 +1,19 @@ -import { - Controller, - ForbiddenException, - Get, - Request, - UseGuards, -} from '@nestjs/common'; +import { Controller, Get, Request, UseGuards } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { StatusService } from './status.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { StatusOutputDto } from './dto/output/status.dto'; import { Operador } from '../operador/entity/operador.entity'; @Controller('status') @ApiTags('status') export class StatusController { - constructor(private statusService: StatusService) {} + constructor( + private statusService: StatusService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Serealize(StatusOutputDto) @Get() @@ -25,15 +23,7 @@ export class StatusController { get(@Request() req) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 2 && - operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para acceder a esta información.', - ); + this.validarUsuarioService.validarOperador(operador); return this.statusService.findAll(); } } diff --git a/src/status/status.module.ts b/src/status/status.module.ts index 060a111..c684771 100644 --- a/src/status/status.module.ts +++ b/src/status/status.module.ts @@ -4,11 +4,13 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { StatusController } from './status.controller'; import { StatusService } from './status.service'; import { Status } from './entity/status.entity'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([Status]), + ValidarUsuarioModule, ], controllers: [StatusController], providers: [StatusService], diff --git a/src/tipo-usuario/tipo-usuario.controller.ts b/src/tipo-usuario/tipo-usuario.controller.ts index 6cc661c..452b930 100644 --- a/src/tipo-usuario/tipo-usuario.controller.ts +++ b/src/tipo-usuario/tipo-usuario.controller.ts @@ -1,6 +1,5 @@ import { Body, - ConflictException, Controller, Get, Post, @@ -11,6 +10,7 @@ import { AuthGuard } from '@nestjs/passport'; import { ApiBearerAuth, ApiBody, ApiOperation, ApiTags } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { TipoUsuarioService } from './tipo-usuario.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { CreateTipoUsuarioDto } from './dto/input/create.dto'; import { TipoUsuarioOutputDto } from './dto/output/tipo-usuario.dto'; @@ -18,7 +18,10 @@ import { TipoUsuarioOutputDto } from './dto/output/tipo-usuario.dto'; @Controller('tipo-usuario') @ApiTags('tipo-usuario') export class TipoUsuarioController { - constructor(private tipoUsuarioService: TipoUsuarioService) {} + constructor( + private tipoUsuarioService: TipoUsuarioService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Post() @UseGuards(AuthGuard('jwt')) @@ -31,10 +34,7 @@ export class TipoUsuarioController { create(@Request() req, @Body() body: CreateTipoUsuarioDto) { const superAdmin: Operador = req.user.operador; - if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) - throw new ConflictException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarSuperAdmin(superAdmin); return this.tipoUsuarioService.create(body.tipo_usuario); } @@ -48,10 +48,7 @@ export class TipoUsuarioController { get(@Request() req) { const superAdmin: Operador = req.user.operador; - if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) - throw new ConflictException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarSuperAdmin(superAdmin); return this.tipoUsuarioService.findAll(); } @@ -66,15 +63,7 @@ export class TipoUsuarioController { operador(@Request() req) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 2 && - operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ConflictException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarOperador(operador); return this.tipoUsuarioService.findAll('operador'); } } diff --git a/src/tipo-usuario/tipo-usuario.module.ts b/src/tipo-usuario/tipo-usuario.module.ts index f5c0928..a381924 100644 --- a/src/tipo-usuario/tipo-usuario.module.ts +++ b/src/tipo-usuario/tipo-usuario.module.ts @@ -4,11 +4,13 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { TipoUsuarioController } from './tipo-usuario.controller'; import { TipoUsuarioService } from './tipo-usuario.service'; import { TipoUsuario } from './entity/tipo-usuario.entity'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([TipoUsuario]), + ValidarUsuarioModule, ], controllers: [TipoUsuarioController], providers: [TipoUsuarioService], diff --git a/src/upload-file/upload-file.controller.ts b/src/upload-file/upload-file.controller.ts index 8f33a69..f8e8f91 100644 --- a/src/upload-file/upload-file.controller.ts +++ b/src/upload-file/upload-file.controller.ts @@ -5,6 +5,7 @@ import { Post, Query, Response, + Request, UploadedFile, UseGuards, UseInterceptors, @@ -13,23 +14,31 @@ import { AuthGuard } from '@nestjs/passport'; import { FileInterceptor } from '@nestjs/platform-express'; import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; import { UploadFileService } from './upload-file.service'; +import { Operador } from '../operador/entity/operador.entity'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { IdInstitucionDto } from '../dto/id-institucion.dto'; @Controller('upload-file') @ApiTags('upload-file') export class UploadFileController { - constructor(private uploadFileService: UploadFileService) {} + constructor( + private uploadFileService: UploadFileService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Post('carga-masiva-equipos') @UseGuards(AuthGuard('jwt')) @UseInterceptors(FileInterceptor('csv')) @ApiBearerAuth('jwt') cargaMasivaEquipos( + @Request() req, @UploadedFile() file: Express.Multer.File, @Query() query: IdInstitucionDto, ) { + const admin: Operador = req.user.operador; const path = file ? `${file.destination}/${file.filename}` : null; + this.validarUsuarioService.validarAdmin(admin); if (!file) throw new BadRequestException('No se mandó ningún archivo.'); return this.uploadFileService.createEquipos( path, @@ -42,11 +51,14 @@ export class UploadFileController { @UseInterceptors(FileInterceptor('csv')) @ApiBearerAuth('jwt') cargaMasivaUsuarios( + @Request() req, @UploadedFile() file: Express.Multer.File, @Query() query: IdInstitucionDto, ) { + const admin: Operador = req.user.operador; const path = file ? `${file.destination}/${file.filename}` : null; + this.validarUsuarioService.validarAdmin(admin); if (!file) throw new BadRequestException('No se mandó ningún archivo.'); return this.uploadFileService.createUsuarios( path, @@ -57,7 +69,14 @@ export class UploadFileController { @Get('download-logo') @UseGuards(AuthGuard('jwt')) @ApiBearerAuth('jwt') - downloadLogo(@Response() res, @Query() query: IdInstitucionDto) { + downloadLogo( + @Request() req, + @Response() res, + @Query() query: IdInstitucionDto, + ) { + const operador: Operador = req.user.operador; + + this.validarUsuarioService.validarAdminOperador(operador); return this.uploadFileService .downloadLogo(parseInt(query.id_institucion)) .then((logo) => res.download(logo)); @@ -66,14 +85,20 @@ export class UploadFileController { @Get('download-plantilla-equipos') @UseGuards(AuthGuard('jwt')) @ApiBearerAuth('jwt') - downloadPlantillaEquipos(@Response() res) { + downloadPlantillaEquipos(@Request() req, @Response() res) { + const admin: Operador = req.user.operador; + + this.validarUsuarioService.validarAdmin(admin); return res.download('./upload/plantilla_equipos.csv'); } @Get('download-plantilla-usuarios') @UseGuards(AuthGuard('jwt')) @ApiBearerAuth('jwt') - downloadPlantillaUsuarios(@Response() res) { + downloadPlantillaUsuarios(@Request() req, @Response() res) { + const admin: Operador = req.user.operador; + + this.validarUsuarioService.validarAdmin(admin); return res.download('./upload/plantilla_alumnos.csv'); } @@ -82,9 +107,13 @@ export class UploadFileController { @ApiBearerAuth('jwt') @UseInterceptors(FileInterceptor('logo')) uploadLogo( + @Request() req, @UploadedFile() file: Express.Multer.File, @Query() query: IdInstitucionDto, ) { + const admin: Operador = req.user.operador; + + this.validarUsuarioService.validarAdmin(admin); return this.uploadFileService.uploadLogo( file, parseInt(query.id_institucion), diff --git a/src/upload-file/upload-file.module.ts b/src/upload-file/upload-file.module.ts index 40d7f24..06f3d93 100644 --- a/src/upload-file/upload-file.module.ts +++ b/src/upload-file/upload-file.module.ts @@ -19,6 +19,7 @@ import { ModeloModule } from '../modelo/modelo.module'; import { ModuloModule } from '../modulo/modulo.module'; import { TipoUsuarioModule } from '../tipo-usuario/tipo-usuario.module'; import { UsuarioModule } from '../usuario/usuario.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ @@ -49,6 +50,7 @@ import { UsuarioModule } from '../usuario/usuario.module'; PassportModule.register({ defaultStrategy: 'jwt' }), TipoUsuarioModule, UsuarioModule, + ValidarUsuarioModule, ], controllers: [UploadFileController], providers: [AppGateway, UploadFileService], diff --git a/src/usuario/usuario.controller.ts b/src/usuario/usuario.controller.ts index e554d5c..1df9ebf 100644 --- a/src/usuario/usuario.controller.ts +++ b/src/usuario/usuario.controller.ts @@ -1,7 +1,6 @@ import { Body, Controller, - ForbiddenException, Get, Post, Put, @@ -20,6 +19,7 @@ import { import { Recaptcha } from '@nestlab/google-recaptcha'; import { Serealize } from '../interceptors/serialize.interceptor'; import { UsuarioService } from './usuario.service'; +import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { RegistrarUsuarioInputDto } from './dto/input/registrar.dto'; import { UpdateUsuarioInputDto } from './dto/input/update.dto'; @@ -31,7 +31,10 @@ import { UsuariosOutputDto } from './dto/output/usuarios.dto'; @Controller('usuario') @ApiTags('usuario') export class UsuarioController { - constructor(private usuarioService: UsuarioService) {} + constructor( + private usuarioService: UsuarioService, + private validarUsuarioService: ValidarUsuarioService, + ) {} @Post('registrar') @Recaptcha() @@ -77,14 +80,7 @@ export class UsuarioController { update(@Request() req, @Body() body: UpdateUsuarioInputDto) { const admin: Operador = req.user.operador; - if ( - !admin || - (admin.tipoUsuario.id_tipo_usuario != 3 && - admin.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdminOperador(admin); return this.usuarioService.update(body); } @@ -101,14 +97,7 @@ export class UsuarioController { passwordResset(@Request() req, @Body() body: UpdateUsuarioInputDto) { const admin: Operador = req.user.operador; - if ( - !admin || - (admin.tipoUsuario.id_tipo_usuario != 3 && - admin.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdminOperador(admin); return this.usuarioService.passwordReset(body.id_usuario); } @@ -127,14 +116,7 @@ export class UsuarioController { usuario(@Request() req, @Query() query: UsuarioInputDto) { const admin: Operador = req.user.operador; - if ( - !admin || - (admin.tipoUsuario.id_tipo_usuario != 3 && - admin.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarAdminOperador(admin); return this.usuarioService.findByUsuario(query.usuario, true, true); } @@ -184,15 +166,7 @@ export class UsuarioController { usuarios(@Request() req, @Query() query: UsuariosInputDto) { const operador: Operador = req.user.operador; - if ( - !operador || - (operador.tipoUsuario.id_tipo_usuario != 2 && - operador.tipoUsuario.id_tipo_usuario != 3 && - operador.tipoUsuario.id_tipo_usuario != 4) - ) - throw new ForbiddenException( - 'No tienes los permisos necesarios para realizar esta acción.', - ); + this.validarUsuarioService.validarOperador(operador); return this.usuarioService.findAll(query); } } diff --git a/src/usuario/usuario.module.ts b/src/usuario/usuario.module.ts index df94c8a..16436ae 100644 --- a/src/usuario/usuario.module.ts +++ b/src/usuario/usuario.module.ts @@ -11,6 +11,7 @@ import { InstitucionCarreraModule } from '../institucion-carrera/institucion-car import { InstitucionUsuarioModule } from '../institucion-usuario/institucion-usuario.module'; import { NodemailerModule } from '../nodemailer/nodemailer.module'; import { TipoUsuarioModule } from '../tipo-usuario/tipo-usuario.module'; +import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ @@ -22,6 +23,7 @@ import { TipoUsuarioModule } from '../tipo-usuario/tipo-usuario.module'; PassportModule.register({ defaultStrategy: 'jwt' }), TipoUsuarioModule, TypeOrmModule.forFeature([Usuario, InformacionUsuarioView]), + ValidarUsuarioModule, ], controllers: [UsuarioController], providers: [UsuarioService], diff --git a/src/validar-usuario/validar-usuario.module.ts b/src/validar-usuario/validar-usuario.module.ts new file mode 100644 index 0000000..e9c9d93 --- /dev/null +++ b/src/validar-usuario/validar-usuario.module.ts @@ -0,0 +1,8 @@ +import { Module } from '@nestjs/common'; +import { ValidarUsuarioService } from './validar-usuario.service'; + +@Module({ + providers: [ValidarUsuarioService], + exports: [ValidarUsuarioService], +}) +export class ValidarUsuarioModule {} diff --git a/src/validar-usuario/validar-usuario.service.spec.ts b/src/validar-usuario/validar-usuario.service.spec.ts new file mode 100644 index 0000000..518ecb9 --- /dev/null +++ b/src/validar-usuario/validar-usuario.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { ValidarUsuarioService } from './validar-usuario.service'; + +describe('ValidarUsuarioService', () => { + let service: ValidarUsuarioService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [ValidarUsuarioService], + }).compile(); + + service = module.get(ValidarUsuarioService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/validar-usuario/validar-usuario.service.ts b/src/validar-usuario/validar-usuario.service.ts new file mode 100644 index 0000000..9a4e17f --- /dev/null +++ b/src/validar-usuario/validar-usuario.service.ts @@ -0,0 +1,53 @@ +import { ForbiddenException, Injectable } from '@nestjs/common'; +import { Operador } from 'src/operador/entity/operador.entity'; +import { Usuario } from 'src/usuario/entity/usuario.entity'; + +@Injectable() +export class ValidarUsuarioService { + validarUsuario(usuario: Usuario) { + if (!usuario) this.sinPermisos(); + } + + validarAdmin(admin: Operador) { + if (!admin || admin.tipoUsuario.id_tipo_usuario != 3) this.sinPermisos(); + } + + validarAdminOperador(admin: Operador) { + if ( + !admin || + (admin.tipoUsuario.id_tipo_usuario != 3 && + admin.tipoUsuario.id_tipo_usuario != 4) + ) + this.sinPermisos(); + } + + validarOperador(operador: Operador) { + if ( + !operador || + (operador.tipoUsuario.id_tipo_usuario != 2 && + operador.tipoUsuario.id_tipo_usuario != 3 && + operador.tipoUsuario.id_tipo_usuario != 4) + ) + this.sinPermisos(); + } + + validarSuperAdmin(superAdmin: Operador) { + if (!superAdmin || superAdmin.tipoUsuario.id_tipo_usuario != 2) + this.sinPermisos(); + } + + validarSuperAdminAdmin(admin: Operador) { + if ( + !admin || + (admin.tipoUsuario.id_tipo_usuario != 2 && + admin.tipoUsuario.id_tipo_usuario != 3) + ) + this.sinPermisos(); + } + + sinPermisos() { + throw new ForbiddenException( + 'No tienes los permisos necesarios para realizar esta acción.', + ); + } +} From 521c4df67a1dfa2217864a74922e1336989a5c06 Mon Sep 17 00:00:00 2001 From: lemuel Date: Fri, 2 Sep 2022 16:59:49 -0500 Subject: [PATCH 10/16] plantilla actualizada --- upload/plantilla_usuario.csv | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/upload/plantilla_usuario.csv b/upload/plantilla_usuario.csv index be6bc15..0d6e20a 100644 --- a/upload/plantilla_usuario.csv +++ b/upload/plantilla_usuario.csv @@ -1,5 +1,5 @@ -numero_cuenta,nombres,apellido_p,apellido_m,carrera,tipo_usuario,rfc -316313528,LEMUEL HELON,MARQUEZ,ROSAS,MATEMATICAS APLICADAS Y COMPUTACION,Alumno, -316019251,MARCO ANTONIO,ROMERO,VAZQUEZ,ACTUARIA,Alumno, -316304326,JEREMY,CARRERA,SERRANO,ARQUITECTURA,Alumno, -419085500,ANDRES HERNAN,SAAVEDRA,TREJO,,Profesor,KDIE993388EOX +numero_cuenta,nombres,apellido_p,apellido_m,carrera,tipo_usuario,rfc,correo +316313528,LEMUEL HELON,MARQUEZ,ROSAS,MATEMATICAS APLICADAS Y COMPUTACION,Alumno,, +316019251,MARCO ANTONIO,ROMERO,VAZQUEZ,ACTUARIA,Alumno,, +316304326,JEREMY,CARRERA,SERRANO,ARQUITECTURA,Alumno,, +419085500,ANDRES HERNAN,SAAVEDRA,TREJO,,Profesor,KDIE993388EOX, From 09b3a0770f0a3a04647df9a8bfcd73d32ca1789c Mon Sep 17 00:00:00 2001 From: xXpuma99Xx <51341582+xXpuma99Xx@users.noreply.github.com> Date: Sun, 4 Sep 2022 22:59:25 -0500 Subject: [PATCH 11/16] mas filtros --- src/auth/dto/jwt-payload-admin.ts | 11 ++++++++ src/auth/dto/jwt-payload-operador.ts | 13 +++++++++ src/auth/dto/jwt-payload-usuario.ts | 18 +++++++++++++ .../entity/carrera.entity.ts | 2 +- src/prestamo/dto/input/historial.dto.ts | 9 +++++++ src/prestamo/prestamo.service.ts | 27 +++++++++++++++---- 6 files changed, 74 insertions(+), 6 deletions(-) create mode 100644 src/auth/dto/jwt-payload-admin.ts create mode 100644 src/auth/dto/jwt-payload-operador.ts create mode 100644 src/auth/dto/jwt-payload-usuario.ts diff --git a/src/auth/dto/jwt-payload-admin.ts b/src/auth/dto/jwt-payload-admin.ts new file mode 100644 index 0000000..8551935 --- /dev/null +++ b/src/auth/dto/jwt-payload-admin.ts @@ -0,0 +1,11 @@ +export class JwtPayload { + nombre: string; + + id_operador: number; + + institucion: { id_institucion: number }; + + operador: string; + + tipoUsuario: { id_tipo_usuario: number }; +} diff --git a/src/auth/dto/jwt-payload-operador.ts b/src/auth/dto/jwt-payload-operador.ts new file mode 100644 index 0000000..3c42a95 --- /dev/null +++ b/src/auth/dto/jwt-payload-operador.ts @@ -0,0 +1,13 @@ +export class JwtPayload { + nombre: string; + + id_modulo: number; + + id_operador: number; + + institucion: { id_institucion: number }; + + operador: string; + + tipoUsuario: { id_tipo_usuario: number }; +} diff --git a/src/auth/dto/jwt-payload-usuario.ts b/src/auth/dto/jwt-payload-usuario.ts new file mode 100644 index 0000000..0a6ecbf --- /dev/null +++ b/src/auth/dto/jwt-payload-usuario.ts @@ -0,0 +1,18 @@ +export class JwtPayload { + nombre: string; + + id_usuario: number; + + instituciones: { + id_institucion_usuario: number; + institucionCarrera: { + id_institucion_carrera: number; + institucion: { id_institucion: number }; + carrera: { id_carrera: number }; + }; + }[]; + + tipoUsuario: { id_tipo_usuario: number }; + + usuario: string; +} diff --git a/src/institucion-carrera/entity/carrera.entity.ts b/src/institucion-carrera/entity/carrera.entity.ts index f1f5353..5d9ccad 100644 --- a/src/institucion-carrera/entity/carrera.entity.ts +++ b/src/institucion-carrera/entity/carrera.entity.ts @@ -20,7 +20,7 @@ export class Carrera { @Column({ type: String, nullable: false, length: 10 }) clave: string; - @ManyToOne(() => Nivel, (nivel) => nivel.carreras, { eager: true }) + @ManyToOne(() => Nivel, (nivel) => nivel.carreras) @JoinColumn({ name: 'id_nivel' }) nivel: Nivel; diff --git a/src/prestamo/dto/input/historial.dto.ts b/src/prestamo/dto/input/historial.dto.ts index e9a815f..d799cc8 100644 --- a/src/prestamo/dto/input/historial.dto.ts +++ b/src/prestamo/dto/input/historial.dto.ts @@ -1,4 +1,5 @@ import { + IsBooleanString, IsDateString, IsNotEmpty, IsNumberString, @@ -10,6 +11,14 @@ export class HistorialDto { @IsNumberString() pagina: string; + @IsBooleanString() + @IsOptional() + cancelado_operador?: string; + + @IsBooleanString() + @IsOptional() + cancelado_usuario?: string; + @IsString() @IsNotEmpty() @IsOptional() diff --git a/src/prestamo/prestamo.service.ts b/src/prestamo/prestamo.service.ts index c45670d..00f6898 100644 --- a/src/prestamo/prestamo.service.ts +++ b/src/prestamo/prestamo.service.ts @@ -280,6 +280,8 @@ export class PrestamoService { async findAll(filtros: { pagina: string; activo?: string | boolean; + cancelado_operador?: string; + cancelado_usuario?: string; carrito?: string; equipo?: string; fechaFin?: string; @@ -336,8 +338,10 @@ export class PrestamoService { .innerJoinAndSelect('m.institucion', 'i') .innerJoinAndSelect('ic.carrera', 'ca') .innerJoinAndSelect('ic.institucion', 'in') - .innerJoinAndSelect('ca.nivel', 'n') - .orderBy('p.id_prestamo', 'DESC') + .orderBy( + 'p.id_prestamo', + filtros.activo && typeof filtros.activo === 'boolean' ? 'ASC' : 'DESC', + ) .addOrderBy('i.institucion') .addOrderBy('m.modulo') .addOrderBy('tc.tipo_carrito') @@ -354,6 +358,22 @@ export class PrestamoService { activo: filtros.activo === 'true', }); } + if (filtros.cancelado_operador) + query.andWhere('p.cancelado_operador = :cancelado_operador', { + cancelado_operador: filtros.cancelado_operador === 'true', + }); + if (filtros.cancelado_usuario) + query.andWhere('p.cancelado_usuario = :cancelado_usuario', { + cancelado_usuario: filtros.cancelado_usuario === 'true', + }); + if (filtros.fechaInicio) + query.andWhere('p.fecha_inicio >= :fechaInicio', { + fechaInicio: filtros.fechaInicio, + }); + if (filtros.fechaFin) + query.andWhere('p.fecha_inicio <= :fechaFin', { + fechaFin: filtros.fechaFin, + }); if (filtros.id_prestamo) query.andWhere('p.id_prestamo LIKE :id_prestamo', { id_prestamo: `%${filtros.id_prestamo}%`, @@ -443,7 +463,6 @@ export class PrestamoService { .innerJoinAndSelect('m.institucion', 'i') .innerJoinAndSelect('ic.carrera', 'ca') .innerJoinAndSelect('ic.institucion', 'in') - .innerJoinAndSelect('ca.nivel', 'n') .orderBy('p.id_prestamo', 'DESC') .skip((pagina - 1) * 25) .take(25) @@ -468,7 +487,6 @@ export class PrestamoService { .innerJoinAndSelect('is.institucionCarrera', 'ic') .innerJoinAndSelect('ic.carrera', 'ca') .innerJoinAndSelect('ic.institucion', 'in') - .innerJoinAndSelect('ca.nivel', 'n') .innerJoinAndSelect('m.institucion', 'i') .where('p.id_prestamo = :id_prestamo', { id_prestamo, @@ -538,7 +556,6 @@ export class PrestamoService { .innerJoinAndSelect('m.institucion', 'i') .innerJoinAndSelect('ic.carrera', 'ca') .innerJoinAndSelect('ic.institucion', 'in') - .innerJoinAndSelect('ca.nivel', 'n') .where('p.activo = 1') .getOne(), ) From b08ed38171584359860b5425e95561fc8808da91 Mon Sep 17 00:00:00 2001 From: lemuel Date: Mon, 5 Sep 2022 06:13:01 -0500 Subject: [PATCH 12/16] error reenviar correo --- src/usuario/usuario.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/usuario/usuario.service.ts b/src/usuario/usuario.service.ts index f374ed1..122ce7c 100644 --- a/src/usuario/usuario.service.ts +++ b/src/usuario/usuario.service.ts @@ -204,7 +204,7 @@ export class UsuarioService { }) .then((usuario) => this.nodemailerService.sendEmail({ - email: `${usuario.usuario}@pcpuma.acatlan.unam.mx`, + email: usuario.correo, subject: 'Credenciales Pc Puma', html: this.nodemailerService.correoPasswordUsuario(password), }), From b3b932d573fb64fb206a4672d4763736d9840b2c Mon Sep 17 00:00:00 2001 From: lemuel Date: Mon, 5 Sep 2022 06:25:07 -0500 Subject: [PATCH 13/16] institucin usuario corregido --- src/institucion-usuario/dto/input/update.dto.ts | 6 +----- .../institucion-usuario.controller.ts | 16 ++++------------ 2 files changed, 5 insertions(+), 17 deletions(-) diff --git a/src/institucion-usuario/dto/input/update.dto.ts b/src/institucion-usuario/dto/input/update.dto.ts index 61e4b35..e3b8b56 100644 --- a/src/institucion-usuario/dto/input/update.dto.ts +++ b/src/institucion-usuario/dto/input/update.dto.ts @@ -6,9 +6,5 @@ export class UpdateInstitucionUsuarioInputDto { @IsBoolean() @IsOptional() - activo?: boolean; - - @IsBoolean() - @IsOptional() - multa?: boolean; + activo: boolean; } diff --git a/src/institucion-usuario/institucion-usuario.controller.ts b/src/institucion-usuario/institucion-usuario.controller.ts index 685fda9..0e81f13 100644 --- a/src/institucion-usuario/institucion-usuario.controller.ts +++ b/src/institucion-usuario/institucion-usuario.controller.ts @@ -1,11 +1,4 @@ -import { - Body, - Controller, - ForbiddenException, - Put, - Request, - UseGuards, -} from '@nestjs/common'; +import { Body, Controller, Put, Request, UseGuards } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; import { ApiBearerAuth, ApiBody, ApiOperation, ApiTags } from '@nestjs/swagger'; import { InstitucionUsuarioService } from './institucion-usuario.service'; @@ -28,13 +21,12 @@ export class InstitucionUsuarioController { }) @ApiBearerAuth('jwt') @ApiBody({ - description: 'Todas las variables a excepción de id_ son opcionales.', + description: 'Todas las variables son obligatorias.', examples: { ejemplo: { value: { - correo: '', - id_usuario: 1, - telefono: '', + activo: true, + id_institucion_usuario: 1, }, }, }, From f9c6b41694e8c0b93fa2c283ad2e9a507e2e128d Mon Sep 17 00:00:00 2001 From: lemuel Date: Mon, 5 Sep 2022 06:53:59 -0500 Subject: [PATCH 14/16] si es sa no mandar objeto institucion --- src/operador/operador.service.ts | 4 +++- src/prestamo/prestamo.controller.ts | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/operador/operador.service.ts b/src/operador/operador.service.ts index 2b4b88f..f59713a 100644 --- a/src/operador/operador.service.ts +++ b/src/operador/operador.service.ts @@ -188,7 +188,9 @@ export class OperadorService { id_operador: admin.id_operador, nombre: admin.nombre, operador: admin.operador, - institucion: { id_institucion: admin.id_institucion }, + institucion: admin.id_institucion + ? { id_institucion: admin.id_institucion } + : null, tipoUsuario: { id_tipo_usuario: admin.id_tipo_usuario }, }, activo: admin.activo, diff --git a/src/prestamo/prestamo.controller.ts b/src/prestamo/prestamo.controller.ts index 30414e5..5bedeca 100644 --- a/src/prestamo/prestamo.controller.ts +++ b/src/prestamo/prestamo.controller.ts @@ -252,7 +252,7 @@ export class PrestamoController { historial(@Request() req, @Query() query: HistorialDto) { const operador: Operador = req.user.operador; - this.validarUsuarioService.validarAdminOperador(operador); + this.validarUsuarioService.validarOperador(operador); return this.prestamoService.findAll(query); } From 4ec7ba8efda14a49b3d7fe1b69338a6d043e9371 Mon Sep 17 00:00:00 2001 From: lemuel Date: Mon, 5 Sep 2022 17:38:18 -0500 Subject: [PATCH 15/16] organizando mutlas por activo --- src/multa/multa.service.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/multa/multa.service.ts b/src/multa/multa.service.ts index ba78c68..cdde0a1 100644 --- a/src/multa/multa.service.ts +++ b/src/multa/multa.service.ts @@ -157,10 +157,10 @@ export class MultaService { .innerJoinAndSelect('m.institucion', 'i') .innerJoinAndSelect('ic.carrera', 'ca') .innerJoinAndSelect('ic.institucion', 'in') - .innerJoinAndSelect('ca.nivel', 'n') .orderBy('i.institucion') - .addOrderBy('u.usuario') + .addOrderBy('mu.activo', 'DESC') .addOrderBy('mu.id_multa', 'DESC') + .addOrderBy('u.usuario') .skip((parseInt(filtros.pagina) - 1) * 25) .take(25); @@ -193,7 +193,6 @@ export class MultaService { .innerJoinAndSelect('is.institucionCarrera', 'ic') .innerJoinAndSelect('ic.carrera', 'ca') .innerJoinAndSelect('ic.institucion', 'in') - .innerJoinAndSelect('ca.nivel', 'n') .orderBy('mu.id_multa', 'DESC') .skip((pagina - 1) * 25) .take(25) From 4d79f6b6919c76ee2b335995e17ab56ab36a8957 Mon Sep 17 00:00:00 2001 From: lemuel Date: Mon, 5 Sep 2022 18:44:35 -0500 Subject: [PATCH 16/16] enviar mensaje al updetear institucion usuario --- src/institucion-usuario/institucion-usuario.service.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/institucion-usuario/institucion-usuario.service.ts b/src/institucion-usuario/institucion-usuario.service.ts index 95c4cd8..1352481 100644 --- a/src/institucion-usuario/institucion-usuario.service.ts +++ b/src/institucion-usuario/institucion-usuario.service.ts @@ -49,11 +49,13 @@ export class InstitucionUsuarioService { } update(attrs: Partial) { - return this.findById(attrs.id_institucion_usuario).then( - (institucionUsuario) => { + return this.findById(attrs.id_institucion_usuario) + .then((institucionUsuario) => { Object.assign(institucionUsuario, attrs); return this.repository.save(institucionUsuario); - }, - ); + }) + .then((_) => ({ + message: 'Se guardaron los cambios correctamente.', + })); } }