Pular para o conteúdo principal

PromotionService

Visão Geral

O PromotionService é responsável por buscar promoções disponíveis a partir da API remota. Ele retorna uma lista de promoções paginadas com suporte a filtro por data e tamanho de página.

Endpoints

MétodoEndpointDescrição
GET/promocoesBusca lista de promoções

Métodos

fetchRemote

Busca promoções da API remota com suporte a paginação e filtro por data.

Parâmetros

NomeTipoObrigatório
pagenumberNão
sizenumberNão
dataHorastringNão

Retorno: Promise<Promotion[]>

Exemplo

const promotions = await promotionService.fetchRemote({ page: 0, size: 50 });

Erros

StatusDescrição
5xxLança Error: PromotionService.fetchRemote failed: ...

Estruturas de Dados

Promotion

type Promotion = {
id: string;
idOrganization: string;
idExterno: string;
tipoCliente: string;
idCliente: string;
grupoDescParc: string;
tipoEmpresa: string;
idEmpresa: string;
tipoProduto: string;
idProduto: string;
grupoDescProd: string;
idTabelaPreco: string;
dataInicial: string;
dataFinal: string;
percentual: number;
valorDesc: number;
valorVenda: number;
descontosQuantidade: DiscountPerQuantity[];
};

DiscountPerQuantity

type DiscountPerQuantity = {
id: string;
idPromotion: string;
tipDesc: string;
valor: number;
};

FetchPromotionsParams

type FetchPromotionsParams = {
page?: number;
size?: number;
dataHora?: string;
};

Componentes Relacionados

ComponenteDescrição
buildQueryParamsSerializa os parâmetros de query para a requisição
apiWithoutAccessTokenInstância Axios sem token de acesso utilizada nas chamadas
PageResponse<T>Tipo genérico de resposta paginada da API

Casos de Uso

Buscar todas as promoções ativas:

const promotions = await promotionService.fetchRemote();

Buscar promoções atualizadas a partir de uma data:

const promotions = await promotionService.fetchRemote({
page: 0,
size: 100,
dataHora: "2026-03-01T00:00:00",
});

Testes

Localização: services/promotion/promotion.service.test.ts

CenárioResultado esperado
fetchRemote com status 200Retorna promotionsPageResponseMock.content
fetchRemote com status 500Lança Error: PromotionService.fetchRemote failed

Mocks

Localização: __mocks__/promotion.mock.ts

const promotionsResponseMock: Promotion[] = [
{
id: "promo1",
idOrganization: "org1",
idExterno: "ext1",
tipoCliente: "Varejo",
idCliente: "cli1",
grupoDescParc: "Grupo A",
tipoEmpresa: "Distribuidora",
idEmpresa: "emp1",
tipoProduto: "Eletrônico",
idProduto: "prod1",
grupoDescProd: "Smartphones",
idTabelaPreco: "tab1",
dataInicial: "2026-03-01",
dataFinal: "2026-03-31",
percentual: 10,
valorDesc: 200,
valorVenda: 1800,
descontosQuantidade: [
{ id: "dq1", idPromotion: "promo1", tipDesc: "Leve 2", valor: 50 },
{ id: "dq2", idPromotion: "promo1", tipDesc: "Leve 5", valor: 150 },
],
},
];