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étodo | Endpoint | Descrição |
|---|---|---|
| GET | /promocoes | Busca lista de promoções |
Métodos
fetchRemote
Busca promoções da API remota com suporte a paginação e filtro por data.
Parâmetros
| Nome | Tipo | Obrigatório |
|---|---|---|
page | number | Não |
size | number | Não |
dataHora | string | Não |
Retorno: Promise<Promotion[]>
Exemplo
const promotions = await promotionService.fetchRemote({ page: 0, size: 50 });
Erros
| Status | Descrição |
|---|---|
| 5xx | Lanç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
| Componente | Descrição |
|---|---|
buildQueryParams | Serializa os parâmetros de query para a requisição |
apiWithoutAccessToken | Instâ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ário | Resultado esperado |
|---|---|
fetchRemote com status 200 | Retorna promotionsPageResponseMock.content |
fetchRemote com status 500 | Lanç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 },
],
},
];