usuario service final
This commit is contained in:
parent
8ab7bcc215
commit
58be316277
@ -98,10 +98,10 @@ export class UsuarioController {
|
||||
examples: { ejemplo: { value: { id_usuario: 1 } } },
|
||||
})
|
||||
passwordResset(@Request() req, @Body() body: UpdateUsuarioInputDto) {
|
||||
const admin: Operador = req.user.operador;
|
||||
const operador: Operador = req.user.operador;
|
||||
|
||||
this.validarUsuarioService.validarAdminOperador(admin);
|
||||
return this.usuarioService.passwordReset(body.id_usuario);
|
||||
this.validarUsuarioService.validarAdminOperador(operador);
|
||||
return this.usuarioService.passwordReset(operador, body.id_usuario);
|
||||
}
|
||||
|
||||
@Serealize(UsuarioOutputDto)
|
||||
|
@ -6,6 +6,8 @@ import {
|
||||
import { InjectRepository } from '@nestjs/typeorm';
|
||||
import { FindOptionsWhere, Repository } from 'typeorm';
|
||||
import { InstitucionCarrera } from '../institucion-carrera/entity/institucion-carrera.entity';
|
||||
import { InstitucionUsuario } from '../institucion-usuario/entity/institucion-usuario.entity';
|
||||
import { Operador } from '../operador/entity/operador.entity';
|
||||
import { TipoUsuario } from '../tipo-usuario/entity/tipo-usuario.entity';
|
||||
import { Usuario } from './entity/usuario.entity';
|
||||
import { FullInformacionUsuarioView } from './entity/views/full-informacion-usuario.view';
|
||||
@ -15,7 +17,6 @@ import { InstitucionCarreraService } from '../institucion-carrera/institucion-ca
|
||||
import { InstitucionUsuarioService } from '../institucion-usuario/institucion-usuario.service';
|
||||
import { NodemailerService } from '../nodemailer/nodemailer.service';
|
||||
import { TipoUsuarioService } from '../tipo-usuario/tipo-usuario.service';
|
||||
import { Operador } from '../operador/entity/operador.entity';
|
||||
|
||||
@Injectable()
|
||||
export class UsuarioService {
|
||||
@ -31,15 +32,15 @@ export class UsuarioService {
|
||||
private tipoUsuarioService: TipoUsuarioService,
|
||||
) {}
|
||||
|
||||
async create(
|
||||
create(
|
||||
usuario: string,
|
||||
nombre: string,
|
||||
tipoUsuario: TipoUsuario,
|
||||
institucionCarrera: InstitucionCarrera,
|
||||
correo: string,
|
||||
rfc?: string,
|
||||
) {
|
||||
// Crear y gurdar registro
|
||||
): Promise<InstitucionUsuario> {
|
||||
// Creamos y guardamos un registro
|
||||
return this.repository
|
||||
.save(
|
||||
this.repository.create({
|
||||
@ -47,11 +48,11 @@ export class UsuarioService {
|
||||
tipoUsuario,
|
||||
usuario,
|
||||
correo,
|
||||
rfc: rfc ? rfc : '',
|
||||
rfc: rfc || '',
|
||||
}),
|
||||
)
|
||||
.then((usuario) =>
|
||||
// Le asigna la carrera enviada
|
||||
// Le asignamos la carrera enviada
|
||||
this.institucionUsuarioService.create(institucionCarrera, usuario),
|
||||
);
|
||||
}
|
||||
@ -65,7 +66,7 @@ export class UsuarioService {
|
||||
nombre?: string;
|
||||
password?: string;
|
||||
usuario?: string;
|
||||
}) {
|
||||
}): Promise<[Usuario[], number]> {
|
||||
const carrera = filtros.id_carrera
|
||||
? await this.institucionCarreraService.findCarreraByIdCarrera(
|
||||
parseInt(filtros.id_carrera),
|
||||
@ -90,7 +91,10 @@ export class UsuarioService {
|
||||
.take(25)
|
||||
.skip((parseInt(filtros.pagina) - 1) * 25);
|
||||
|
||||
if (filtros.password)
|
||||
if (
|
||||
filtros.password &&
|
||||
(filtros.password === 'true' || filtros.password === 'false')
|
||||
)
|
||||
query.andWhere(
|
||||
`u.password IS ${filtros.password === 'true' ? 'NOT' : ''} NULL`,
|
||||
);
|
||||
@ -153,7 +157,7 @@ export class UsuarioService {
|
||||
findById(id_usuario: number) {
|
||||
return this.repository
|
||||
.findOne({
|
||||
select: ['id_usuario', 'correo', 'password', 'usuario', 'nombre'],
|
||||
select: ['id_usuario', 'correo', 'password', 'usuario'],
|
||||
where: { id_usuario },
|
||||
})
|
||||
.then((usuario) => {
|
||||
@ -172,24 +176,27 @@ export class UsuarioService {
|
||||
});
|
||||
}
|
||||
|
||||
passwordReset(id_usuario: number) {
|
||||
// Genero password
|
||||
const password = this.bcryptService.generarPassword();
|
||||
passwordReset(
|
||||
operador: Operador,
|
||||
id_usuario: number,
|
||||
): Promise<{ message: string }> {
|
||||
const password = this.bcryptService.generarPassword(); // Generamos una password
|
||||
|
||||
return this.findById(id_usuario)
|
||||
.then((usuario) => {
|
||||
// Solo se puede actualizar password si no esta registrado, password = registro
|
||||
.then(async (usuario) => {
|
||||
await this.validarsOperadorMod(usuario, operador);
|
||||
// Solo se puede reenviar password si no esta registrad@, tener password = registro
|
||||
if (!usuario.password)
|
||||
throw new ConflictException(
|
||||
'No se puede enviar una contraseña a un usuario no registrado.',
|
||||
);
|
||||
// Asigno nueva password
|
||||
// Actualizamos password
|
||||
usuario.password = this.bcryptService.encriptar(password);
|
||||
// Guardar
|
||||
// Guardamos cambios
|
||||
return this.repository.save(usuario);
|
||||
})
|
||||
.then((usuario) =>
|
||||
// Envio correo con credenciales
|
||||
// Enviamos un correo con credenciales
|
||||
this.nodemailerService.sendEmail({
|
||||
email: usuario.correo,
|
||||
subject: 'Credenciales Pc Puma',
|
||||
@ -206,23 +213,21 @@ export class UsuarioService {
|
||||
usuario: string,
|
||||
telefono: string,
|
||||
rfc = '',
|
||||
) {
|
||||
): Promise<{ message: string }> {
|
||||
const institucionCarrera = await this.institucionCarreraService.findById(
|
||||
id_institucion_carrera,
|
||||
);
|
||||
// Genero password
|
||||
const password = this.bcryptService.generarPassword();
|
||||
const password = this.bcryptService.generarPassword(); // Generamos un password
|
||||
let message: string;
|
||||
|
||||
// Buscamos usuario
|
||||
return this.findByUsuario(usuario, rfc)
|
||||
.then(async (existeUsuario) => {
|
||||
// Ai no existe o tiene contraseña, es decir que esta registrado, saca error
|
||||
// Si no existe o tiene contraseña, es decir que esta registrado, sacamos error
|
||||
if (!existeUsuario || existeUsuario.password)
|
||||
throw new ConflictException(
|
||||
'Verificar sus datos, cualquier duda asistir al módulo PC PUMA.',
|
||||
);
|
||||
// Ver si el alumno pertenece a esta carrera
|
||||
// Validamos que el alunmo pertenezca a la carrera enviada
|
||||
return this.institucionUsuarioService.findFullInfoByIdUsuarioIdInstitucionCarrera(
|
||||
existeUsuario,
|
||||
institucionCarrera,
|
||||
@ -246,11 +251,11 @@ export class UsuarioService {
|
||||
institucionUsuario.usuario.telefono = telefono;
|
||||
institucionUsuario.usuario.password =
|
||||
this.bcryptService.encriptar(password);
|
||||
// Guardar
|
||||
// Guardamos cambios
|
||||
return this.repository.save(institucionUsuario.usuario);
|
||||
})
|
||||
.then((usuario) =>
|
||||
// Enviar credenciales al correo
|
||||
// Enviamos un correo con credenciales
|
||||
this.nodemailerService.sendEmail({
|
||||
email: usuario.correo,
|
||||
subject: 'Credenciales Pc Puma',
|
||||
@ -260,26 +265,19 @@ export class UsuarioService {
|
||||
.then((_) => ({ message }));
|
||||
}
|
||||
|
||||
save(usuario: Usuario) {
|
||||
save(usuario: Usuario): Promise<{ message: string }> {
|
||||
return this.repository
|
||||
.save(usuario)
|
||||
.then((_) => ({ message: 'Se guardaron los cambios correctamente.' }));
|
||||
}
|
||||
|
||||
update(operador: Operador, attrs: Partial<Usuario>) {
|
||||
update(
|
||||
operador: Operador,
|
||||
attrs: Partial<Usuario>,
|
||||
): Promise<{ message: string }> {
|
||||
return this.findById(attrs.id_usuario)
|
||||
.then(async (usuario) => {
|
||||
const institucionesUsuario =
|
||||
await this.institucionUsuarioService.findAllByIdUsuarioIdInstitucion(
|
||||
usuario,
|
||||
operador.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.',
|
||||
);
|
||||
await this.validarsOperadorMod(usuario, operador);
|
||||
// Asignamos valores enviados al objeto
|
||||
Object.assign(usuario, attrs);
|
||||
// Guardamos cambios
|
||||
@ -287,4 +285,19 @@ export class UsuarioService {
|
||||
})
|
||||
.then((_) => ({ message: 'Se guardaron los cambios correctamente.' }));
|
||||
}
|
||||
|
||||
private async validarsOperadorMod(
|
||||
usuario: Usuario,
|
||||
operador: Operador,
|
||||
): Promise<void> {
|
||||
return this.institucionUsuarioService
|
||||
.findAllByIdUsuarioIdInstitucion(usuario, operador.institucion)
|
||||
.then((institucionesUsuario) => {
|
||||
// Si el array no trae elementos significa que el usuario existe pero no le pertenece a la institución de admin
|
||||
if (institucionesUsuario.length === 0)
|
||||
throw new ConflictException(
|
||||
'No puedes modificar la información este usuario porque no pertenece a tu institución.',
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user