aparentemente todo bien

This commit is contained in:
lemuel 2022-10-16 22:45:31 -05:00
parent b32d0a2f4a
commit a177ea884b
5 changed files with 88 additions and 86 deletions

View File

@ -74,18 +74,30 @@ export class AuthService {
loginUsuario(usuario: string, password: string) { loginUsuario(usuario: string, password: string) {
return this.usuarioService return this.usuarioService
.informacionUsuarioByUsuario(usuario) .findInfoUsuarioByUsuario(usuario)
.then((data) => { .then((usuario) => {
if (!data.password) if (usuario && !usuario.password)
throw new BadRequestException('Este usuario no ha sido registrado.'); throw new BadRequestException('Este usuario no ha sido registrado.');
if ( if (
!data.usuario || !usuario ||
!this.bcryptService.comparar(password, data.password) !this.bcryptService.comparar(password, usuario.password)
) )
throw new BadRequestException( throw new BadRequestException(
'Usuario y/o password incorrectos, ingresa unas credenciales válidas.', '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) };
}); });
} }

View File

@ -45,7 +45,7 @@ export class InstitucionUsuarioService {
}); });
} }
findFullInfoInstitucionUsuarioAllByIdUsuarioIdInstitucion( findFullInfoAllByIdUsuarioIdInstitucion(
id_usuario: number, id_usuario: number,
id_institucion: number, id_institucion: number,
) { ) {
@ -79,7 +79,7 @@ export class InstitucionUsuarioService {
}); });
} }
findFullInfoInstitucionUsuarioByIdUsuarioIdInstitucionCarrera( findFullInfoByIdUsuarioIdInstitucionCarrera(
usuario: Usuario, usuario: Usuario,
id_institucion_carrera: number, 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_usuario: number,
id_institucion_carrera: 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) { save(institucionUsuario: InstitucionUsuario) {
return this.repository.save(institucionUsuario); return this.repository.save(institucionUsuario);
} }
update(attrs: Partial<InstitucionUsuario>) { update(attrs: Partial<InstitucionUsuario>) {
return this.findInfoInstitucionUsuarioById(attrs.id_institucion_usuario) return this.findById(attrs.id_institucion_usuario)
.then((institucionUsuario) => { .then((institucionUsuario) => {
Object.assign(institucionUsuario, attrs); Object.assign(institucionUsuario, attrs);
return this.repository.save(institucionUsuario); return this.repository.save(institucionUsuario);
@ -144,18 +158,15 @@ export class InstitucionUsuarioService {
} }
updateMulta(id_institucion: number, id_usuario: number, status: boolean) { updateMulta(id_institucion: number, id_usuario: number, status: boolean) {
return this.informacionInstitucionUsuarioView return this.findAllByIdUsuarioIdInstitucion(
.find({ where: { id_institucion, id_usuario } }) id_usuario,
.then(async (infoInstitucionesUsuario) => { id_institucion,
for (let i = 0; i < infoInstitucionesUsuario.length; i++) ).then(async (institucionesUsuario) => {
await this.repository.save( for (let i = 0; i < institucionesUsuario.length; i++) {
this.repository.create({ institucionesUsuario[i].multa = status;
id_institucion_usuario: await this.repository.save(institucionesUsuario[i]);
infoInstitucionesUsuario[i].id_institucion_usuario, }
multa: status, });
}),
);
});
} }
viewToInstitucionUsuario( viewToInstitucionUsuario(

View File

@ -272,10 +272,9 @@ export class MultaService {
} }
async quitarMulta(id_institucion_usuario: number) { async quitarMulta(id_institucion_usuario: number) {
const institucionUsuario = const institucionUsuario = await this.institucionUsuarioService.findById(
await this.institucionUsuarioService.findInfoInstitucionUsuarioById( id_institucion_usuario,
id_institucion_usuario, );
);
return this.repository return this.repository
.createQueryBuilder('mu') .createQueryBuilder('mu')

View File

@ -417,7 +417,7 @@ export class UploadFileService {
} }
if (usuario) { if (usuario) {
let existeInstitucionUsuario = let existeInstitucionUsuario =
await this.institucionUsuarioService.findInfoInstitucionUsuarioByIdUsuarioIdInstitucionCarrera( await this.institucionUsuarioService.findByIdUsuarioIdInstitucionCarrera(
usuario.id_usuario, usuario.id_usuario,
institucionCarrera.id_institucion_carrera, institucionCarrera.id_institucion_carrera,
); );

View File

@ -54,7 +54,7 @@ export class UsuarioService {
}), }),
) )
.then((usuario) => .then((usuario) =>
// Le asigno la carrera enviada // Le asigna la carrera enviada
this.institucionUsuarioService.create(institucionCarrera, usuario), this.institucionUsuarioService.create(institucionCarrera, usuario),
); );
} }
@ -134,14 +134,15 @@ export class UsuarioService {
throw new NotFoundException('No existe este usuario.'); throw new NotFoundException('No existe este usuario.');
const instituciones = const instituciones =
await this.institucionUsuarioService.findFullInfoInstitucionUsuarioAllByIdUsuarioIdInstitucion( await this.institucionUsuarioService.findFullInfoAllByIdUsuarioIdInstitucion(
infoUsuario.id_usuario, infoUsuario.id_usuario,
operador.institucion.id_institucion, 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) if (instituciones.length === 0)
throw new ConflictException( throw new ConflictException(
'Este usuario no pertenece a tu institución', 'Este usuario no pertenece a tu institución.',
); );
return this.repository.create({ return this.repository.create({
id_usuario: infoUsuario.id_usuario, id_usuario: infoUsuario.id_usuario,
@ -186,6 +187,7 @@ export class UsuarioService {
select: { select: {
id_usuario: true, id_usuario: true,
correo: true, correo: true,
nombre: true,
password: true, password: true,
usuario: true, usuario: true,
tipoUsuario: { id_tipo_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) { passwordReset(id_usuario: number) {
// Genero password // Genero password
const password = this.bcryptService.generarPassword(); const password = this.bcryptService.generarPassword();
@ -250,7 +209,7 @@ export class UsuarioService {
); );
// Asigno nueva password // Asigno nueva password
usuario.password = this.bcryptService.encriptar(password); usuario.password = this.bcryptService.encriptar(password);
// Guardo // Guardar
return this.repository.save(usuario); return this.repository.save(usuario);
}) })
.then((usuario) => .then((usuario) =>
@ -275,37 +234,47 @@ export class UsuarioService {
const institucionCarrera = await this.institucionCarreraService.findById( const institucionCarrera = await this.institucionCarreraService.findById(
id_institucion_carrera, id_institucion_carrera,
); );
// Genero password
const password = this.bcryptService.generarPassword(); const password = this.bcryptService.generarPassword();
let message: string; let message: string;
// Busco usuario
return this.findInfoUsuarioByUsuario(usuario, rfc) return this.findInfoUsuarioByUsuario(usuario, rfc)
.then(async (existeUsuario) => { .then(async (existeUsuario) => {
// Ai no existe o tiene contraseña, es decir que esta registrado, saca error
if (!existeUsuario || existeUsuario.password) if (!existeUsuario || existeUsuario.password)
throw new ConflictException( throw new ConflictException(
'Verificar sus datos, cualquier duda asistir al módulo PC PUMA.', '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, existeUsuario,
institucionCarrera.id_institucion_carrera, institucionCarrera.id_institucion_carrera,
); );
}) })
.then((institucionUsuario) => { .then((institucionUsuario) => {
// Si no tiene correo saca error
if (!institucionUsuario.usuario.correo) if (!institucionUsuario.usuario.correo)
throw new ConflictException( throw new ConflictException(
'Tu institución no te asignó un correo institucional, dirigete al módulo para solucionarlo.', '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('@'); 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( message = `Se creó correctamente tu cuenta, mandamos un correo a ...${institucionUsuario.usuario.correo.slice(
arrobaIndex - 3, arrobaIndex - 3,
)} con tus credenciales para acceder a este servicio.`; )} con tus credenciales para acceder a este servicio.`;
// Asignar datos enviados del front y encriptar la password
institucionUsuario.usuario.telefono = telefono; institucionUsuario.usuario.telefono = telefono;
institucionUsuario.usuario.password = institucionUsuario.usuario.password =
this.bcryptService.encriptar(password); this.bcryptService.encriptar(password);
// Guardar
return this.repository.save(institucionUsuario.usuario); return this.repository.save(institucionUsuario.usuario);
}) })
.then((usuario) => .then((usuario) =>
// Enviar credenciales al correo
this.nodemailerService.sendEmail({ this.nodemailerService.sendEmail({
email: usuario.correo, email: usuario.correo,
subject: 'Credenciales Pc Puma', subject: 'Credenciales Pc Puma',
@ -323,7 +292,18 @@ export class UsuarioService {
update(operador: Operador, attrs: Partial<Usuario>) { update(operador: Operador, attrs: Partial<Usuario>) {
return this.findInfoUsuarioById(attrs.id_usuario) 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); Object.assign(usuario, attrs);
return this.repository.save(usuario); return this.repository.save(usuario);
}) })