4.8 KiB
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.
// Request
{ "email": "user@email.com", "password": "senha123" }
// Response
{ "success": true, "data": { "accessToken": "jwt...", "tokenType": "bearer" } }
POST /api/auth/registro
Registrar novo usuário.
// 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.
// 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.
{ "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.
{ "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.
{ "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.
// 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.
{
"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.
{ "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
{ "success": true, "data": { ... } }
Erro
{ "success": false, "error": "Mensagem de erro" }
Códigos de Status HTTP
200- OK201- Created400- Bad Request401- Unauthorized403- Forbidden404- Not Found500- 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 singletonsrc/lib/auth.ts- JWT helpers (createToken, verifyToken, requireAuth, requireAdmin)src/lib/password.ts- bcrypt helpers (hashPassword, verifyPassword)