From b7926e14020a75dfdf73137f2de393d64e55dacf Mon Sep 17 00:00:00 2001 From: lemuel Date: Sun, 23 Oct 2022 17:52:46 -0500 Subject: [PATCH] listo logins --- src/auth/auth.service.ts | 8 +- .../carrera-programa.controller.ts | 7 +- .../carrera-programa.module.ts | 2 + .../carrera-programa.service.ts | 40 +++++----- src/dto/{ => input}/id-equipo-pagina.dto.ts | 0 src/dto/{ => input}/id-institucion.dto.ts | 0 src/dto/{ => input}/id-usuario-pagina.dto.ts | 0 src/dto/{ => input}/id-usuario.dto.ts | 0 src/dto/output/message.dto.ts | 6 ++ src/equipo-motivo/equipo-motivo.controller.ts | 2 +- .../institucion-carrera.controller.ts | 2 +- .../institucion-dia.controller.ts | 2 +- .../institucion-infraccion.controller.ts | 2 +- .../institucion-programa.controller.ts | 2 +- .../institucion-tipo-carrito.controller.ts | 2 +- .../institucion-tipo-entrada.controller.ts | 2 +- .../institucion-usuario.service.ts | 42 ++++++---- src/institucion/institucion.controller.ts | 2 +- src/institucion/institucion.service.ts | 4 + src/modulo/modulo.controller.ts | 2 +- src/multa/multa.controller.ts | 6 +- src/operador/entity/operador.entity.ts | 6 ++ src/operador/operador.service.ts | 80 +++++++++++-------- src/prestamo/prestamo.controller.ts | 8 +- src/tipo-usuario/tipo-usuario.service.ts | 4 + src/upload-file/upload-file.controller.ts | 2 +- 26 files changed, 145 insertions(+), 88 deletions(-) rename src/dto/{ => input}/id-equipo-pagina.dto.ts (100%) rename src/dto/{ => input}/id-institucion.dto.ts (100%) rename src/dto/{ => input}/id-usuario-pagina.dto.ts (100%) rename src/dto/{ => input}/id-usuario.dto.ts (100%) create mode 100644 src/dto/output/message.dto.ts diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index 4632db0..9bde08d 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -25,7 +25,7 @@ export class AuthService { ) {} loginAdmin(admin: string, password: string) { - return this.operadorService.findInfoOperadorAdmin(admin).then((admin) => { + return this.operadorService.findAdmin(admin).then((admin) => { this.validacionBasica(admin, password); this.validacionOperador(admin); @@ -49,7 +49,7 @@ export class AuthService { const modulo = await this.moduloService.findInfoModuloById(id_modulo); return this.operadorService - .findInfoOperador(modulo.institucion, operador) + .findOperador(modulo.institucion, operador) .then((operador) => { this.validacionBasica(operador, password); this.validacionOperador(operador); @@ -69,9 +69,9 @@ export class AuthService { }, }; - // "Firmo"/creo el token if (operador.tipoUsuario.id_tipo_usuario === 4) - JwtPayload.Modulo.id_modulo = modulo.id_modulo; + JwtPayload.Modulo = { id_modulo: modulo.id_modulo }; + // "Firmo"/creo el token return { token: this.jwtService.sign(JwtPayload) }; }); } diff --git a/src/carrera-programa/carrera-programa.controller.ts b/src/carrera-programa/carrera-programa.controller.ts index 6eb756c..3f618cb 100644 --- a/src/carrera-programa/carrera-programa.controller.ts +++ b/src/carrera-programa/carrera-programa.controller.ts @@ -21,9 +21,10 @@ 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 { IdInstitucionDto } from '../dto/input/id-institucion.dto'; import { CreateCarreraProgramaDto } from './dto/input/create.dto'; import { DeleteCarreraProgramaDto } from './dto/input/delete.dto'; +import { MessageOutputDto } from '../dto/output/message.dto'; import { CarreraProgramaOutputDto } from './dto/output/carrera-programa.dto'; @Controller('carrera-programa') @@ -34,6 +35,7 @@ export class CarreraProgramaController { private validarUsuarioService: ValidarUsuarioService, ) {} + @Serealize(MessageOutputDto) @Post() @UseGuards(AuthGuard('jwt')) @ApiOperation({ @@ -58,6 +60,7 @@ export class CarreraProgramaController { ); } + @Serealize(MessageOutputDto) @Delete() @UseGuards(AuthGuard('jwt')) @ApiOperation({ @@ -93,7 +96,7 @@ export class CarreraProgramaController { const usuarioOperador: Operador | Usuario = req.user.operador || req.user.usuario; - if ('id_usuario' in usuarioOperador) + if (usuarioOperador instanceof Usuario) this.validarUsuarioService.validarUsuario(usuarioOperador); else this.validarUsuarioService.validarAdmin(usuarioOperador); return this.carreraProgramaService.findByIdInstitucion( diff --git a/src/carrera-programa/carrera-programa.module.ts b/src/carrera-programa/carrera-programa.module.ts index 85ad715..96fef3e 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 { InstitucionUsuarioModule } from '../institucion-usuario/institucion-usuario.module'; import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ @@ -14,6 +15,7 @@ import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module' InstitucionModule, InstitucionCarreraModule, InstitucionProgramaModule, + InstitucionUsuarioModule, PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([CarreraPrograma]), ValidarUsuarioModule, diff --git a/src/carrera-programa/carrera-programa.service.ts b/src/carrera-programa/carrera-programa.service.ts index b2cff15..0589782 100644 --- a/src/carrera-programa/carrera-programa.service.ts +++ b/src/carrera-programa/carrera-programa.service.ts @@ -12,6 +12,7 @@ import { Usuario } from '../usuario/entity/usuario.entity'; import { InstitucionService } from '../institucion/institucion.service'; import { InstitucionCarreraService } from '../institucion-carrera/institucion-carrera.service'; import { InstitucionProgramaService } from '../institucion-programa/institucion-programa.service'; +import { InstitucionUsuarioService } from '../institucion-usuario/institucion-usuario.service'; @Injectable() export class CarreraProgramaService { @@ -21,6 +22,7 @@ export class CarreraProgramaService { private institucionService: InstitucionService, private institucionCarreraService: InstitucionCarreraService, private institucionProgramaService: InstitucionProgramaService, + private institucionUsuarioService: InstitucionUsuarioService, ) {} async create( @@ -35,6 +37,7 @@ export class CarreraProgramaService { id_programa, ); + // Valido que el admin que esta realizando esta acción le pertenezca la carrera if ( admin.institucion.id_institucion != institucionCarrera.institucion.id_institucion @@ -42,13 +45,16 @@ export class CarreraProgramaService { throw new ForbiddenException( 'Esta carrera no pertenece a tu institución.', ); + // Busco un registro que ya contenga la info mandada return this.repository .findOne({ where: { institucionCarrera, programa } }) .then((existeCarretaPrograma) => { + // Si lo encuentro saco error if (existeCarretaPrograma) throw new ConflictException( 'Ya se asignó este programa a esta carrera.', ); + // Guardar registro return this.repository.save( this.repository.create({ institucionCarrera, @@ -64,6 +70,8 @@ export class CarreraProgramaService { delete(admin: Operador, id_carrera_programa: number) { return this.findById(id_carrera_programa) .then((carreraPrograma) => { + // Valido que la asociación entre una carrera y un programa le + // pertenezcan al admin que realiza esta acción if ( admin.institucion.id_institucion != carreraPrograma.institucionCarrera.institucion.id_institucion @@ -71,6 +79,7 @@ export class CarreraProgramaService { throw new ForbiddenException( 'No puedes eliminar esta asociación porque no pertenece a tu institución.', ); + // Elimino return this.repository.delete(carreraPrograma); }) .then((_) => ({ @@ -94,31 +103,26 @@ export class CarreraProgramaService { ) { return this.institucionService .findInfoInstitucionById(id_institucion) - .then((institucion) => { + .then(async (institucion) => { + // Si es un Operador if (usuarioOperador instanceof Operador) { + // Valido que la info le pertenezca al operador que la solicita if ( usuarioOperador.institucion.id_institucion != institucion.id_institucion ) throw new ForbiddenException( - 'No puedes acceder a esta información porque no perteneces a esta institución.', + 'No puedes acceder a esta información porque no le pertenece a tu institución.', ); - } else { - let lePertenece = false; - - for (let i = 0; i < usuarioOperador.instituciones.length; i++) - if ( - usuarioOperador.instituciones[i].institucionCarrera.institucion - .id_institucion === institucion.id_institucion - ) { - lePertenece = true; - break; - } - if (!lePertenece) - throw new ForbiddenException( - 'No puedes acceder a esta información porque no perteneces a esta institución.', - ); - } + } else + await this.institucionUsuarioService + .findByIdUsuarioIdInstitucion(usuarioOperador, institucion) + .then((institucionUsuario) => { + if (!institucionUsuario) + throw new ForbiddenException( + 'No puedes acceder a esta información porque no perteneces a esta institución.', + ); + }); return this.repository.find({ join: { alias: 'cp', diff --git a/src/dto/id-equipo-pagina.dto.ts b/src/dto/input/id-equipo-pagina.dto.ts similarity index 100% rename from src/dto/id-equipo-pagina.dto.ts rename to src/dto/input/id-equipo-pagina.dto.ts diff --git a/src/dto/id-institucion.dto.ts b/src/dto/input/id-institucion.dto.ts similarity index 100% rename from src/dto/id-institucion.dto.ts rename to src/dto/input/id-institucion.dto.ts diff --git a/src/dto/id-usuario-pagina.dto.ts b/src/dto/input/id-usuario-pagina.dto.ts similarity index 100% rename from src/dto/id-usuario-pagina.dto.ts rename to src/dto/input/id-usuario-pagina.dto.ts diff --git a/src/dto/id-usuario.dto.ts b/src/dto/input/id-usuario.dto.ts similarity index 100% rename from src/dto/id-usuario.dto.ts rename to src/dto/input/id-usuario.dto.ts diff --git a/src/dto/output/message.dto.ts b/src/dto/output/message.dto.ts new file mode 100644 index 0000000..f6becd9 --- /dev/null +++ b/src/dto/output/message.dto.ts @@ -0,0 +1,6 @@ +import { Expose } from 'class-transformer'; + +export class MessageOutputDto { + @Expose() + message; +} diff --git a/src/equipo-motivo/equipo-motivo.controller.ts b/src/equipo-motivo/equipo-motivo.controller.ts index c6078e3..ef2205d 100644 --- a/src/equipo-motivo/equipo-motivo.controller.ts +++ b/src/equipo-motivo/equipo-motivo.controller.ts @@ -10,7 +10,7 @@ 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 { IdEquipoPaginaDto } from '../dto/input/id-equipo-pagina.dto'; import { EquipoMotivoOutputDto } from './dto/output/equipo-motivo.dto'; @Controller('equipo-motivo') diff --git a/src/institucion-carrera/institucion-carrera.controller.ts b/src/institucion-carrera/institucion-carrera.controller.ts index 3f3d7a2..eb74c77 100644 --- a/src/institucion-carrera/institucion-carrera.controller.ts +++ b/src/institucion-carrera/institucion-carrera.controller.ts @@ -2,7 +2,7 @@ import { Controller, Get, Query } from '@nestjs/common'; import { ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { InstitucionCarreraService } from './institucion-carrera.service'; -import { IdInstitucionDto } from '../dto/id-institucion.dto'; +import { IdInstitucionDto } from '../dto/input/id-institucion.dto'; import { InstitucionCarreaOutputDto } from './dto/output/institucion-carrera.dto'; @Controller('institucion-carrera') diff --git a/src/institucion-dia/institucion-dia.controller.ts b/src/institucion-dia/institucion-dia.controller.ts index 1256da1..ebcc60d 100644 --- a/src/institucion-dia/institucion-dia.controller.ts +++ b/src/institucion-dia/institucion-dia.controller.ts @@ -19,7 +19,7 @@ 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 { IdInstitucionDto } from '../dto/input/id-institucion.dto'; import { UpdateInstitucionDiaDto } from './dto/input/update.dto'; import { InstitucionCarreaOutputDto } from './dto/output/institucion-carrera.dto'; import { Usuario } from '../usuario/entity/usuario.entity'; diff --git a/src/institucion-infraccion/institucion-infraccion.controller.ts b/src/institucion-infraccion/institucion-infraccion.controller.ts index 0738130..1ed63c5 100644 --- a/src/institucion-infraccion/institucion-infraccion.controller.ts +++ b/src/institucion-infraccion/institucion-infraccion.controller.ts @@ -20,7 +20,7 @@ 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 { IdInstitucionDto } from '../dto/input/id-institucion.dto'; import { CreateInstitucionInfraccionDto } from './dto/input/create.dto'; import { UpdateInstitucionInfraccionDto } from './dto/input/update.dto'; import { InfraccionOutputDto } from './dto/output/infraccion.dto'; diff --git a/src/institucion-programa/institucion-programa.controller.ts b/src/institucion-programa/institucion-programa.controller.ts index 4f1ba38..971937e 100644 --- a/src/institucion-programa/institucion-programa.controller.ts +++ b/src/institucion-programa/institucion-programa.controller.ts @@ -21,7 +21,7 @@ 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'; +import { IdInstitucionDto } from '../dto/input/id-institucion.dto'; import { CreateProgramaDto } from './dto/input/create.dto'; import { UpdateProgramaDto } from './dto/input/update.dto'; import { InstitucionProgramaOutputDto } from './dto/output/institucion-programa.dto'; diff --git a/src/institucion-tipo-carrito/institucion-tipo-carrito.controller.ts b/src/institucion-tipo-carrito/institucion-tipo-carrito.controller.ts index b8eccb0..7c5d7ff 100644 --- a/src/institucion-tipo-carrito/institucion-tipo-carrito.controller.ts +++ b/src/institucion-tipo-carrito/institucion-tipo-carrito.controller.ts @@ -21,7 +21,7 @@ import { InstitucionTipoCarritoService } from './institucion-tipo-carrito.servic 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 { IdInstitucionDto } from '../dto/input/id-institucion.dto'; import { CreateInstitucionTipoCarritoDto } from './dto/input/create.dto'; import { UpdateInstitucionTipoCarritoDto } from './dto/input/update.dto'; import { InstitucionTiposCarritoOutputDto } from './dto/output/institucion-tipos-carrito.dto'; diff --git a/src/institucion-tipo-entrada/institucion-tipo-entrada.controller.ts b/src/institucion-tipo-entrada/institucion-tipo-entrada.controller.ts index 56844b9..0e55791 100644 --- a/src/institucion-tipo-entrada/institucion-tipo-entrada.controller.ts +++ b/src/institucion-tipo-entrada/institucion-tipo-entrada.controller.ts @@ -21,7 +21,7 @@ import { InstitucionTipoEntradaService } from './institucion-tipo-entrada.servic 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 { IdInstitucionDto } from '../dto/input/id-institucion.dto'; import { CreateInstitucionTipoEntradaDto } from './dto/input/create.dto'; import { UpdateInstitucionTipoEntradaDto } from './dto/input/update.dto'; import { InstitucionTipoEntradaOutputDto } from './dto/output/institucion-tipo-entrada.dto'; diff --git a/src/institucion-usuario/institucion-usuario.service.ts b/src/institucion-usuario/institucion-usuario.service.ts index 0ef6ad2..61588f8 100644 --- a/src/institucion-usuario/institucion-usuario.service.ts +++ b/src/institucion-usuario/institucion-usuario.service.ts @@ -1,6 +1,7 @@ import { ConflictException, Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; +import { Institucion } from 'src/institucion/entity/institucion.entity'; import { InstitucionCarrera } from '../institucion-carrera/entity/institucion-carrera.entity'; import { InstitucionUsuario } from './entity/institucion-usuario.entity'; import { Usuario } from '../usuario/entity/usuario.entity'; @@ -45,6 +46,20 @@ export class InstitucionUsuarioService { }); } + findAllByIdUsuarioIdInstitucion(id_usuario: number, id_institucion: number) { + return this.informacionInstitucionUsuarioView + .find({ where: { id_institucion, id_usuario } }) + .then((infoInstitucionesUsuario) => { + const institucionesUsuario: InstitucionUsuario[] = []; + + for (let i = 0; i < infoInstitucionesUsuario.length; i++) + institucionesUsuario.push( + this.viewToInstitucionUsuario(infoInstitucionesUsuario[i]), + ); + return institucionesUsuario; + }); + } + findFullInfoAllByIdUsuarioIdInstitucion( id_usuario: number, id_institucion: number, @@ -109,20 +124,6 @@ export class InstitucionUsuarioService { }); } - findAllByIdUsuarioIdInstitucion(id_usuario: number, id_institucion: number) { - return this.informacionInstitucionUsuarioView - .find({ where: { id_institucion, id_usuario } }) - .then((infoInstitucionesUsuario) => { - const institucionesUsuario: InstitucionUsuario[] = []; - - for (let i = 0; i < infoInstitucionesUsuario.length; i++) - institucionesUsuario.push( - this.viewToInstitucionUsuario(infoInstitucionesUsuario[i]), - ); - return institucionesUsuario; - }); - } - findById(id_institucion_usuario: number) { return this.informacionInstitucionUsuarioView .findOne({ where: { id_institucion_usuario } }) @@ -133,6 +134,19 @@ export class InstitucionUsuarioService { }); } + findByIdUsuarioIdInstitucion(usuario: Usuario, institucion: Institucion) { + return this.informacionInstitucionUsuarioView + .findOne({ + where: { + id_institucion: institucion.id_institucion, + id_usuario: usuario.id_usuario, + }, + }) + .then((infoInstitucionUsuario) => + this.viewToInstitucionUsuario(infoInstitucionUsuario), + ); + } + findByIdUsuarioIdInstitucionCarrera( id_usuario: number, id_institucion_carrera: number, diff --git a/src/institucion/institucion.controller.ts b/src/institucion/institucion.controller.ts index 6927e3c..f179bb1 100644 --- a/src/institucion/institucion.controller.ts +++ b/src/institucion/institucion.controller.ts @@ -20,7 +20,7 @@ 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 { IdInstitucionDto } from '../dto/input/id-institucion.dto'; import { UpdateInstitucionDto } from './dto/input/update.dto'; import { InstitucionOutputDto } from './dto/output/institucion.dto'; import { InstitucionMinOutputDto } from './dto/output/institucion-min.dto'; diff --git a/src/institucion/institucion.service.ts b/src/institucion/institucion.service.ts index b91b184..6330659 100644 --- a/src/institucion/institucion.service.ts +++ b/src/institucion/institucion.service.ts @@ -14,6 +14,10 @@ export class InstitucionService { @InjectRepository(Institucion) private repository: Repository, ) {} + crearInstitucion(id_institucion: number) { + return this.repository.create({ id_institucion }); + } + findById(id_institucion: number) { return this.repository .findOne({ where: { id_institucion } }) diff --git a/src/modulo/modulo.controller.ts b/src/modulo/modulo.controller.ts index cce99f2..1c7f746 100644 --- a/src/modulo/modulo.controller.ts +++ b/src/modulo/modulo.controller.ts @@ -21,7 +21,7 @@ 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 { IdInstitucionDto } from '../dto/id-institucion.dto'; +import { IdInstitucionDto } from '../dto/input/id-institucion.dto'; import { CreateModuloDto } from './dto/input/create.dto'; import { ModuloDto } from './dto/input/modulo.dto'; import { UpdateModuloDto } from './dto/input/update.dto'; diff --git a/src/multa/multa.controller.ts b/src/multa/multa.controller.ts index 8036942..a6a7943 100644 --- a/src/multa/multa.controller.ts +++ b/src/multa/multa.controller.ts @@ -21,12 +21,12 @@ 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'; -import { IdEquipoPaginaDto } from '../dto/id-equipo-pagina.dto'; +import { IdUsuarioDto } from '../dto/input/id-usuario.dto'; +import { IdEquipoPaginaDto } from '../dto/input/id-equipo-pagina.dto'; import { MultarDto } from './dto/input/multar.dto'; import { MultasDto } from './dto/input/multas.dto'; import { QuitarMultarDto } from './dto/input/quitar.dto'; -import { IdUsuarioPaginaDto } from '../dto/id-usuario-pagina.dto'; +import { IdUsuarioPaginaDto } from '../dto/input/id-usuario-pagina.dto'; import { MultasOutputDto } from './dto/output/multas.dto'; import { MultasEquipoOutputDto } from './dto/output/multas-equipo.dto'; import { MultasMinOutputDto } from './dto/output/multas-min.dto'; diff --git a/src/operador/entity/operador.entity.ts b/src/operador/entity/operador.entity.ts index 4419c05..e7e080e 100644 --- a/src/operador/entity/operador.entity.ts +++ b/src/operador/entity/operador.entity.ts @@ -32,6 +32,12 @@ export class Operador { @Column({ type: String, nullable: false, length: 60 }) password: string; + @Column({ type: Number, nullable: true }) + id_institucion: number; + + @Column({ type: Number, nullable: true }) + id_tipo_usuario: number; + @ManyToOne(() => Institucion, (institucion) => institucion.operadores) @JoinColumn({ name: 'id_institucion' }) institucion: Institucion; diff --git a/src/operador/operador.service.ts b/src/operador/operador.service.ts index d8fbb30..223974a 100644 --- a/src/operador/operador.service.ts +++ b/src/operador/operador.service.ts @@ -45,7 +45,7 @@ export class OperadorService { 'No se puede asignar un tipo de usuario distinto a admin y operador', ); // Ver si existe un admin con ese usaurio - return this.findInfoOperadorAdmin(operador) + return this.findAdmin(operador) .then((existeAdmin) => { // Error si lo hay if (existeAdmin) @@ -53,7 +53,7 @@ export class OperadorService { 'Ya existe un admin con ese nombre, intenta de nuevo con otro.', ); // Ver que haya un operador en esta institución con este usuario - return this.findInfoOperador(institucion, operador); + return this.findOperador(institucion, operador); }) .then(async (existeOperador) => { // Error si lo hay @@ -159,35 +159,39 @@ export class OperadorService { }); } - findInfoOperador(institucion: Institucion, operador: string) { - return this.repository.findOne({ - select: { - id_operador: true, - activo: true, - nombre: true, - password: true, - institucion: { id_institucion: true }, - tipoUsuario: { id_tipo_usuario: true }, - }, - where: { operador, institucion }, - }); + findAdmin(admin: string) { + return this.repository + .findOne({ + select: { + id_operador: true, + activo: true, + nombre: true, + password: true, + id_institucion: true, + id_tipo_usuario: true, + }, + where: { + operador: admin, + tipoUsuario: { id_tipo_usuario: Between(2, 3) }, + }, + }) + .then((admin) => this.llenarIds(admin)); } - findInfoOperadorAdmin(admin: string) { - return this.repository.findOne({ - select: { - id_operador: true, - activo: true, - nombre: true, - password: true, - institucion: { id_institucion: true }, - tipoUsuario: { id_tipo_usuario: true }, - }, - where: { - operador: admin, - tipoUsuario: { id_tipo_usuario: Between(2, 3) }, - }, - }); + findOperador(institucion: Institucion, operador: string) { + return this.repository + .findOne({ + select: { + id_operador: true, + activo: true, + nombre: true, + password: true, + id_institucion: true, + id_tipo_usuario: true, + }, + where: { operador, institucion }, + }) + .then((operador) => this.llenarIds(operador)); } findInfoOperadorById(id_operador: number) { @@ -196,19 +200,29 @@ export class OperadorService { select: { id_operador: true, activo: true, - correo : true, - institucion: { id_institucion: true }, - tipoUsuario: { id_tipo_usuario: true }, + correo: true, + id_institucion: true, + id_tipo_usuario: true, }, where: { id_operador }, }) .then((operador) => { if (!operador) throw new NotFoundException('No existe este id operador.'); - return operador; + return this.llenarIds(operador); }); } + llenarIds(operador: Operador) { + operador.tipoUsuario = this.tipoUsuarioService.crearTipoUsuario( + operador.id_tipo_usuario, + ); + operador.institucion = this.institucionService.crearInstitucion( + operador.id_institucion, + ); + return operador; + } + passwordReset(admin: Operador, id_operador: number, password?: string) { return this.findInfoOperadorById(id_operador) .then((operador) => { diff --git a/src/prestamo/prestamo.controller.ts b/src/prestamo/prestamo.controller.ts index 61c8b89..a68e805 100644 --- a/src/prestamo/prestamo.controller.ts +++ b/src/prestamo/prestamo.controller.ts @@ -20,9 +20,9 @@ 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'; -import { IdUsuarioPaginaDto } from '../dto/id-usuario-pagina.dto'; +import { IdEquipoPaginaDto } from '../dto/input/id-equipo-pagina.dto'; +import { IdUsuarioDto } from '../dto/input/id-usuario.dto'; +import { IdUsuarioPaginaDto } from '../dto/input/id-usuario-pagina.dto'; import { NumeroInventarioDto } from '../dto/numero-inventario.dto'; import { ActivosDto } from './dto/input/activos.dto'; import { CancelarUsuarioDto } from './dto/input/cancelar-usuario.dto'; @@ -359,7 +359,7 @@ export class PrestamoController { const usuarioOperador: Operador | Usuario = req.user.operador || req.user.usuario; - if ('id_usuario' in usuarioOperador) + if (usuarioOperador instanceof Usuario) this.validarUsuarioService.validarUsuario(usuarioOperador); else this.validarUsuarioService.validarAdminOperador(usuarioOperador); return this.prestamoService.prestamoInfoById(parseInt(query.id_prestamo)); diff --git a/src/tipo-usuario/tipo-usuario.service.ts b/src/tipo-usuario/tipo-usuario.service.ts index 2be9c8a..2d66fc0 100644 --- a/src/tipo-usuario/tipo-usuario.service.ts +++ b/src/tipo-usuario/tipo-usuario.service.ts @@ -26,6 +26,10 @@ export class TipoUsuarioService { })); } + crearTipoUsuario(id_tipo_usuario: number) { + return this.repository.create({ id_tipo_usuario }); + } + findAll(informacion?: string) { const query = this.repository .createQueryBuilder('tu') diff --git a/src/upload-file/upload-file.controller.ts b/src/upload-file/upload-file.controller.ts index bc86d39..21b24e0 100644 --- a/src/upload-file/upload-file.controller.ts +++ b/src/upload-file/upload-file.controller.ts @@ -16,7 +16,7 @@ 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'; +import { IdInstitucionDto } from '../dto/input/id-institucion.dto'; @Controller('upload-file') @ApiTags('upload-file')