Order Header Service
Gerencia operações relacionadas aos pedidos de venda, permitindo buscar histórico de pedidos com filtros por período, líder e usuário, além de consultar detalhes completos de pedidos específicos.
Visão Geral
O OrderHeaderService é responsável por:
- Buscar pedidos da API remota
- Filtrar pedidos por período (data início/fim)
- Filtrar pedidos por líder e usuário
- Inicializar pedidos básicos para clientes
- Consultar detalhes completos de um pedido específico
- Atualizar pedidos existentes
- Deletar pedidos
- Fornecer informações de cabeçalho e itens do pedido
- Acessar dados de empresa, cliente, forma de pagamento e tipo de operação
Os pedidos (order headers) representam as vendas realizadas no sistema, contendo todas as informações necessárias para gestão comercial, financeira e operacional.
Localização: services/order-header/order-header.service.ts
Endpoints Utilizados
Base URL
Todos os endpoints são relativos à base URL configurada em services/api.service.ts
Métodos
fetchRemotePage(params, filter)
Busca pedidos remotamente com paginação e filtros, retornando a resposta completa da API.
Endpoint: GET /cabecalhoPedido
Parâmetros:
params: FetchOrderHeadersParams; // Parâmetros de paginação e filtros
filter?: OrderHeaderFilter; // Filtros adicionais
Retorno:
Promise<PageResponse<OrderHeader>>;
Exemplo de uso:
const pageResponse = await orderHeaderService.fetchRemotePage({
page: 0,
size: 50,
});
console.log(pageResponse.content.length); // Número de pedidos na página
Tratamento de erros:
- Lança
Errorse o status da resposta não for 2xx - Mensagem:
OrderHeaderService.fetchRemotePage failed: {status}
registerFullOrderHeader(fullOrderHeader)
Registra um pedido completo, incluindo cabeçalho e itens.
Endpoint: POST /cabecalhoPedido/completo
Parâmetros:
fullOrderHeader: RegisterFullOrderHeader; // Dados completos do pedido
Retorno:
Promise<OrderHeader>;
Exemplo de uso:
const fullOrder = await orderHeaderService.registerFullOrderHeader(
fullOrderHeaderPayload,
);
console.log("Pedido completo registrado:", fullOrder.id);
Tratamento de erros:
- Lança
Errorse o status da resposta não for 2xx - Mensagem:
OrderHeaderService.registerFullOrderHeader failed: {status}
updateFullOrderHeader(orderHeaderId, orderHeaderUpdated)
Atualiza um pedido completo, incluindo cabeçalho e itens.
Endpoint: PUT /cabecalhoPedido/completo/{orderHeaderId}
Parâmetros:
orderHeaderId: string; // ID do pedido a ser atualizado
orderHeaderUpdated: RegisterFullOrderHeader; // Dados atualizados do pedido
Retorno:
Promise<OrderHeader>;
Exemplo de uso:
const updatedFullOrder = await orderHeaderService.updateFullOrderHeader(
"oh-001",
updatedOrderPayload,
);
console.log("Pedido completo atualizado:", updatedFullOrder.id);
Tratamento de erros:
- Lança
Errorse o status da resposta não for 2xx - Mensagem:
OrderHeaderService.updateFullOrderHeader failed: {status}
finishOrderHeader(orderHeaderId)
Finaliza um pedido específico.
Endpoint: PATCH /cabecalhoPedido/{orderHeaderId}/finalizado
Parâmetros:
orderHeaderId: string; // ID do pedido a ser finalizado
Retorno:
Promise<OrderHeader>;
Exemplo de uso:
const finishedOrder = await orderHeaderService.finishOrderHeader("oh-001");
console.log("Pedido finalizado:", finishedOrder.id);
Tratamento de erros:
- Lança
Errorse o status da resposta não for 2xx - Mensagem:
OrderHeaderService.finishOrderHeader failed: {status}
deleteOrderHeader(orderHeaderId)
Deleta um pedido específico.
Endpoint: DELETE /cabecalhoPedido/{orderHeaderId}
Parâmetros:
orderHeaderId: string; // ID do pedido a ser deletado
Retorno:
Promise<void>;
Exemplo de uso:
await orderHeaderService.deleteOrderHeader("oh-001");
console.log("Pedido deletado com sucesso");
Tratamento de erros:
- Lança
Errorse o status da resposta não for 2xx - Mensagem:
OrderHeaderService.deleteOrderHeader failed: {status}
Estruturas de Dados
Interface OrderHeader
interface OrderHeader {
id: string;
cliente: Client;
empresa: Company;
formaPagamento: PaymentMethod;
tipoOperacao: OperationType;
itens: Item[];
valor: number;
nuNota: string;
vinculos: OrderLinking[];
}
Interface Item
interface Item {
id: string;
descricao: string;
quantidade: number;
valorUnitario: number;
valorTotal: number;
}
Interface OrderLinking
interface OrderLinking {
codTip: string;
descricao: string;
observacao: string;
}
Casos de Uso
Registrar Pedido Completo
const fullOrder = await orderHeaderService.registerFullOrderHeader(
fullOrderHeaderPayload,
);
console.log("Pedido completo registrado:", fullOrder.id);
Atualizar Pedido Completo
const updatedOrder = await orderHeaderService.updateFullOrderHeader(
"oh-001",
updatedOrderPayload,
);
console.log("Pedido completo atualizado:", updatedOrder.id);
Finalizar Pedido
const finishedOrder = await orderHeaderService.finishOrderHeader("oh-001");
console.log("Pedido finalizado:", finishedOrder.id);
Deletar Pedido
await orderHeaderService.deleteOrderHeader("oh-001");
console.log("Pedido deletado com sucesso");
Testes
Localização
services/order-header/order-header.service.test.ts
Executar Testes
# Teste específico do serviço
npx jest services/order-header/order-header.service.test.ts
# Modo watch
npx jest services/order-header/order-header.service.test.ts --watch
# Com coverage
npx jest services/order-header/order-header.service.test.ts --coverage
Casos de Teste
- ✅
fetchRemote: busca de pedidos com paginação - ✅
fetchRemoteById: busca de pedido específico por ID - ✅
initOrderHeader: inicialização de pedido básico - ✅
initOrderHeader: tratamento de erros para status não-2xx - ✅
updateOrderHeader: atualização de pedido - ✅
updateOrderHeader: tratamento de erros para status não-2xx - ✅
deleteOrderHeader: deleção de pedido - ✅
deleteOrderHeader: tratamento de erros para status não-2xx - ✅
registerOrderHeader: cadastro de pedido - ✅
registerOrderHeader: tratamento de erros para status não-2xx - ✅
fetchRemote: retorna content em status 2xx - ✅
fetchRemote: tratamento de erros para status não-2xx - ✅
fetchRemoteById: busca pedido específico por ID - ✅
fetchRemoteById: retorna data em status 2xx - ✅
fetchRemoteById: tratamento de erros para status não-2xx - ✅
fetchRemoteById: chama endpoint com parâmetro correto
Mocks
Localização
__mocks__/order-header.mock.ts
Dados Disponíveis
Mock com pedido completo de exemplo:
orderHeaderResponse: Pedido completo com todos os dadosorderHeaderPagedResponse: Resposta paginada com múltiplos pedidosorderHeaderPayloadMock: Payload para cadastro/atualização de pedido- Cabeçalho com empresa, cliente, pagamento, operação
- Itens com produtos, quantidades e valores
- Campos adicionais customizados
Exemplo de uso em testes:
import {
orderHeaderResponse,
orderHeaderPagedResponse,
} from "@/__mocks__/order-header.mock";
// Mock fetchRemote
const apiWithoutAccessToken: any = {
get: jest.fn(async () => ({
status: 200,
data: orderHeaderPagedResponse,
})),
};
const service = new OrderHeaderService({ apiWithoutAccessToken });
const result = await service.fetchRemote();
expect(result).toEqual(orderHeaderPagedResponse.content);
// Mock fetchRemoteById
const apiMock: any = {
get: jest.fn(async () => ({
status: 200,
data: orderHeaderResponse,
})),
};
const serviceById = new OrderHeaderService({
apiWithoutAccessToken: apiMock,
});
const order = await serviceById.fetchRemoteById("oh-001");
expect(order).toEqual(orderHeaderResponse);
// Mock updateOrderHeader
import { orderHeaderPayloadMock } from "@/__mocks__/order-header.mock";
const updateApiMock: any = {
put: jest.fn(async () => ({
status: 200,
data: orderHeaderResponse,
})),
};
const updateService = new OrderHeaderService({
apiWithoutAccessToken: updateApiMock,
});
const updated = await updateService.updateOrderHeader(
"oh-001",
orderHeaderPayloadMock,
);
expect(updated).toEqual(orderHeaderResponse);
// Mock registerOrderHeader
const registerApiMock: any = {
post: jest.fn(async () => ({
status: 200,
data: orderHeaderResponse,
})),
};
const registerService = new OrderHeaderService({
apiWithoutAccessToken: registerApiMock,
});
const registered = await registerService.registerOrderHeader(
orderHeaderPayloadMock,
);
expect(registered).toEqual(orderHeaderResponse);