Files
pcpuma_unam_api/src/carrito/carrito.controller.ts
T
2022-07-24 22:35:00 -05:00

161 lines
3.9 KiB
TypeScript

import {
Body,
Controller,
Get,
Post,
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 { CarritoService } from './carrito.service';
import { CarritoDto } from './dto/input/carrito.dto';
import { CarritosDto } from './dto/input/carritos.dto';
import { CreateCarritoDto } from './dto/input/create.dto';
import { UpdateCarritoDto } from './dto/input/update.dto';
import { CarritoOutputDto } from './dto/output/carrito.dto';
import { CarritosOutputDto } from './dto/output/carritos.dto';
@Controller('carrito')
@ApiTags('carrito')
export class CarritoController {
constructor(private carritoService: CarritoService) {}
@Serealize(CarritoOutputDto)
@Get('carrito')
@UseGuards(AuthGuard('jwt'))
@ApiOperation({
description: 'Endpoint que retorna la información de un carrito.',
})
@ApiBearerAuth('jwt')
@ApiQuery({
description: 'Id del carrito.',
name: 'id_carrito',
type: 'string',
})
carrito(@Query() query: CarritoDto) {
return this.carritoService.findById(parseInt(query.id_carrito));
}
@Serealize(CarritosOutputDto)
@Get('carritos')
@UseGuards(AuthGuard('jwt'))
@ApiOperation({
description:
'Endpoint que retorna 25 carritos de un módulo dependiendo de la página en la que se encuentra el usuario y sus filtros.',
})
@ApiBearerAuth('jwt')
@ApiQuery({
description: 'Página en la que se encuentra el usuario.',
name: 'pagina',
type: 'string',
})
@ApiQuery({
description: 'Booleano en forma de string que se usará como filtro.',
name: 'activo',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Carrito que se esta buscando.',
name: '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 tipo carrito que se quiere usar como filtro.',
name: 'id_tipo_carrito',
type: 'string',
required: false,
})
carritos(@Query() query: CarritosDto) {
return this.carritoService.findAll(query);
}
@Post()
@UseGuards(AuthGuard('jwt'))
@ApiOperation({
description: 'Endpoint que crea un carrito nuevo en un módulo.',
})
@ApiBearerAuth('jwt')
@ApiBody({
description: 'Todas las variables son obligatorias.',
examples: {
ejemplo: {
value: { id_modulo: 1, id_tipo_carrito: 1, marca: '', modelo: '' },
},
},
})
create(@Body() body: CreateCarritoDto) {
return this.carritoService.create(
body.id_modulo,
body.id_tipo_carrito,
body.marca,
body.modelo,
);
}
@Put()
@UseGuards(AuthGuard('jwt'))
@ApiOperation({
description: 'Endpoint que actualiza la información de un carrito.',
})
@ApiBearerAuth('jwt')
@ApiBody({
description:
'Todas las variables a excepción de id_carrito son opcionales.',
examples: {
ejemplo: {
value: {
id_carrito: 1,
_activo: true,
_carrito: '',
// _id_marca: '',
// _id_modelo: '',
_marca: '',
_modelo: '',
},
},
},
})
update(@Body() body: UpdateCarritoDto) {
const data = { ...body };
// delete data.id_marca;
// delete data.id_modelo;
return this.carritoService.update(data);
}
}