endpoint equipos validados por token

This commit is contained in:
xXpuma99Xx
2022-08-06 00:01:43 -05:00
parent 4b39c19884
commit 94243e544e
3 changed files with 105 additions and 56 deletions
-8
View File
@@ -19,14 +19,6 @@ export class UpdateEquipoDto {
@IsOptional()
id_carrito?: number;
// @IsInt()
// @IsOptional()
// id_marca?: number;
// @IsInt()
// @IsOptional()
// id_modelo?: number;
@IsInt()
@IsOptional()
id_operador?: number;
+60 -11
View File
@@ -1,4 +1,13 @@
import { Body, Controller, Get, Put, Query, UseGuards } from '@nestjs/common';
import {
Body,
Controller,
ForbiddenException,
Get,
Put,
Query,
Request,
UseGuards,
} from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import {
ApiBearerAuth,
@@ -9,6 +18,7 @@ import {
} from '@nestjs/swagger';
import { Serealize } from '../interceptors/serialize.interceptor';
import { EquipoService } from './equipo.service';
import { Operador } from 'src/operador/entity/operador.entity';
import { NumeroInventarioDto } from '../dto/numero-inventario.dto';
import { EquiposDto } from './dto/input/equipos.dto';
import { UpdateEquipoDto } from './dto/input/update.dto';
@@ -38,11 +48,33 @@ export class EquipoController {
name: 'numero_inventario',
type: 'string',
})
equipo(@Query() query: NumeroInventarioDto) {
return this.equipoService.findByNumeroInventario(
parseInt(query.id_institucion),
query.numero_inventario,
);
equipo(@Request() req, @Query() query: NumeroInventarioDto) {
const operador: Operador = req.user.operador;
if (
!operador ||
(operador.tipoUsuario.id_tipo_usuario != 3 &&
operador.tipoUsuario.id_tipo_usuario != 4)
)
throw new ForbiddenException(
'No tienes los permisos necesarios para realizar esta acción.',
);
return this.equipoService
.findByNumeroInventario(
parseInt(query.id_institucion),
query.numero_inventario,
)
.then((equipo) => {
if (
operador.tipoUsuario.id_tipo_usuario > 2 &&
operador.institucion.id_institucion !=
equipo.carrito.modulo.institucion.id_institucion
)
throw new ForbiddenException(
'No puedes acceder a esta información porque este equipo no pertenece a tu institución.',
);
return equipo;
});
}
@Serealize(EquiposOutputDto)
@@ -124,8 +156,18 @@ export class EquipoController {
type: 'string',
required: false,
})
equipos(@Query() query: EquiposDto) {
return this.equipoService.findAll(query);
equipos(@Request() req, @Query() query: EquiposDto) {
const operador: Operador = req.user.operador;
if (
!operador ||
(operador.tipoUsuario.id_tipo_usuario != 3 &&
operador.tipoUsuario.id_tipo_usuario != 4)
)
throw new ForbiddenException(
'No tienes los permisos necesarios para realizar esta acción.',
);
return this.equipoService.findAll(operador, query);
}
@Put()
@@ -143,8 +185,6 @@ export class EquipoController {
id_equipo: 1,
_equipo: true,
_id_carrito: '',
// _id_marca: '',
// _id_modelo: '',
_id_operador: 1,
_id_status: 1,
_motivo: '',
@@ -152,9 +192,18 @@ export class EquipoController {
},
},
})
update(@Body() body: UpdateEquipoDto) {
update(@Request() req, @Body() body: UpdateEquipoDto) {
const operador: Operador = req.user.operador;
const data = { ...body };
if (
!operador ||
(operador.tipoUsuario.id_tipo_usuario != 3 &&
operador.tipoUsuario.id_tipo_usuario != 4)
)
throw new ForbiddenException(
'No tienes los permisos necesarios para realizar esta acción.',
);
delete data.id_carrito;
delete data.id_status;
delete data.id_operador;
+45 -37
View File
@@ -1,5 +1,6 @@
import {
ConflictException,
ForbiddenException,
forwardRef,
Inject,
Injectable,
@@ -76,20 +77,23 @@ export class EquipoService {
.then((_) => equipoNuevo);
}
async findAll(filtros: {
pagina: string;
carrito?: string;
equipo?: string;
id_carrito?: string;
id_institucion?: string;
id_marca?: string;
id_modelo?: string;
id_modulo?: string;
id_programa?: string;
id_status?: string;
id_tipo_carrito?: string;
id_tipo_entrada?: string;
}) {
async findAll(
operador: Operador,
filtros: {
pagina: string;
carrito?: string;
equipo?: string;
id_carrito?: string;
id_institucion?: string;
id_marca?: string;
id_modelo?: string;
id_modulo?: string;
id_programa?: string;
id_status?: string;
id_tipo_carrito?: string;
id_tipo_entrada?: string;
},
) {
const carrito = filtros.id_carrito
? await this.carritoService.findById(parseInt(filtros.id_carrito))
: null;
@@ -144,6 +148,31 @@ export class EquipoService {
.take(15)
.skip((parseInt(filtros.pagina) - 1) * 15);
if (modulo) {
if (
operador.tipoUsuario.id_tipo_usuario > 2 &&
operador.institucion.id_institucion != modulo.institucion.id_institucion
)
throw new ForbiddenException(
'No puedes acceder a esta información porque este módulo no pertenece a tu institución.',
);
query.andWhere('m.id_modulo = :id_modulo', {
id_modulo: modulo.id_modulo,
});
}
if (carrito) {
if (
operador.tipoUsuario.id_tipo_usuario > 2 &&
operador.institucion.id_institucion !=
carrito.modulo.institucion.id_institucion
)
throw new ForbiddenException(
'No puedes acceder a esta información porque este carrito no pertenece a tu institución.',
);
query.andWhere('c.id_carrito = :id_carrito', {
id_carrito: carrito.id_carrito,
});
}
if (filtros.carrito)
query.andWhere('c.carrito LIKE :carrito', {
carrito: `%${filtros.carrito}%`,
@@ -152,7 +181,7 @@ export class EquipoService {
query.andWhere('e.equipo LIKE :equipo', {
equipo: `%${filtros.equipo}%`,
});
if (institucion)
if (institucion && operador.tipoUsuario.id_tipo_usuario === 2)
query.andWhere('m.id_institucion = :id_institucion', {
id_institucion: institucion.id_institucion,
});
@@ -164,14 +193,6 @@ export class EquipoService {
query.andWhere('mo.id_modelo = :id_modelo', {
id_modelo: modelo.id_modelo,
});
if (modulo)
query.andWhere('m.id_modulo = :id_modulo', {
id_modulo: modulo.id_modulo,
});
if (carrito)
query.andWhere('c.id_carrito = :id_carrito', {
id_carrito: carrito.id_carrito,
});
if (programa)
query.andWhere('ps.id_programa = :id_programa', {
id_programa: programa.id_programa,
@@ -337,11 +358,10 @@ export class EquipoService {
}
async update(
// operador: Operador,
attrs: Partial<Equipo>,
id_carrito?: number,
id_status?: number,
// id_marca?: number,
// id_modelo?: number,
id_operador?: number | Operador,
motivo?: string,
) {
@@ -353,16 +373,6 @@ export class EquipoService {
? await this.operadorService.findById(id_operador)
: id_operador
: null;
// const marca = id_marca
// ? typeof id_marca === 'number'
// ? await this.marcaService.findById(id_marca)
// : id_marca
// : null;
// const operador = id_operador
// ? typeof id_operador === 'number'
// ? await this.operadorService.findById(id_operador)
// : id_operador
// : null;
const status = id_status
? await this.statusService.findById(id_status)
: null;
@@ -402,8 +412,6 @@ export class EquipoService {
equipo.status = status;
}
if (carrito) equipo.carrito = carrito;
// if (marca) equipo.marca = marca;
// if (modelo) equipo.modelo = modelo;
return this.repository.save(equipo);
})
.then((equipo) => ({