fix: ajuste no endpoint de impressão de pedidos.

This commit is contained in:
joelson brito
2025-11-05 15:40:32 -03:00
parent 3849fa1c4e
commit e448a44144
13 changed files with 847 additions and 165 deletions

View File

@@ -1,59 +1,78 @@
/* eslint-disable prettier/prettier */
/* eslint-disable @typescript-eslint/no-unused-vars */
import { Body, Controller, Get, Param, Post,UseGuards } from '@nestjs/common';
import { ProductsService } from './products.service';
import { ExposedProduct } from 'src/core/models/exposed-product.model';
import { JwtAuthGuard } from 'src/auth/guards/jwt-auth.guard';
import { ExposedProductDto } from './dto/exposed-product.dto';
import { ProductValidationDto } from './dto/ProductValidationDto';
import { ProductEcommerceDto } from './dto/product-ecommerce.dto';
import { ApiTags, ApiOperation, ApiParam, ApiBody, ApiResponse, ApiBearerAuth } from '@nestjs/swagger';
@ApiBearerAuth()
@UseGuards(JwtAuthGuard)
@ApiTags('Produtos')
@Controller('api/v1/products')
export class ProductsController {
constructor(private readonly productsService: ProductsService) {}
///enpoit produtos-ecommecer
@Get('products-ecommerce')
@ApiOperation({ summary: 'Lista produtos para o e-commerce' })
@ApiResponse({
status: 200,
description: 'Lista de produtos retornada com sucesso.',
type: ProductEcommerceDto,
isArray: true
})
///ENDPOIT DE VALIDAR PRODUTO POR FILTRO
@Get('product-validation/:storeId/:filtro')
@ApiOperation({ summary: 'Valida produto pelo filtro (código, EAN ou descrição)' })
@ApiParam({ name: 'storeId', type: String, description: 'ID da loja' })
@ApiParam({ name: 'filtro', type: String, description: 'Filtro de busca (código, EAN ou descrição)' })
@ApiResponse({
status: 200,
description: 'Produto encontrado com sucesso.',
type: ProductValidationDto
})
@ApiResponse({ status: 404, description: 'Produto não localizado.' })
async productValidation(
@Param('storeId') storeId: string,
@Param('filtro') filtro: string,
): Promise<ProductValidationDto> {
return this.productsService.productsValidation(storeId, filtro);
}
/// ENDPOIT PRODUTOS EXPOSTOS
@Post('exposed-product')
@ApiOperation({ summary: 'Registra produto em exposição' })
@ApiBody({ type: ExposedProductDto })
@ApiResponse({ status: 201, description: 'Produto exposto registrado com sucesso.' })
async exposedProduct(@Body() exposedProduct: ExposedProduct) {
return this.productsService.exposedProduct(exposedProduct);
}
}
/* eslint-disable prettier/prettier */
/* eslint-disable @typescript-eslint/no-unused-vars */
import { Body, Controller, Get, Param, Post,UseGuards } from '@nestjs/common';
import { ProductsService } from './products.service';
import { ExposedProduct } from 'src/core/models/exposed-product.model';
import { JwtAuthGuard } from 'src/auth/guards/jwt-auth.guard';
import { ExposedProductDto } from './dto/exposed-product.dto';
import { ProductValidationDto } from './dto/ProductValidationDto';
import { ProductEcommerceDto } from './dto/product-ecommerce.dto';
import { ApiTags, ApiOperation, ApiParam, ApiBody, ApiResponse, ApiBearerAuth } from '@nestjs/swagger';
import { ProductDetailQueryDto } from './dto/product-detail-query.dto';
import { ProductDetailResponseDto } from './dto/product-detail-response.dto';
//@ApiBearerAuth()
//@UseGuards(JwtAuthGuard)
@ApiTags('Produtos')
@Controller('api/v1/products')
export class ProductsController {
constructor(private readonly productsService: ProductsService) {}
///enpoit produtos-ecommecer
@Get('products-ecommerce')
@ApiOperation({ summary: 'Lista produtos para o e-commerce' })
@ApiResponse({
status: 200,
description: 'Lista de produtos retornada com sucesso.',
type: ProductEcommerceDto,
isArray: true
})
///ENDPOIT DE VALIDAR PRODUTO POR FILTRO
@Get('product-validation/:storeId/:filtro')
@ApiOperation({ summary: 'Valida produto pelo filtro (código, EAN ou descrição)' })
@ApiParam({ name: 'storeId', type: String, description: 'ID da loja' })
@ApiParam({ name: 'filtro', type: String, description: 'Filtro de busca (código, EAN ou descrição)' })
@ApiResponse({
status: 200,
description: 'Produto encontrado com sucesso.',
type: ProductValidationDto
})
@ApiResponse({ status: 404, description: 'Produto não localizado.' })
async productValidation(
@Param('storeId') storeId: string,
@Param('filtro') filtro: string,
): Promise<ProductValidationDto> {
return this.productsService.productsValidation(storeId, filtro);
}
/// ENDPOIT PRODUTOS EXPOSTOS
@Post('exposed-product')
@ApiOperation({ summary: 'Registra produto em exposição' })
@ApiBody({ type: ExposedProductDto })
@ApiResponse({ status: 201, description: 'Produto exposto registrado com sucesso.' })
async exposedProduct(@Body() exposedProduct: ExposedProduct) {
return this.productsService.exposedProduct(exposedProduct);
}
/**
* Endpoint para buscar detalhes de produtos com preço e estoque
*/
@Post('product-details')
@ApiOperation({ summary: 'Busca detalhes de produtos com preço e estoque' })
@ApiBody({ type: ProductDetailQueryDto })
@ApiResponse({
status: 200,
description: 'Lista de produtos com detalhes retornada com sucesso.',
type: ProductDetailResponseDto,
isArray: true
})
@ApiResponse({ status: 400, description: 'Parâmetros inválidos.' })
async getProductDetails(@Body() query: ProductDetailQueryDto): Promise<ProductDetailResponseDto[]> {
return this.productsService.getProductDetails(query);
}
}