carrera programa usuario service final

This commit is contained in:
xXpuma99Xx 2022-12-19 13:34:04 -06:00
parent c1f3d1771e
commit 1e8aa56773
5 changed files with 98 additions and 106 deletions

View File

@ -79,7 +79,23 @@ export class CarreraProgramaController {
@Get()
@UseGuards(AuthGuard('jwt'))
@ApiOperation({
description: 'Programas asignados a las carreras de una institución.',
description:
'Programas asignados a las carreras de una institución de un admin.',
})
@ApiBearerAuth('jwt')
get(@Request() req) {
const admin: Operador = req.user.operador;
this.validarUsuarioService.validarAdmin(admin);
return this.carreraProgramaService.findAllByInstitucion(admin.institucion);
}
@Serealize(CarreraProgramaOutputDto)
@Get('usuario')
@UseGuards(AuthGuard('jwt'))
@ApiOperation({
description:
'Programas asignados a las carreras de una institución de un usuario.',
})
@ApiBearerAuth('jwt')
@ApiQuery({
@ -87,15 +103,12 @@ export class CarreraProgramaController {
name: 'id_institucion',
type: 'string',
})
get(@Request() req, @Query() query: IdInstitucionDto) {
const usuarioOperador: Operador | Usuario =
req.user.operador || req.user.usuario;
getUsuario(@Request() req, @Query() query: IdInstitucionDto) {
const usuario: Usuario = req.user.usuario;
if (usuarioOperador instanceof Usuario)
this.validarUsuarioService.validarUsuario(usuarioOperador);
else this.validarUsuarioService.validarAdmin(usuarioOperador);
return this.carreraProgramaService.findByIdInstitucion(
usuarioOperador,
this.validarUsuarioService.validarUsuario(usuario);
return this.carreraProgramaService.findAllOfUsuario(
usuario,
parseInt(query.id_institucion),
);
}

View File

@ -7,6 +7,7 @@ import {
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { CarreraPrograma } from './entity/carrera-programa.entity';
import { Institucion } from '../institucion/entity/institucion.entity';
import { Operador } from '../operador/entity/operador.entity';
import { Usuario } from '../usuario/entity/usuario.entity';
import { InstitucionService } from '../institucion/institucion.service';
@ -29,7 +30,7 @@ export class CarreraProgramaService {
admin: Operador,
id_institucion_carrera: number,
id_programa: number,
) {
): Promise<{ message: string }> {
const institucionCarrera = await this.institucionCarreraService.findById(
id_institucion_carrera,
);
@ -37,7 +38,7 @@ export class CarreraProgramaService {
id_programa,
);
// Validamos que el admin que esta realizando esta acción le pertenezca la carrera
// Validamos que la institución carrera le pertenezca al admin
if (
admin.institucion.id_institucion !=
institucionCarrera.institucion.id_institucion
@ -45,24 +46,21 @@ export class CarreraProgramaService {
throw new ForbiddenException(
'Esta carrera no pertenece a tu institución.',
);
// Busco un registro que ya contenga la info mandada
// Busco un registro con los datos mandados del client
return this.repository
.findOne({
select: { id_carrera_programa: true },
select: ['id_carrera_programa'],
where: { institucionCarrera, programa },
})
.then((existeCarretaPrograma) => {
// Si lo encuentro saco error
// Si encuentro uno saco error
if (existeCarretaPrograma)
throw new ConflictException(
'Ya se asignó este programa a esta carrera.',
);
// Guardar registro
// Creo y guardo registro
return this.repository.save(
this.repository.create({
institucionCarrera,
programa,
}),
this.repository.create({ institucionCarrera, programa }),
);
})
.then((_) => ({
@ -70,11 +68,13 @@ export class CarreraProgramaService {
}));
}
delete(admin: Operador, id_carrera_programa: number) {
delete(
admin: Operador,
id_carrera_programa: number,
): Promise<{ message: string }> {
return this.findById(id_carrera_programa)
.then((carreraPrograma) => {
// Validamos que la asociación entre una carrera y un programa le
// pertenezcan al admin que realiza esta acción
// Validamos que la carrera programa pertenezca a la institución del admin
if (
admin.institucion.id_institucion !=
carreraPrograma.institucionCarrera.institucion.id_institucion
@ -82,17 +82,32 @@ export class CarreraProgramaService {
throw new ForbiddenException(
'No puedes eliminar esta asociación porque no pertenece a tu institución.',
);
// Elimino
// Eliminamos el registro
return this.repository.remove(carreraPrograma);
})
.then((_) => ({
message: 'Se eliminó correctamente la asignación del programa.',
}));
.then((_) => ({ message: 'Se eliminó correctamente esta asociación.' }));
}
findById(id_carrera_programa: number) {
findAllByInstitucion(institucion: Institucion): Promise<CarreraPrograma[]> {
return this.repository.find({
join: {
alias: 'cp',
innerJoinAndSelect: {
ic: 'cp.institucionCarrera',
c: 'ic.carrera',
i: 'ic.institucion',
},
},
where: { institucionCarrera: { institucion } },
});
}
findById(id_carrera_programa: number): Promise<CarreraPrograma> {
return this.repository
.findOne({ where: { id_carrera_programa } })
.findOne({
select: ['id_carrera_programa'],
where: { id_carrera_programa },
})
.then((carreraPrograma) => {
if (!carreraPrograma)
throw new NotFoundException('No existe este id carrera programa.');
@ -100,43 +115,21 @@ export class CarreraProgramaService {
});
}
findByIdInstitucion(
usuarioOperador: Operador | Usuario,
async findAllOfUsuario(
usuario: Usuario,
id_institucion: number,
) {
return this.institucionService
.findById(id_institucion)
.then(async (institucion) => {
// Si es un Operador
if (usuarioOperador instanceof Operador) {
// Validamos 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 le pertenece a tu 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',
innerJoinAndSelect: {
ic: 'cp.institucionCarrera',
c: 'ic.carrera',
i: 'ic.institucion',
},
},
where: { institucionCarrera: { institucion } },
});
): Promise<CarreraPrograma[]> {
const institucion = await this.institucionService.findById(id_institucion);
return this.institucionUsuarioService
.findByIdUsuarioIdInstitucion(usuario, institucion)
.then((institucionUsuario) => {
// Validamos que el usuario pertenezca a la institución de la información que solicita
if (!institucionUsuario)
throw new ForbiddenException(
'No puedes acceder a esta información porque no perteneces a esta institución.',
);
return this.findAllByInstitucion(institucion);
});
}
}

View File

@ -97,7 +97,7 @@ export class HoraExcepcionService {
throw new ConflictException(
'No puedes eliminar esta horario sin servicio porque no pertenece a tu institución.',
);
// Elimino registro
// Eliminamos registro
return this.repository.remove(horaExcepcion);
})
.then((_) => ({

View File

@ -100,15 +100,15 @@ export class OperadorService {
findAdmin(admin: string) {
return this.repository
.findOne({
select: {
id_operador: true,
activo: true,
nombre: true,
operador: true,
password: true,
id_institucion: true,
id_tipo_usuario: true,
},
select: [
'id_operador',
'activo',
'nombre',
'operador',
'password',
'id_institucion',
'id_tipo_usuario',
],
where: {
operador: admin,
tipoUsuario: { id_tipo_usuario: Between(2, 3) },
@ -179,15 +179,15 @@ export class OperadorService {
findOperador(institucion: Institucion, operador: string) {
return this.repository
.findOne({
select: {
id_operador: true,
activo: true,
nombre: true,
operador: true,
password: true,
id_institucion: true,
id_tipo_usuario: true,
},
select: [
'id_operador',
'activo',
'nombre',
'operador',
'password',
'id_institucion',
'id_tipo_usuario',
],
where: { operador, institucion, tipoUsuario: { id_tipo_usuario: 4 } },
})
.then((operador) => this.llenarIds(operador));
@ -196,13 +196,13 @@ export class OperadorService {
findById(id_operador: number) {
return this.repository
.findOne({
select: {
id_operador: true,
activo: true,
correo: true,
id_institucion: true,
id_tipo_usuario: true,
},
select: [
'id_operador',
'activo',
'correo',
'id_institucion',
'id_tipo_usuario',
],
where: { id_operador },
})
.then((operador) => {

View File

@ -158,14 +158,7 @@ export class UsuarioService {
findById(id_usuario: number) {
return this.repository
.findOne({
select: {
id_usuario: true,
correo: true,
password: true,
usuario: true,
nombre: true,
tipoUsuario: { id_tipo_usuario: true },
},
select: ['id_usuario', 'correo', 'password', 'usuario', 'nombre'],
where: { id_usuario },
})
.then((usuario) => {
@ -179,14 +172,7 @@ export class UsuarioService {
if (rfc) busqueda.rfc = rfc;
return this.repository.findOne({
select: {
id_usuario: true,
correo: true,
nombre: true,
password: true,
usuario: true,
tipoUsuario: { id_tipo_usuario: true },
},
select: ['id_usuario', 'correo', 'nombre', 'password', 'usuario'],
where: busqueda,
});
}