Files
pcpuma_unam_api/src/equipo/equipo.controller.ts
T
2022-07-15 00:27:30 -05:00

154 lines
4.0 KiB
TypeScript

import { Body, Controller, Get, Put, Query, 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 { NumeroInventarioDto } from '../dto/numero-inventario.dto';
import { EquiposDto } from './dto/input/equipos.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) {}
@Serealize(EquipoOutputDto)
@Get('equipo')
@UseGuards(AuthGuard('jwt'))
@ApiOperation({
description:
'Endpoint que retorna la información de un equipo por su número de inventario de una institución.',
})
@ApiBearerAuth('jwt')
@ApiQuery({
description: 'Id de la institución.',
name: 'id_institucion',
type: 'string',
})
@ApiQuery({
description: 'El número de inventario del equipo que se busca.',
name: 'numero_inventario',
type: 'string',
})
equipo(@Query() query: NumeroInventarioDto) {
return this.equipoService.findByNumeroInventario(
parseInt(query.id_institucion),
query.numero_inventario,
);
}
@Serealize(EquiposOutputDto)
@Get('equipos')
@UseGuards(AuthGuard('jwt'))
@ApiOperation({
description:
'Endpoint que retorna 15 equipos dependiendo de la página en la que esta el usuario y sus filtros.',
})
@ApiBearerAuth('jwt')
@ApiQuery({
description: 'Página en la que se encuentra el usuario.',
name: 'pagina',
type: 'string',
})
@ApiQuery({
description: 'Carrito que se quiere usar como filtro.',
name: 'carrito',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Equipo que se quiere usar como filtro.',
name: 'equipo',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Id de la institución que se quiere usar como filtro.',
name: 'id_institucion',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Id del módulo que se quiere usar como filtro.',
name: 'id_modulo',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Id del programa que se quiere usar como filtro.',
name: 'id_programa',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Id del status que se quiere usar como filtro.',
name: 'id_status',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Id del tipo de carrito que se quiere usar como filtro.',
name: 'id_tipo_carrito',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Id del tipo de entrada que se quiere usar como filtro.',
name: 'id_tipo_entrada',
type: 'string',
required: false,
})
equipos(@Query() query: EquiposDto) {
return this.equipoService.findAll(query);
}
@Put()
@UseGuards(AuthGuard('jwt'))
@ApiOperation({
description: 'Endpoint que actualiza lan información de un equipo.',
})
@ApiBearerAuth('jwt')
@ApiBody({
description:
'Todas las variables a excepción de id_carrito son opcionales.',
examples: {
ejemplo: {
value: {
id_equipo: 1,
_equipo: true,
_id_carrito: '',
_id_operador: 1,
_id_status: 1,
_marca: '',
_modelo: '',
_motivo: '',
_numero_serie: '',
},
},
},
})
update(@Body() body: UpdateEquipoDto) {
const data = { ...body };
delete data.id_carrito;
delete data.id_status;
delete data.id_operador;
delete data.motivo;
return this.equipoService.update(
data,
body.id_carrito,
body.id_status,
body.id_operador,
body.motivo,
);
}
}