login de usuario mejorado
This commit is contained in:
parent
58cab72127
commit
b4da40e915
@ -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,
|
||||
],
|
||||
};
|
||||
},
|
||||
|
@ -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) {
|
||||
|
68
src/usuario/entity/views/informacion-usuario.view.ts
Normal file
68
src/usuario/entity/views/informacion-usuario.view.ts
Normal file
@ -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;
|
||||
}
|
@ -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],
|
||||
|
@ -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<Usuario>,
|
||||
@InjectRepository(InformacionUsuarioView)
|
||||
private equipoPrestamoView: Repository<InformacionUsuarioView>,
|
||||
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();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user