DuOrigin v2 - React + NestJS + Prisma + EUDR API Integration
This commit is contained in:
209
docs/API-ROUTES.md
Normal file
209
docs/API-ROUTES.md
Normal 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)
|
||||
Reference in New Issue
Block a user