Pular para o conteúdo principal

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ágina
  • size: tamanho da página
  • dataHora: 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 Error se 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);