Product Service
Gerencia operações relacionadas aos produtos, permitindo buscar, filtrar, sincronizar e acessar informações detalhadas de produtos.
Visão Geral
O ProductService é responsável por:
- Buscar produtos da API remota
- Sincronizar produtos com o banco local
- Buscar produtos sugeridos, similares e mais vendidos
- Gerenciar imagens de produtos
- Buscar filtros e categorias de produtos
- Listar produtos disponíveis no banco local
Localização: services/product/product.service.ts
Endpoints Utilizados
Base URL
Todos os endpoints são relativos à base URL configurada em services/api.service.ts
Métodos
fetchRemote(params, onProgress)
Busca produtos remotamente com paginação e filtros.
Endpoint: GET /produtos
Parâmetros:
params: FetchProductsParams; // Parâmetros de paginação e filtros
onProgress?: (progress: number) => void; // Callback para progresso
Retorno:
Promise<Product[]>;
Exemplo de uso:
const products = await productService.fetchRemote({ page: 0, size: 20 });
console.log(products.length); // Número de produtos retornados
Tratamento de erros:
- Lança
Errorse o status da resposta não for 2xx - Mensagem:
ProductService.fetchRemote failed: {status}
fetchProductImageRemote(externalId)
Busca a imagem de um produto específico.
Endpoint: GET /api/v1/product/{externalId}/image
Parâmetros:
externalId: string; // ID externo do produto
Retorno:
Promise<ProductImageBinaryPayload>;
Exemplo de uso:
const image = await productService.fetchProductImageRemote("prod-001");
console.log(image.byteLength); // Tamanho da imagem em bytes
Tratamento de erros:
- Lança
Errorse o status da resposta não for 2xx - Mensagem:
ProductService.fetchProductImageRemote failed: {status}
fetchFiltersRemote()
Busca filtros disponíveis para produtos.
Endpoint: GET /produtos/filtros
Retorno:
Promise<ProductFilterResponse>;
Exemplo de uso:
const filters = await productService.fetchFiltersRemote();
console.log(filters); // Filtros disponíveis
Tratamento de erros:
- Lança
Errorse o status da resposta não for 2xx - Mensagem:
ProductService.fetchFiltersRemote failed: {status}
fetchSuggestedProductsRemote(params)
Busca produtos sugeridos remotamente com paginação.
Endpoint: GET /produtoSugerido
Parâmetros:
params: FetchSimilarProductsParams; // Parâmetros de paginação
Retorno:
Promise<SuggestedProduct[]>;
Exemplo de uso:
const suggestedProducts = await productService.fetchSuggestedProductsRemote({
page: 0,
size: 10,
});
console.log(suggestedProducts.length); // Número de produtos sugeridos
Tratamento de erros:
- Lança
Errorse o status da resposta não for 2xx - Mensagem:
ProductService.fetchSuggestedProductsRemote failed: {status}
fetchSuggestedProductsGroupedRemote()
Busca produtos sugeridos agrupados remotamente.
Endpoint: GET /produtoSugerido/agrupados
Retorno:
Promise<SuggestedProductGrouped[]>;
Exemplo de uso:
const groupedSuggestedProducts =
await productService.fetchSuggestedProductsGroupedRemote();
console.log(groupedSuggestedProducts.length); // Número de grupos de produtos sugeridos
Tratamento de erros:
- Lança
Errorse o status da resposta não for 2xx - Mensagem:
ProductService.fetchSuggestedProductsGroupedRemote failed: {status}
fetchSimilarProductsRemote(params)
Busca produtos similares remotamente com paginação.
Endpoint: GET /produtoSimilar
Parâmetros:
params: FetchSimilarProductsParams; // Parâmetros de paginação
Retorno:
Promise<SimilarProduct[]>;
Exemplo de uso:
const similarProducts = await productService.fetchSimilarProductsRemote({
page: 0,
size: 10,
});
console.log(similarProducts.length); // Número de produtos similares
Tratamento de erros:
- Lança
Errorse o status da resposta não for 2xx - Mensagem:
ProductService.fetchSimilarProductsRemote failed: {status}
fetchSimilarProductsGroupedRemote()
Busca produtos similares agrupados remotamente.
Endpoint: GET /produtoSimilar/agrupados
Retorno:
Promise<SimilarProductGrouped[]>;
Exemplo de uso:
const groupedSimilarProducts =
await productService.fetchSimilarProductsGroupedRemote();
console.log(groupedSimilarProducts.length); // Número de grupos de produtos similares
Tratamento de erros:
- Lança
Errorse o status da resposta não for 2xx - Mensagem:
ProductService.fetchSimilarProductsGroupedRemote failed: {status}
fetchBestSellingProductsByOrganization(params)
Busca produtos mais vendidos por organização.
Endpoint: GET /produtosMaisVendidos
Parâmetros:
params: FetchBestSellingProductsParams; // Parâmetros de paginação e ordenação
Retorno:
Promise<BestSellingProduct[]>;
Exemplo de uso:
const bestSellingProducts =
await productService.fetchBestSellingProductsByOrganization({
page: 0,
size: 20,
});
console.log(bestSellingProducts.length); // Número de produtos mais vendidos
Tratamento de erros:
- Lança
Errorse o status da resposta não for 2xx - Mensagem:
ProductService.fetchBestSellingProductsByOrganization failed: {status}
fetchBestSellingProductsByClient(params)
Busca produtos mais vendidos por cliente.
Endpoint: GET /produtosMaisVendidos/cliente
Parâmetros:
params: FetchBestSellingProductsByClientParams; // Parâmetros de cliente e paginação
Retorno:
Promise<BestSellingProduct[]>;
Exemplo de uso:
const clientBestSellingProducts =
await productService.fetchBestSellingProductsByClient({
idCliente: "cli-001",
page: 0,
size: 20,
});
console.log(clientBestSellingProducts.length); // Número de produtos mais vendidos para o cliente
Tratamento de erros:
- Lança
Errorse o status da resposta não for 2xx - Mensagem:
ProductService.fetchBestSellingProductsByClient failed: {status}
fetchPurchasedProductsRemote(clientId, params)
Busca produtos comprados por um cliente.
Endpoint: GET /produtos/cliente/{clientId}/comprados
Parâmetros:
clientId: string; // ID do cliente
params: Pick<FetchProductsParams, "page" | "size">; // Parâmetros de paginação
Retorno:
Promise<PurchasedProduct[]>;
Exemplo de uso:
const purchasedProducts = await productService.fetchPurchasedProductsRemote(
"cli-001",
{ page: 0, size: 20 },
);
console.log(purchasedProducts.length); // Número de produtos comprados
Tratamento de erros:
- Lança
Errorse o status da resposta não for 2xx - Mensagem:
ProductService.fetchPurchasedProductsRemote failed: {status}
fetchNotPurchasedProductsRemote(clientId, params)
Busca produtos não comprados por um cliente.
Endpoint: GET /produtos/cliente/{clientId}/naoComprados
Parâmetros:
clientId: string; // ID do cliente
params: Pick<FetchProductsParams, "page" | "size">; // Parâmetros de paginação
Retorno:
Promise<PurchasedProduct[]>;
Exemplo de uso:
const notPurchasedProducts =
await productService.fetchNotPurchasedProductsRemote("cli-001", {
page: 0,
size: 20,
});
console.log(notPurchasedProducts.length); // Número de produtos não comprados
Tratamento de erros:
- Lança
Errorse o status da resposta não for 2xx - Mensagem:
ProductService.fetchNotPurchasedProductsRemote failed: {status}
fetchFeaturedProductsRemote(params)
Busca produtos em destaque remotamente.
Endpoint: GET /produtos/destaques
Parâmetros:
params: Pick<FetchProductsParams, "page" | "size">; // Parâmetros de paginação
Retorno:
Promise<Product[]>;
Exemplo de uso:
const featuredProducts = await productService.fetchFeaturedProductsRemote({
page: 0,
size: 20,
});
console.log(featuredProducts.length); // Número de produtos em destaque
Tratamento de erros:
- Lança
Errorse o status da resposta não for 2xx - Mensagem:
ProductService.fetchFeaturedProductsRemote failed: {status}
productCategoriesSync(params)
Sincroniza categorias de produtos.
Endpoint: GET /sincronizacao/categorias-produtos
Parâmetros:
params: ProductCategoriesSyncParams; // Parâmetros de sincronização
Retorno:
Promise<ProductCategoriesSyncResponse>;
Exemplo de uso:
const categories = await productService.productCategoriesSync({
clientId: "cli-001",
});
console.log(categories); // Categorias sincronizadas
Tratamento de erros:
- Lança
Errorse o status da resposta não for 2xx - Mensagem:
ProductService.productCategoriesSync failed: {status}
productCategoriesBatchSync(params)
Sincroniza categorias de produtos em lote.
Endpoint: GET /sincronizacao/categorias-produtos/lote
Parâmetros:
params: ProductCategoriesBatchSyncParams; // Parâmetros de sincronização em lote
Retorno:
Promise<ProductCategoriesBatchSyncResponse>;
Exemplo de uso:
const batchCategories = await productService.productCategoriesBatchSync({
page: 0,
size: 20,
});
console.log(batchCategories); // Categorias sincronizadas em lote
Tratamento de erros:
- Lança
Errorse o status da resposta não for 2xx - Mensagem:
ProductService.productCategoriesBatchSync failed: {status}
list(params)
Lista produtos disponíveis no banco local.
Parâmetros:
params?: {
where?: Partial<Product>;
orderBy?: { column: ProductDbColumns; direction?: "ASC" | "DESC" };
limit?: number;
offset?: number;
};
Retorno:
Promise<Product[]>;
Exemplo de uso:
const localProducts = await productService.list({
where: { name: "Produto A" },
});
console.log(localProducts.length); // Número de produtos encontrados
clearLocal()
Limpa todos os produtos do banco local.
Retorno:
Promise<void>;
Exemplo de uso:
await productService.clearLocal();
console.log("Banco local limpo");
sync(pageSize, onProgress, options)
Sincroniza produtos da API remota com o banco local.
Parâmetros:
pageSize?: number; // Tamanho da página para sincronização
onProgress?: (progress: number) => void; // Callback para progresso
options?: {
dataHora?: string; // Data/hora para sincronização incremental
clearLocal?: boolean; // Limpar banco local antes de sincronizar
};
Retorno:
Promise<void>;
Exemplo de uso:
await productService.sync(100, (progress) =>
console.log(`Progresso: ${progress}%`),
);
console.log("Sincronização concluída");
searchAndList(params)
Busca e lista produtos com filtros avançados.
Parâmetros:
params: {
filter: ProductFilter;
saleDraftId?: string;
codTipOper?: number | null;
};
Retorno:
Promise<{ products: Product[]; total: number }>;
Exemplo de uso:
const { products, total } = await productService.searchAndList({
filter: { name: "Produto A" },
});
console.log(total); // Total de produtos encontrados
getAvailableBrands()
Busca marcas disponíveis no banco local.
Retorno:
Promise<string[]>;
Exemplo de uso:
const brands = await productService.getAvailableBrands();
console.log(brands); // Marcas disponíveis
getAvailableSuppliers()
Busca fornecedores disponíveis no banco local.
Retorno:
Promise<string[]>;
Exemplo de uso:
const suppliers = await productService.getAvailableSuppliers();
console.log(suppliers); // Fornecedores disponíveis
getAvailableManufacturers()
Busca fabricantes disponíveis no banco local.
Retorno:
Promise<string[]>;
Exemplo de uso:
const manufacturers = await productService.getAvailableManufacturers();
console.log(manufacturers); // Fabricantes disponíveis