import { Body, Controller, Delete, Get, HttpException, HttpStatus, Param, Post, Put, Query, UseGuards, } from '@nestjs/common'; import { ApiBearerAuth, ApiOperation, ApiParam, ApiQuery, ApiResponse, ApiTags, } from '@nestjs/swagger'; import { ClientService } from './domain/client.service'; import { CreateClientDto } from './dto/createClient.dto'; import { AuthGuard } from '../auth/auth.guard'; @ApiTags('Consumer') @Controller('consumers') export class ClientController { constructor(public service: ClientService) {} @ApiOperation({ summary: 'Procura os consumidors cadastrados' }) @ApiQuery({ name: 'cpf_cnpj', required: false, description: 'CPF/CNPJ do Comsumidor', }) @ApiBearerAuth() @UseGuards(AuthGuard) @Get() async findAll(@Query('cpf_cnpj') cpf_cnpj: string) { if (cpf_cnpj) { return await this.service.findOneBycpf_cnpj(cpf_cnpj); } return this.service.findAll(); } @ApiOperation({ summary: 'Cadastra um consumidor' }) @ApiResponse({ status: 201, description: 'Cadastrado com sucesso.' }) @ApiResponse({ status: 400, description: 'Informações inválidas' }) @ApiResponse({ status: 409, description: 'Consumidor ja castrado' }) @Post() async create(@Body() createdto: CreateClientDto) { try { const client = await this.service.create(createdto); // eslint-disable-next-line @typescript-eslint/no-unused-vars const { password, ...res } = client; return { statuscode: HttpStatus.CREATED, messagee: 'Consumidor cadastrado com sucesso', data: res, }; } catch (erro) { throw new HttpException({ message: erro.message }, erro.status); } } @ApiOperation({ summary: 'Atualiza um consumidor' }) @ApiResponse({ status: 200, description: 'Atualizado com sucesso.' }) @ApiResponse({ status: 404, description: 'Consumidor não cadastrado.' }) @ApiResponse({ status: 400, description: 'Informações inválidas.' }) @ApiResponse({ status: 403, description: 'Forbidden.' }) @ApiBearerAuth() @UseGuards(AuthGuard) @Put(':cpfcnpj') async update( @Param('cpfcnpj') cpfcnpj: string, @Body() updateCliente: CreateClientDto, ) { return await this.service.update(cpfcnpj, updateCliente); } @ApiOperation({ summary: 'Deleta um consumidor' }) @ApiResponse({ status: 200, description: 'Consumidor deletado com sucesso.' }) @ApiResponse({ status: 404, description: 'Consumidor não cadastrado.' }) @ApiResponse({ status: 400, description: 'Informações inválidas.' }) @ApiResponse({ status: 403, description: 'Forbidden.' }) @ApiParam({ name: 'cpfcnpj', type: String, required: true, description: 'CPF/CNPJ do cliente', }) @ApiBearerAuth() @UseGuards(AuthGuard) @Delete(':cpfcnpj') async delete(@Param('cpfcnpj') cpfcnpj: string) { return await this.service.delete(cpfcnpj); } }