Pular para o conteúdo principal

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 Error se 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 Error se 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 Error se 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 Error se 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 Error se 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 Error se 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 Error se 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 Error se 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 Error se 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 Error se 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 Error se 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 Error se 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 Error se 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 Error se 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