diff --git a/src/institucion-infraccion/institucion-infraccion.controller.ts b/src/institucion-infraccion/institucion-infraccion.controller.ts index c461a75..dee4ea8 100644 --- a/src/institucion-infraccion/institucion-infraccion.controller.ts +++ b/src/institucion-infraccion/institucion-infraccion.controller.ts @@ -1,10 +1,12 @@ import { Body, + ConflictException, Controller, Get, Post, Put, Query, + Request, UseGuards, } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; @@ -22,6 +24,7 @@ import { CreateInstitucionInfraccionDto } from './dto/input/create.dto'; import { UpdateInstitucionInfraccionDto } from './dto/input/update.dto'; import { InfraccionOutputDto } from './dto/output/infraccion.dto'; import { InstitucionInfraccionOutputDto } from './dto/output/institucion-infraccion.dto'; +import { Operador } from 'src/operador/entity/operador.entity'; @Controller('institucion-infraccion') @ApiTags('institucion-infraccion') @@ -38,7 +41,11 @@ export class InstitucionInfraccionController { description: 'Es obligatorio mandar la variable infracción.', examples: { ejemplo: { value: { infraccion: '' } } }, }) - create(@Body() body: CreateInstitucionInfraccionDto) { + create(@Request() req, @Body() body: CreateInstitucionInfraccionDto) { + const superAdmin: Operador = req.user.operador; + + if (superAdmin.tipoUsuario.id_tipo_usuario != 2) + throw new ConflictException('No tienes permiso de realizar esta acción.'); return this.institucionInfraccionService.create(body.infraccion); } @@ -47,7 +54,13 @@ export class InstitucionInfraccionController { @UseGuards(AuthGuard('jwt')) @ApiOperation({ description: 'Endpoint que retorna todas las infracciones.' }) @ApiBearerAuth('jwt') - get() { + get(@Request() req) { + const superAdmin: Operador = req.user.operador; + + if (superAdmin.tipoUsuario.id_tipo_usuario != 2) + throw new ConflictException( + 'No tienes permiso de acceder a esta información.', + ); return this.institucionInfraccionService.findAll(); } @@ -63,7 +76,16 @@ export class InstitucionInfraccionController { name: 'id_institucion', type: 'string', }) - infracciones(@Query() query: IdInstitucionDto) { + infracciones(@Request() req, @Query() query: IdInstitucionDto) { + const operador: Operador = req.user.operador; + + if ( + operador.tipoUsuario.id_tipo_usuario != 3 && + operador.tipoUsuario.id_tipo_usuario != 4 + ) + throw new ConflictException( + 'No tienes permiso de acceder a esta información.', + ); return this.institucionInfraccionService.findAllByIdInstitucion( parseInt(query.id_institucion), ); @@ -81,7 +103,11 @@ export class InstitucionInfraccionController { ejemplo: { value: { id_institucion_infraccion: 603, dias_multa: 7 } }, }, }) - update(@Body() body: UpdateInstitucionInfraccionDto) { - return this.institucionInfraccionService.update(body); + update(@Request() req, @Body() body: UpdateInstitucionInfraccionDto) { + 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.institucionInfraccionService.update(admin, body); } } diff --git a/src/institucion-infraccion/institucion-infraccion.service.ts b/src/institucion-infraccion/institucion-infraccion.service.ts index 5cb5a6d..12364ac 100644 --- a/src/institucion-infraccion/institucion-infraccion.service.ts +++ b/src/institucion-infraccion/institucion-infraccion.service.ts @@ -7,6 +7,7 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { Infraccion } from './entity/infraccion.entity'; import { InstitucionInfraccion } from './entity/institucion-infraccion.entity'; +import { Operador } from 'src/operador/entity/operador.entity'; import { InstitucionService } from '../institucion/institucion.service'; @Injectable() @@ -65,7 +66,13 @@ export class InstitucionInfraccionService { findById(id_institucion_infraccion: number) { return this.institucionInfraccionRepository - .findOne({ id_institucion_infraccion }) + .findOne({ + join: { + alias: 'ii', + innerJoinAndSelect: { i: 'ii.institucion', in: 'ii.infraccion' }, + }, + where: { id_institucion_infraccion }, + }) .then((institucionInfraccion) => { if (!institucionInfraccion) throw new NotFoundException( @@ -75,9 +82,16 @@ export class InstitucionInfraccionService { }); } - update(attrs: Partial) { + update(admin: Operador, attrs: Partial) { return this.findById(attrs.id_institucion_infraccion) .then((institucionInfraccion) => { + if ( + admin.institucion.id_institucion != + institucionInfraccion.institucion.id_institucion + ) + throw new ConflictException( + 'No puedes actualizar la información de esta infraccion porque no le corresponde a tu institución.', + ); Object.assign(institucionInfraccion, attrs); return this.institucionInfraccionRepository.save(institucionInfraccion); })