Company Service
Gerencia operações relacionadas às empresas, permitindo buscar informações sobre as empresas da organização.
Visão Geral
O CompanyService é responsável por:
- Buscar empresas da API remota
- Fornecer informações sobre empresas/filiais da organização
- Listar empresas disponíveis para operações de vendas e estoque
As empresas representam as unidades de negócio, filiais ou empresas do grupo que fazem parte da organização. São utilizadas para controle de estoque, vendas, e outras operações específicas por unidade.
Localização: services/company/company.service.ts
Endpoints Utilizados
Base URL
Todos os endpoints são relativos à base URL configurada em services/api.service.ts
Métodos
fetchRemote(params)
Busca empresas remotamente com paginação.
Endpoint: GET /empresa
Parâmetros:
type FetchCompaniesParams = {
page?: number; // Número da página (padrão: 0)
size?: number; // Quantidade de itens por página (padrão: 999)
dataHora?: string;
};
Query Params enviados:
page: número da páginasize: tamanho da páginadataHora: timestamp (opcional)
Retorno:
Promise<Company[]>;
Exemplo de uso:
import { companyService } from "@/services/company/company.service.instance";
// Buscar todas as empresas
const allCompanies = await companyService.fetchRemote();
// Buscar com paginação
const companiesPage = await companyService.fetchRemote({
page: 0,
size: 50,
});
// Buscar para sincronização
const companies = await companyService.fetchRemote({
page: 0,
size: 999,
dataHora: "2026-02-25T10:00:00Z",
});
Tratamento de erros:
- Lança
Errorse o status da resposta não for 2xx - Mensagem:
CompanyService.fetchRemote failed: {status}
Estruturas de Dados
Interface Company
interface Company {
id: string;
idExterno: string | null;
Organizacao: string;
tipoPessoa: "F" | "J";
cpf?: string;
cnpj?: string;
nome: string;
razaoSocial?: string;
}
Componentes Relacionados
buildQueryParams Helper
Função utilitária que converte objeto de parâmetros em URLSearchParams.
Localização: helpers/buildQueryParams.ts
PageResponse Interface
Interface compartilhada para respostas paginadas.
Localização: services/client/client.service.ts
interface PageResponse<T> {
content: T[]; // Array de itens da página
page?: number; // Número da página atual
size?: number; // Tamanho da página
totalPages?: number; // Total de páginas
totalElements?: number; // Total de elementos
}
Fluxo de Integração
Fluxo de Listagem de Empresas
1. App precisa exibir lista de empresas/filiais
2. App chama companyService.fetchRemote()
3. GET /empresa é enviado com query params
4. API retorna empresas disponíveis
5. App pode usar para filtros de estoque, vendas, etc.
Fluxo de Seleção de Empresa
1. Obter lista de empresas
2. Usuário seleciona empresa para operação
3. Usar ID da empresa em outras operações:
- Consultar estoque da empresa
- Registrar venda na empresa
- Gerar relatórios por empresa
Casos de Uso
Listar Todas as Empresas
// Buscar todas as empresas
const companies = await companyService.fetchRemote();
console.log(`Total de empresas: ${companies.length}`);
companies.forEach((company) => {
console.log(`${company.nome} - ${company.cnpj || company.cpf}`);
});
Renderizar Select de Empresas
// Buscar empresas
const companies = await companyService.fetchRemote();
// Gerar opções para select
const options = companies.map((company) => ({
value: company.id,
label: company.nome,
document: company.cnpj || company.cpf,
}));
// Renderizar
console.log("Selecione a empresa:");
options.forEach((opt) => {
console.log(
`<option value="${opt.value}">${opt.label} - ${opt.document}</option>`,
);
});
Buscar Empresa por ID
// Buscar todas as empresas
const companies = await companyService.fetchRemote();
// Encontrar empresa específica
function findCompanyById(id: string): Company | undefined {
return companies.find((c) => c.id === id);
}
const company = findCompanyById("empresa-123");
if (company) {
console.log("Empresa:", company.nome);
console.log("Organização:", company.Organizacao);
}
Testes
Localização
services/company/company.service.test.ts
Executar Testes
# Teste específico do serviço
npx jest services/company/company.service.test.ts
# Modo watch
npx jest services/company/company.service.test.ts --watch
# Com coverage
npx jest services/company/company.service.test.ts --coverage
Casos de Teste
- ✅
fetchRemote: busca de empresas com paginação - ✅
fetchRemote: retorna content em status 2xx - ✅ Tratamento de erros para status não-2xx
Mocks
Localização
__mocks__/company.mock.ts
Dados Disponíveis
Mock com empresas de exemplo:
- Pessoas jurídicas com CNPJ
- Pessoas físicas com CPF
- Diferentes organizações
Exemplo de uso em testes:
import { companyResponseMock } from "@/__mocks__/company.mock";
// Mock da API
const apiMock = {
get: jest.fn(async () => ({
status: 200,
data: companyResponseMock,
})),
};
const service = new CompanyService({ apiWithoutAccessToken: apiMock });
const result = await service.fetchRemote();
expect(result).toEqual(companyResponseMock.content);