DuOrigin v2 - React + NestJS + Prisma + EUDR API Integration

This commit is contained in:
2026-02-09 09:10:15 -03:00
parent cb90bad239
commit 4122dc6f3b
170 changed files with 31333 additions and 200 deletions

209
docs/API-ROUTES.md Normal file
View File

@@ -0,0 +1,209 @@
# DuOrigin v2 - API Routes
## Autenticação
Todas as rotas (exceto login/registro) requerem autenticação via JWT.
Header: `Authorization: Bearer <token>`
### 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)