carrera programa usuario service final
This commit is contained in:
parent
c1f3d1771e
commit
1e8aa56773
@ -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),
|
||||
);
|
||||
}
|
||||
|
@ -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);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -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((_) => ({
|
||||
|
@ -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) => {
|
||||
|
@ -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,
|
||||
});
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user