# DuOrigin v2 - API Routes ## Autenticação Todas as rotas (exceto login/registro) requerem autenticação via JWT. Header: `Authorization: Bearer ` ### POST /api/auth/login Login de usuário. ```json // Request { "email": "user@email.com", "password": "senha123" } // Response { "success": true, "data": { "accessToken": "jwt...", "tokenType": "bearer" } } ``` ### POST /api/auth/registro Registrar novo usuário. ```json // Request { "email": "user@email.com", "password": "senha123", "fullName": "Nome", "role": "operator" } // Response { "success": true, "data": { "id": 1, "email": "...", "fullName": "...", "role": "operator", "isActive": true, "createdAt": "..." } } ``` ### GET /api/auth/me Dados do usuário logado. ```json // Response { "success": true, "data": { "id": 1, "email": "...", "fullName": "...", "role": "...", "isActive": true, "createdAt": "..." } } ``` --- ## Empresas (Companies) ### GET /api/empresas Lista todas as empresas. ### POST /api/empresas Criar nova empresa. ```json { "name": "Nome", "cnpj": "12345678000190", "country": "BR", "state": "SP", "city": "São Paulo", "euOperatorId": "EU-001" } ``` ### GET /api/empresas/[id] Detalhes de uma empresa. ### PUT /api/empresas/[id] Atualizar empresa. ### DELETE /api/empresas/[id] Excluir empresa. --- ## Propriedades (Producers) ### GET /api/propriedades Lista todas as propriedades. Query: `?companyId=1` para filtrar por empresa. ### POST /api/propriedades Criar nova propriedade. ```json { "name": "Nome", "cpfCnpj": "12345678901", "companyId": 1, "state": "MT", "city": "Cuiabá", "carCode": "MT-123" } ``` ### GET /api/propriedades/[id] Detalhes de uma propriedade. ### PUT /api/propriedades/[id] Atualizar propriedade. ### DELETE /api/propriedades/[id] Excluir propriedade. --- ## Avaliações (Areas) ### GET /api/avaliacoes Lista todas as avaliações/áreas. Query: `?producerId=1` para filtrar por produtor. ### POST /api/avaliacoes Criar nova avaliação. ```json { "name": "Nome", "producerId": 1, "geojson": "{...}", "areaHa": 100.5, "biome": "Cerrado", "latCenter": -15.0, "lonCenter": -56.0 } ``` ### GET /api/avaliacoes/[id] Detalhes de uma avaliação. ### PUT /api/avaliacoes/[id] Atualizar avaliação. ### DELETE /api/avaliacoes/[id] Excluir avaliação. ### POST /api/avaliacoes/[id]/gerar-dds Gerar Due Diligence Statement para a avaliação. ```json // Request (opcional) { "notes": "Observações adicionais" } // Response { "success": true, "data": { "id": 1, "referenceNumber": "DDS-ABC123", "status": "draft", ... } } ``` --- ## Dashboard ### GET /api/dashboard/stats Estatísticas do sistema. ```json { "success": true, "data": { "totalEmpresas": 10, "totalPropriedades": 50, "totalAvaliacoes": 100, "totalLotes": 200, "totalDds": 25, "ddsByStatus": { "draft": 5, "submitted": 10, "approved": 8, "rejected": 2 }, "riskDistribution": { "low": 70, "medium": 20, "high": 8, "critical": 2 }, "recentActivity": [...] } } ``` --- ## Usuários (Admin Only) ### GET /api/usuarios Lista todos os usuários. Requer role `admin`. ### GET /api/usuarios/[id] Detalhes de um usuário. ### PUT /api/usuarios/[id] Atualizar usuário. ```json { "email": "novo@email.com", "fullName": "Novo Nome", "role": "admin", "isActive": true, "password": "novaSenha" } ``` ### DELETE /api/usuarios/[id] Excluir usuário (não pode excluir a si mesmo). --- ## Formato de Resposta Padrão ### Sucesso ```json { "success": true, "data": { ... } } ``` ### Erro ```json { "success": false, "error": "Mensagem de erro" } ``` ## Códigos de Status HTTP - `200` - OK - `201` - Created - `400` - Bad Request - `401` - Unauthorized - `403` - Forbidden - `404` - Not Found - `500` - Internal Server Error --- ## Estrutura de Arquivos ``` src/app/api/ ├── auth/ │ ├── login/route.ts # POST - Login │ ├── registro/route.ts # POST - Registro │ └── me/route.ts # GET - Dados do usuário ├── empresas/ │ ├── route.ts # GET list, POST create │ └── [id]/route.ts # GET, PUT, DELETE ├── propriedades/ │ ├── route.ts # GET list, POST create │ └── [id]/route.ts # GET, PUT, DELETE ├── avaliacoes/ │ ├── route.ts # GET list, POST create │ ├── [id]/route.ts # GET, PUT, DELETE │ └── [id]/gerar-dds/route.ts # POST - Gerar DDS ├── dashboard/ │ └── stats/route.ts # GET - Estatísticas └── usuarios/ ├── route.ts # GET list (admin) └── [id]/route.ts # GET, PUT, DELETE (admin) ``` ## Libs Auxiliares - `src/lib/prisma.ts` - Prisma Client singleton - `src/lib/auth.ts` - JWT helpers (createToken, verifyToken, requireAuth, requireAdmin) - `src/lib/password.ts` - bcrypt helpers (hashPassword, verifyPassword)