pcpuma_unam_api/src/equipo/equipo.controller.ts
2022-12-20 18:03:21 -06:00

183 lines
4.5 KiB
TypeScript

import {
Body,
Controller,
ForbiddenException,
Get,
Put,
Query,
Request,
UseGuards,
} from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import {
ApiBearerAuth,
ApiBody,
ApiOperation,
ApiQuery,
ApiTags,
} from '@nestjs/swagger';
import { Serealize } from '../interceptors/serialize.interceptor';
import { EquipoService } from './equipo.service';
import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service';
import { Operador } from '../operador/entity/operador.entity';
import { NumeroInventarioDto } from '../dto/input/numero-inventario.dto';
import { EquiposDto } from './dto/input/equipos.dto';
import { MessageOutputDto } from '../dto/output/message.dto';
import { UpdateEquipoDto } from './dto/input/update.dto';
import { EquipoOutputDto } from './dto/output/equipo.dto';
import { EquiposOutputDto } from './dto/output/equipos.dto';
@Controller('equipo')
@ApiTags('equipo')
export class EquipoController {
constructor(
private equipoService: EquipoService,
private validarUsuarioService: ValidarUsuarioService,
) {}
@Serealize(EquipoOutputDto)
@Get('equipo')
@UseGuards(AuthGuard('jwt'))
@ApiOperation({
description: 'Información de un equipo de la institución de un operador.',
})
@ApiBearerAuth('jwt')
@ApiQuery({
description: 'Número de inventario del equipo que se busca.',
name: 'numero_inventario',
type: 'string',
})
equipo(@Request() req, @Query() query: NumeroInventarioDto) {
const operador: Operador = req.user.operador;
this.validarUsuarioService.validarAdminOperador(operador);
return this.equipoService.findFullInfoByNumeroInventario(
operador,
query.numero_inventario,
);
}
@Serealize(EquiposOutputDto)
@Get('equipos')
@UseGuards(AuthGuard('jwt'))
@ApiOperation({
description:
'Información de 15 equipos dependiendo de los filtros enviados.',
})
@ApiBearerAuth('jwt')
@ApiQuery({
description: 'Página en la que se encuentra el operador.',
name: 'pagina',
type: 'string',
})
@ApiQuery({
description: 'Carrito que se desea buscar.',
name: 'carrito',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Equipo que se desea buscar.',
name: 'equipo',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Id del carrito.',
name: 'id_carrito',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Id de la institución.',
name: 'id_institucion',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Id de la marca.',
name: 'id_marca',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Id del modelo.',
name: 'id_modelo',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Id del módulo.',
name: 'id_modulo',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Id del programa.',
name: 'id_programa',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Id del status.',
name: 'id_status',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Id del tipo de carrito.',
name: 'id_tipo_carrito',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Id del tipo de entrada.',
name: 'id_tipo_entrada',
type: 'string',
required: false,
})
equipos(@Request() req, @Query() query: EquiposDto) {
const operador: Operador = req.user.operador;
this.validarUsuarioService.validarAdminOperador(operador);
return this.equipoService.findAll(operador, query);
}
@Serealize(MessageOutputDto)
@Put()
@UseGuards(AuthGuard('jwt'))
@ApiOperation({ description: 'Actualiza la información de un equipo.' })
@ApiBearerAuth('jwt')
@ApiBody({
description:
'Variables que necesita el endpoint. Las variables con "_" al inicio son opcionales.',
examples: {
ejemplo: {
value: {
id_equipo: 1,
_equipo: '',
_id_carrito: 1,
_id_status: 1,
_motivo: '',
},
},
},
})
update(@Request() req, @Body() body: UpdateEquipoDto) {
const operador: Operador = req.user.operador;
const data = { ...body };
this.validarUsuarioService.validarAdminOperador(operador);
delete data.id_carrito;
delete data.id_status;
delete data.motivo;
return this.equipoService.update(
operador,
data,
body.id_carrito,
body.id_status,
body.motivo,
);
}
}