From a177ea884bdd1ed3ad13431197dc6369807d9b7e Mon Sep 17 00:00:00 2001 From: lemuel Date: Sun, 16 Oct 2022 22:45:31 -0500 Subject: [PATCH] aparentemente todo bien --- src/auth/auth.service.ts | 24 ++++-- .../institucion-usuario.service.ts | 63 ++++++++------- src/multa/multa.service.ts | 7 +- src/upload-file/upload-file.service.ts | 2 +- src/usuario/usuario.service.ts | 78 +++++++------------ 5 files changed, 88 insertions(+), 86 deletions(-) diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index 820a524..e21c1d4 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -74,18 +74,30 @@ export class AuthService { loginUsuario(usuario: string, password: string) { return this.usuarioService - .informacionUsuarioByUsuario(usuario) - .then((data) => { - if (!data.password) + .findInfoUsuarioByUsuario(usuario) + .then((usuario) => { + if (usuario && !usuario.password) throw new BadRequestException('Este usuario no ha sido registrado.'); if ( - !data.usuario || - !this.bcryptService.comparar(password, data.password) + !usuario || + !this.bcryptService.comparar(password, usuario.password) ) throw new BadRequestException( 'Usuario y/o password incorrectos, ingresa unas credenciales válidas.', ); - return { token: this.jwtService.sign(data.usuario) }; + + const JwtPayload: JwtPayloadUsuario = { + Usuario: { + id_usuario: usuario.id_usuario, + usuario: usuario.usuario, + nombre: usuario.nombre, + tipoUsuario: { + id_tipo_usuario: usuario.tipoUsuario.id_tipo_usuario, + }, + }, + }; + + return { token: this.jwtService.sign(JwtPayload) }; }); } diff --git a/src/institucion-usuario/institucion-usuario.service.ts b/src/institucion-usuario/institucion-usuario.service.ts index 52cda40..0ef6ad2 100644 --- a/src/institucion-usuario/institucion-usuario.service.ts +++ b/src/institucion-usuario/institucion-usuario.service.ts @@ -45,7 +45,7 @@ export class InstitucionUsuarioService { }); } - findFullInfoInstitucionUsuarioAllByIdUsuarioIdInstitucion( + findFullInfoAllByIdUsuarioIdInstitucion( id_usuario: number, id_institucion: number, ) { @@ -79,7 +79,7 @@ export class InstitucionUsuarioService { }); } - findFullInfoInstitucionUsuarioByIdUsuarioIdInstitucionCarrera( + findFullInfoByIdUsuarioIdInstitucionCarrera( usuario: Usuario, id_institucion_carrera: number, ) { @@ -109,7 +109,31 @@ export class InstitucionUsuarioService { }); } - findInfoInstitucionUsuarioByIdUsuarioIdInstitucionCarrera( + 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 } }) + .then((infoInstitucionUsuario) => { + if (!infoInstitucionUsuario) + throw new ConflictException('No existe este id institución usuario.'); + return this.viewToInstitucionUsuario(infoInstitucionUsuario); + }); + } + + findByIdUsuarioIdInstitucionCarrera( id_usuario: number, id_institucion_carrera: number, ) { @@ -120,22 +144,12 @@ export class InstitucionUsuarioService { ); } - findInfoInstitucionUsuarioById(id_institucion_usuario: number) { - return this.informacionInstitucionUsuarioView - .findOne({ where: { id_institucion_usuario } }) - .then((infoInstitucionUsuario) => { - if (!infoInstitucionUsuario) - throw new ConflictException('No existe este id institución usuario.'); - return this.viewToInstitucionUsuario(infoInstitucionUsuario); - }); - } - save(institucionUsuario: InstitucionUsuario) { return this.repository.save(institucionUsuario); } update(attrs: Partial) { - return this.findInfoInstitucionUsuarioById(attrs.id_institucion_usuario) + return this.findById(attrs.id_institucion_usuario) .then((institucionUsuario) => { Object.assign(institucionUsuario, attrs); return this.repository.save(institucionUsuario); @@ -144,18 +158,15 @@ export class InstitucionUsuarioService { } updateMulta(id_institucion: number, id_usuario: number, status: boolean) { - return this.informacionInstitucionUsuarioView - .find({ where: { id_institucion, id_usuario } }) - .then(async (infoInstitucionesUsuario) => { - for (let i = 0; i < infoInstitucionesUsuario.length; i++) - await this.repository.save( - this.repository.create({ - id_institucion_usuario: - infoInstitucionesUsuario[i].id_institucion_usuario, - multa: status, - }), - ); - }); + return this.findAllByIdUsuarioIdInstitucion( + id_usuario, + id_institucion, + ).then(async (institucionesUsuario) => { + for (let i = 0; i < institucionesUsuario.length; i++) { + institucionesUsuario[i].multa = status; + await this.repository.save(institucionesUsuario[i]); + } + }); } viewToInstitucionUsuario( diff --git a/src/multa/multa.service.ts b/src/multa/multa.service.ts index 555a1e9..005f932 100644 --- a/src/multa/multa.service.ts +++ b/src/multa/multa.service.ts @@ -272,10 +272,9 @@ export class MultaService { } async quitarMulta(id_institucion_usuario: number) { - const institucionUsuario = - await this.institucionUsuarioService.findInfoInstitucionUsuarioById( - id_institucion_usuario, - ); + const institucionUsuario = await this.institucionUsuarioService.findById( + id_institucion_usuario, + ); return this.repository .createQueryBuilder('mu') diff --git a/src/upload-file/upload-file.service.ts b/src/upload-file/upload-file.service.ts index 8a983b0..b8c9a34 100644 --- a/src/upload-file/upload-file.service.ts +++ b/src/upload-file/upload-file.service.ts @@ -417,7 +417,7 @@ export class UploadFileService { } if (usuario) { let existeInstitucionUsuario = - await this.institucionUsuarioService.findInfoInstitucionUsuarioByIdUsuarioIdInstitucionCarrera( + await this.institucionUsuarioService.findByIdUsuarioIdInstitucionCarrera( usuario.id_usuario, institucionCarrera.id_institucion_carrera, ); diff --git a/src/usuario/usuario.service.ts b/src/usuario/usuario.service.ts index 49fb578..e73632b 100644 --- a/src/usuario/usuario.service.ts +++ b/src/usuario/usuario.service.ts @@ -54,7 +54,7 @@ export class UsuarioService { }), ) .then((usuario) => - // Le asigno la carrera enviada + // Le asigna la carrera enviada this.institucionUsuarioService.create(institucionCarrera, usuario), ); } @@ -134,14 +134,15 @@ export class UsuarioService { throw new NotFoundException('No existe este usuario.'); const instituciones = - await this.institucionUsuarioService.findFullInfoInstitucionUsuarioAllByIdUsuarioIdInstitucion( + await this.institucionUsuarioService.findFullInfoAllByIdUsuarioIdInstitucion( infoUsuario.id_usuario, operador.institucion.id_institucion, ); + // Si el array no trae elementos significa que el usurio existe pero no le pertenece a quien pide la info if (instituciones.length === 0) throw new ConflictException( - 'Este usuario no pertenece a tu institución', + 'Este usuario no pertenece a tu institución.', ); return this.repository.create({ id_usuario: infoUsuario.id_usuario, @@ -186,6 +187,7 @@ export class UsuarioService { select: { id_usuario: true, correo: true, + nombre: true, password: true, usuario: true, tipoUsuario: { id_tipo_usuario: true }, @@ -194,49 +196,6 @@ export class UsuarioService { }); } - informacionUsuarioByUsuario(usuario: string) { - return this.informacionUsuarioView - .find({ where: { usuario } }) - .then((data) => { - const instituciones: { - id_institucion_usuario: number; - institucionCarrera: { - id_institucion_carrera: number; - institucion: { id_institucion: number; institucion: string }; - carrera: { id_carrera: number; carrera: string }; - }; - }[] = []; - - 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, - institucion: data[i].institucion, - }, - carrera: { - id_carrera: data[i].id_carrera, - carrera: data[i].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) { // Genero password const password = this.bcryptService.generarPassword(); @@ -250,7 +209,7 @@ export class UsuarioService { ); // Asigno nueva password usuario.password = this.bcryptService.encriptar(password); - // Guardo + // Guardar return this.repository.save(usuario); }) .then((usuario) => @@ -275,37 +234,47 @@ export class UsuarioService { const institucionCarrera = await this.institucionCarreraService.findById( id_institucion_carrera, ); + // Genero password const password = this.bcryptService.generarPassword(); let message: string; + // Busco usuario return this.findInfoUsuarioByUsuario(usuario, rfc) .then(async (existeUsuario) => { + // Ai no existe o tiene contraseña, es decir que esta registrado, saca error if (!existeUsuario || existeUsuario.password) throw new ConflictException( 'Verificar sus datos, cualquier duda asistir al módulo PC PUMA.', ); - return this.institucionUsuarioService.findFullInfoInstitucionUsuarioByIdUsuarioIdInstitucionCarrera( + // Ver si el alumno pertenece a esta carrera + return this.institucionUsuarioService.findFullInfoByIdUsuarioIdInstitucionCarrera( existeUsuario, institucionCarrera.id_institucion_carrera, ); }) .then((institucionUsuario) => { + // Si no tiene correo saca error if (!institucionUsuario.usuario.correo) throw new ConflictException( 'Tu institución no te asignó un correo institucional, dirigete al módulo para solucionarlo.', ); + // variable para guardar la posición del @ const arrobaIndex = institucionUsuario.usuario.correo.indexOf('@'); + // Mensaje personalizado, blureando el correo al que se va a enviar las credenciales message = `Se creó correctamente tu cuenta, mandamos un correo a ...${institucionUsuario.usuario.correo.slice( arrobaIndex - 3, )} con tus credenciales para acceder a este servicio.`; + // Asignar datos enviados del front y encriptar la password institucionUsuario.usuario.telefono = telefono; institucionUsuario.usuario.password = this.bcryptService.encriptar(password); + // Guardar return this.repository.save(institucionUsuario.usuario); }) .then((usuario) => + // Enviar credenciales al correo this.nodemailerService.sendEmail({ email: usuario.correo, subject: 'Credenciales Pc Puma', @@ -323,7 +292,18 @@ export class UsuarioService { update(operador: Operador, attrs: Partial) { return this.findInfoUsuarioById(attrs.id_usuario) - .then((usuario) => { + .then(async (usuario) => { + const institucionesUsuario = + await this.institucionUsuarioService.findAllByIdUsuarioIdInstitucion( + usuario.id_usuario, + operador.institucion.id_institucion, + ); + + // Si el array no trae elementos significa que el usurio existe pero no le pertenece a quien pide la info + if (institucionesUsuario.length === 0) + throw new ConflictException( + 'Este usuario no pertenece a tu institución.', + ); Object.assign(usuario, attrs); return this.repository.save(usuario); })