listo logins

This commit is contained in:
2022-10-23 17:52:46 -05:00
parent 4417ac9fa1
commit b7926e1402
26 changed files with 145 additions and 88 deletions
@@ -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(
@@ -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,
@@ -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',