# šŸ”— 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Ć”gina - `sortBy` (String, opcional) - Campo para ordenação - `sortDirection` (String, default: "ASC") - Direção da ordenação (ASC/DESC) **Resposta do Backend (Spring Data Page):** ```json { "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) ```yaml 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) ```typescript 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/YYYY - `formatDateTime(date: Date | string)` - Formata data e hora - `formatPhone(phone: string)` - Formata telefone +245 XXX XXX XXX - `formatLocalDate(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 ```typescript import { api } from '@/services/api'; import { AgentDTO } from '@/types/backend'; // Listar agentes com paginação const response = await api.getPage('/rh/agents', { page: 0, size: 20, sortBy: 'fullName', sortDirection: 'ASC', }); // Buscar agente por ID const agent = await api.get('/rh/agents/{id}'); // Criar agente const newAgent = await api.post('/rh/agents', agentData); // Atualizar agente const updated = await api.put(`/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: ```typescript 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: ```typescript const { agent, loading, error } = useAgent('agent-id'); ``` ## šŸ“ Formato de Dados ### Datas - **Backend**: `LocalDate` (Java) serializado como `YYYY-MM-DD` (ISO 8601) - **Frontend**: Recebe como string `YYYY-MM-DD`, exibe como `DD/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`: ```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 - [x] Tipos TypeScript correspondem aos DTOs Java - [x] Endpoints corretos (`/api/rh/agents`) - [x] Paginação Spring Data implementada - [x] ValidaƧƵes frontend correspondem ao backend - [x] Formato de datas (YYYY-MM-DD ↔ DD/MM/YYYY) - [x] Status mapeados corretamente - [x] UUIDs tratados como strings - [x] Tratamento de erros HTTP - [x] Interceptor de autenticação preparado - [x] Configuração para GuinĆ©-Bissau (XOF, pt-GW, Africa/Bissau) ## 🧪 Testes de Integração Para testar a integração: 1. **Iniciar o backend:** ```bash cd sigefp-api mvn spring-boot:run ``` 2. **Iniciar o frontend:** ```bash cd sigefp-frontend npm install npm run dev ``` 3. **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}` --- **Status:** āœ… 100% Integrado e CompatĆ­vel **Localização:** āœ… Configurado para GuinĆ©-Bissau **Última atualização:** Dezembro 2024