6.6 KiB
6.6 KiB
🔗 Integração Frontend ↔ Backend
✅ Status: 100% Compatível com Backend
O frontend foi totalmente integrado com o backend Spring Boot, usando parâmetros da Guiné-Bissau.
📋 Mapeamento de Tipos
Agent (Agente)
| Frontend (TypeScript) | Backend (Java DTO) | Tipo | Obrigatório |
|---|---|---|---|
id |
id |
UUID/String | ✅ |
matricula |
matricula |
String | ✅ |
nationalId |
nationalId |
String | ✅ |
fullName |
fullName |
String | ✅ |
birthDate |
birthDate |
LocalDate (YYYY-MM-DD) | ✅ |
hireDate |
hireDate |
LocalDate (YYYY-MM-DD) | ✅ |
terminationDate |
terminationDate |
LocalDate (YYYY-MM-DD) | ❌ |
status |
status |
String (ACTIVE/INACTIVE/SUSPENDED/TERMINATED) | ✅ |
orgUnit |
orgUnit |
UUID | ❌ |
position |
position |
UUID | ❌ |
nationality |
nationality |
String | ❌ |
phone |
phone |
String | ❌ |
email |
email |
String | ❌ |
address |
address |
String | ❌ |
🔌 Endpoints da API
AgentController (/api/rh/agents)
| Método | Endpoint | Descrição | Frontend |
|---|---|---|---|
GET |
/api/rh/agents |
Listar com paginação | ✅ useAgents() |
GET |
/api/rh/agents/{id} |
Buscar por ID | ✅ getAgentById() |
POST |
/api/rh/agents |
Criar agente | ✅ createAgent() |
PUT |
/api/rh/agents/{id} |
Atualizar agente | ✅ updateAgent() |
Parâmetros de Paginação
O backend aceita os seguintes parâmetros de query:
page(int, default: 0) - Página atual (0-indexed)size(int, default: 20) - Tamanho da páginasortBy(String, opcional) - Campo para ordenaçãosortDirection(String, default: "ASC") - Direção da ordenação (ASC/DESC)
Resposta do Backend (Spring Data Page):
{
"content": [...],
"totalElements": 100,
"totalPages": 5,
"size": 20,
"number": 0,
"first": true,
"last": false,
"numberOfElements": 20,
"empty": false
}
🇬🇼 Configuração para Guiné-Bissau
Backend (application.yml)
guinea-bissau:
country:
code: GW
name: Guiné-Bissau
currency:
code: XOF
symbol: FCFA
timezone: Africa/Bissau
locale: pt_GW
phone-code: "+245"
date-format: "dd/MM/yyyy"
datetime-format: "dd/MM/yyyy HH:mm"
Frontend (src/utils/locale.ts)
export const LOCALE_CONFIG = {
country: 'Guiné-Bissau',
countryCode: 'GW',
currency: 'XOF',
currencySymbol: 'FCFA',
timezone: 'Africa/Bissau',
locale: 'pt-GW',
dateFormat: 'DD/MM/YYYY',
dateTimeFormat: 'DD/MM/YYYY HH:mm',
phoneCode: '+245',
};
Funções de Formatação
formatCurrency(value: number)- Formata valores em XOF (FCFA)formatDate(date: Date | string)- Formata datas DD/MM/YYYYformatDateTime(date: Date | string)- Formata data e horaformatPhone(phone: string)- Formata telefone +245 XXX XXX XXXformatLocalDate(dateString: string)- Converte LocalDate (YYYY-MM-DD) para formato de exibição
🛠️ Serviço de API
Arquivo: src/services/api.ts
- Base URL:
http://localhost:8081/api(configurável via env) - Interceptor de autenticação (JWT token)
- Tratamento de erros HTTP
- Método
getPage()para paginação Spring Data
Exemplo de Uso
import { api } from '@/services/api';
import { AgentDTO } from '@/types/backend';
// Listar agentes com paginação
const response = await api.getPage<AgentDTO>('/rh/agents', {
page: 0,
size: 20,
sortBy: 'fullName',
sortDirection: 'ASC',
});
// Buscar agente por ID
const agent = await api.get<AgentDTO>('/rh/agents/{id}');
// Criar agente
const newAgent = await api.post<AgentDTO>('/rh/agents', agentData);
// Atualizar agente
const updated = await api.put<AgentDTO>(`/rh/agents/${id}`, agentData);
// Excluir agente
await api.delete(`/rh/agents/${id}`);
🎣 Hooks Personalizados
useAgents()
Hook que gerencia o estado dos agentes com integração completa ao backend:
const {
agents, // Lista de agentes
loading, // Estado de carregamento
error, // Erro, se houver
page, // Página atual
totalPages, // Total de páginas
totalElements, // Total de elementos
refetch, // Função para recarregar
setPage, // Função para mudar página
createAgent, // Criar agente
updateAgent, // Atualizar agente
getAgentById, // Buscar por ID
deleteAgent, // Excluir agente
} = useAgents({
page: 0,
size: 20,
sortBy: 'fullName',
sortDirection: 'ASC',
});
useAgent(id: string)
Hook para buscar um agente específico:
const { agent, loading, error } = useAgent('agent-id');
📝 Formato de Dados
Datas
- Backend:
LocalDate(Java) serializado comoYYYY-MM-DD(ISO 8601) - Frontend: Recebe como string
YYYY-MM-DD, exibe comoDD/MM/YYYY
Status
- Backend: Strings:
"ACTIVE","INACTIVE","SUSPENDED","TERMINATED" - Frontend: Mapeado para badges visuais
UUIDs
- Backend:
java.util.UUID - Frontend:
string(TypeScript)
⚙️ Configuração
Variáveis de Ambiente
Crie um arquivo .env:
VITE_API_URL=http://localhost:8081/api
VITE_LOCALE=pt-GW
VITE_TIMEZONE=Africa/Bissau
VITE_CURRENCY=XOF
Proxy de Desenvolvimento
O vite.config.ts está configurado para fazer proxy das requisições /api para http://localhost:8081.
✅ Checklist de Compatibilidade
- Tipos TypeScript correspondem aos DTOs Java
- Endpoints corretos (
/api/rh/agents) - Paginação Spring Data implementada
- Validações frontend correspondem ao backend
- Formato de datas (YYYY-MM-DD ↔ DD/MM/YYYY)
- Status mapeados corretamente
- UUIDs tratados como strings
- Tratamento de erros HTTP
- Interceptor de autenticação preparado
- Configuração para Guiné-Bissau (XOF, pt-GW, Africa/Bissau)
🧪 Testes de Integração
Para testar a integração:
-
Iniciar o backend:
cd sigefp-api mvn spring-boot:run -
Iniciar o frontend:
cd sigefp-frontend npm install npm run dev -
Testar endpoints:
- Listar agentes:
GET http://localhost:8081/api/rh/agents - Criar agente:
POST http://localhost:8081/api/rh/agents - Atualizar agente:
PUT http://localhost:8081/api/rh/agents/{id} - Buscar agente:
GET http://localhost:8081/api/rh/agents/{id}
- Listar agentes:
Status: ✅ 100% Integrado e Compatível
Localização: ✅ Configurado para Guiné-Bissau
Última atualização: Dezembro 2024