carrer programa endpoints restringidos a usuario

This commit is contained in:
xXpuma99Xx
2022-07-31 22:02:07 -05:00
parent fc73590ba9
commit 10ed8995e9
4 changed files with 55 additions and 11 deletions
@@ -1,10 +1,12 @@
import {
Body,
ConflictException,
Controller,
Delete,
Get,
Post,
Query,
Request,
UseGuards,
} from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
@@ -17,6 +19,7 @@ import {
} from '@nestjs/swagger';
import { Serealize } from '../interceptors/serialize.interceptor';
import { CarreraProgramaService } from './carrera-programa.service';
import { Operador } from 'src/operador/entity/operador.entity';
import { IdInstitucionDto } from '../dto/id-institucion.dto';
import { CreateCarreraProgramaDto } from './dto/input/create.dto';
import { DeleteCarreraProgramaDto } from './dto/input/delete.dto';
@@ -40,8 +43,13 @@ export class CarreraProgramaController {
ejemplo: { value: { id_institucion_carrera: 36, id_programa: 1 } },
},
})
create(@Body() body: CreateCarreraProgramaDto) {
create(@Request() req, @Body() body: CreateCarreraProgramaDto) {
const admin: Operador = req.user.operador;
if (admin.tipoUsuario.id_tipo_usuario != 3)
throw new ConflictException('No tienes permiso de realizar esta acción.');
return this.carreraProgramaService.create(
admin,
body.id_institucion_carrera,
body.id_programa,
);
@@ -58,8 +66,12 @@ export class CarreraProgramaController {
description: 'Es obligatorio mandar la variable id_carrera_programa.',
examples: { ejemplo: { value: { id_carrera_programa: 1 } } },
})
delete(@Body() body: DeleteCarreraProgramaDto) {
return this.carreraProgramaService.delete(body.id_carrera_programa);
delete(@Request() req, @Body() body: DeleteCarreraProgramaDto) {
const admin: Operador = req.user.operador;
if (admin.tipoUsuario.id_tipo_usuario != 3)
throw new ConflictException('No tienes permiso de realizar esta acción.');
return this.carreraProgramaService.delete(admin, body.id_carrera_programa);
}
@Serealize(CarreraProgramaOutputDto)
@@ -6,6 +6,7 @@ import {
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { CarreraPrograma } from './entity/carrera-programa.entity';
import { Operador } from 'src/operador/entity/operador.entity';
import { InstitucionService } from '../institucion/institucion.service';
import { InstitucionCarreraService } from '../institucion-carrera/institucion-carrera.service';
import { InstitucionProgramaService } from '../institucion-programa/institucion-programa.service';
@@ -20,7 +21,11 @@ export class CarreraProgramaService {
private institucionProgramaService: InstitucionProgramaService,
) {}
async create(id_institucion_carrera: number, id_programa: number) {
async create(
admin: Operador,
id_institucion_carrera: number,
id_programa: number,
) {
const institucionCarrera = await this.institucionCarreraService.findById(
id_institucion_carrera,
);
@@ -28,6 +33,13 @@ export class CarreraProgramaService {
id_programa,
);
if (
admin.institucion.id_institucion !=
institucionCarrera.institucion.id_institucion
)
throw new ConflictException(
'Esta carrera no pertenece a tu institución.',
);
return this.repository
.findOne({ institucionCarrera, programa })
.then((existeCarretaPrograma) => {
@@ -47,9 +59,18 @@ export class CarreraProgramaService {
}));
}
delete(id_carrera_programa: number) {
delete(admin: Operador, id_carrera_programa: number) {
return this.findById(id_carrera_programa)
.then((carreraPrograma) => this.repository.delete(carreraPrograma))
.then((carreraPrograma) => {
if (
admin.institucion.id_institucion !=
carreraPrograma.institucionCarrera.institucion.id_institucion
)
throw new ConflictException(
'No puedes eliminar esta asociación porque no pertenece a tu institución.',
);
return this.repository.delete(carreraPrograma);
})
.then((_) => ({
message: 'Se eliminó correctamente la asignación del programa.',
}));