210 lines
4.8 KiB
Markdown
210 lines
4.8 KiB
Markdown
# 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)
|