feat: add full project - backend, frontend, docker, specs and configs
This commit is contained in:
parent
b77c7d5a01
commit
e6cb06255b
24489 changed files with 61341 additions and 36 deletions
94
.specify/features/007-admin-panel/contracts/boletos.md
Normal file
94
.specify/features/007-admin-panel/contracts/boletos.md
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
# Contract: Admin Boletos Endpoints
|
||||
|
||||
**Prefix:** `/api/v1/admin/boletos`
|
||||
**Auth:** JWT Bearer (admin)
|
||||
|
||||
---
|
||||
|
||||
## GET /api/v1/admin/boletos
|
||||
Lista todos os boletos.
|
||||
|
||||
### Response 200
|
||||
```json
|
||||
[
|
||||
{
|
||||
"id": "uuid",
|
||||
"user_id": "uuid",
|
||||
"property_id": "uuid",
|
||||
"description": "Aluguel Maio",
|
||||
"amount": 3500.00,
|
||||
"due_date": "2026-05-10",
|
||||
"status": "pending",
|
||||
"url": "https://boleto.banco.com.br/abc123"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## POST /api/v1/admin/boletos
|
||||
Cria um novo boleto.
|
||||
|
||||
### Request
|
||||
```json
|
||||
{
|
||||
"user_id": "uuid",
|
||||
"property_id": "uuid",
|
||||
"description": "Aluguel Maio",
|
||||
"amount": 3500.00,
|
||||
"due_date": "2026-05-10",
|
||||
"url": "https://boleto.banco.com.br/abc123"
|
||||
}
|
||||
```
|
||||
|
||||
### Response 201
|
||||
```json
|
||||
{
|
||||
"id": "uuid",
|
||||
"user_id": "uuid",
|
||||
"property_id": "uuid",
|
||||
"description": "Aluguel Maio",
|
||||
"amount": 3500.00,
|
||||
"due_date": "2026-05-10",
|
||||
"status": "pending",
|
||||
"url": "https://boleto.banco.com.br/abc123"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## PUT /api/v1/admin/boletos/:id
|
||||
Atualiza um boleto existente.
|
||||
|
||||
### Request
|
||||
```json
|
||||
{
|
||||
"user_id": "uuid",
|
||||
"property_id": "uuid",
|
||||
"description": "Aluguel Maio",
|
||||
"amount": 3500.00,
|
||||
"due_date": "2026-05-10",
|
||||
"url": "https://boleto.banco.com.br/abc123"
|
||||
}
|
||||
```
|
||||
|
||||
### Response 200
|
||||
```json
|
||||
{
|
||||
"id": "uuid",
|
||||
"user_id": "uuid",
|
||||
"property_id": "uuid",
|
||||
"description": "Aluguel Maio",
|
||||
"amount": 3500.00,
|
||||
"due_date": "2026-05-10",
|
||||
"status": "pending",
|
||||
"url": "https://boleto.banco.com.br/abc123"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## DELETE /api/v1/admin/boletos/:id
|
||||
Remove um boleto.
|
||||
|
||||
### Response 204
|
||||
77
.specify/features/007-admin-panel/contracts/clientes.md
Normal file
77
.specify/features/007-admin-panel/contracts/clientes.md
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
# Contract: Admin Clientes Endpoints
|
||||
|
||||
**Prefix:** `/api/v1/admin/client-users`
|
||||
**Auth:** JWT Bearer (admin)
|
||||
|
||||
---
|
||||
|
||||
## GET /api/v1/admin/client-users
|
||||
Lista todos os clientes.
|
||||
|
||||
### Response 200
|
||||
```json
|
||||
[
|
||||
{
|
||||
"id": "uuid",
|
||||
"name": "João",
|
||||
"email": "joao@email.com",
|
||||
"role": "client"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## POST /api/v1/admin/client-users
|
||||
Cria um novo cliente.
|
||||
|
||||
### Request
|
||||
```json
|
||||
{
|
||||
"name": "João",
|
||||
"email": "joao@email.com",
|
||||
"password": "senha123",
|
||||
"role": "client"
|
||||
}
|
||||
```
|
||||
|
||||
### Response 201
|
||||
```json
|
||||
{
|
||||
"id": "uuid",
|
||||
"name": "João",
|
||||
"email": "joao@email.com",
|
||||
"role": "client"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## PUT /api/v1/admin/client-users/:id
|
||||
Atualiza um cliente existente.
|
||||
|
||||
### Request
|
||||
```json
|
||||
{
|
||||
"name": "João",
|
||||
"email": "joao@email.com",
|
||||
"role": "client"
|
||||
}
|
||||
```
|
||||
|
||||
### Response 200
|
||||
```json
|
||||
{
|
||||
"id": "uuid",
|
||||
"name": "João",
|
||||
"email": "joao@email.com",
|
||||
"role": "client"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## DELETE /api/v1/admin/client-users/:id
|
||||
Remove um cliente.
|
||||
|
||||
### Response 204
|
||||
28
.specify/features/007-admin-panel/contracts/favoritos.md
Normal file
28
.specify/features/007-admin-panel/contracts/favoritos.md
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
# Contract: Admin Favoritos Endpoints
|
||||
|
||||
**Prefix:** `/api/v1/admin/favoritos`
|
||||
**Auth:** JWT Bearer (admin)
|
||||
|
||||
---
|
||||
|
||||
## GET /api/v1/admin/favoritos
|
||||
Lista todos os favoritos de todos os clientes.
|
||||
|
||||
### Response 200
|
||||
```json
|
||||
[
|
||||
{
|
||||
"id": "uuid",
|
||||
"user_id": "uuid",
|
||||
"property_id": "uuid",
|
||||
"created_at": "2026-04-01T12:00:00"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## DELETE /api/v1/admin/favoritos/:id
|
||||
Remove um favorito.
|
||||
|
||||
### Response 204
|
||||
81
.specify/features/007-admin-panel/contracts/properties.md
Normal file
81
.specify/features/007-admin-panel/contracts/properties.md
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
# Contract: Admin Properties Endpoints
|
||||
|
||||
**Prefix:** `/api/v1/admin/properties`
|
||||
**Auth:** JWT Bearer (admin)
|
||||
|
||||
---
|
||||
|
||||
## GET /api/v1/admin/properties
|
||||
Lista todos os imóveis cadastrados.
|
||||
|
||||
### Response 200
|
||||
```json
|
||||
[
|
||||
{
|
||||
"id": "uuid",
|
||||
"title": "Casa 1",
|
||||
"address": "Rua X, 123",
|
||||
"price": 500000.00,
|
||||
"status": "ativo"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## POST /api/v1/admin/properties
|
||||
Cria um novo imóvel.
|
||||
|
||||
### Request
|
||||
```json
|
||||
{
|
||||
"title": "Casa 1",
|
||||
"address": "Rua X, 123",
|
||||
"price": 500000.00,
|
||||
"status": "ativo"
|
||||
}
|
||||
```
|
||||
|
||||
### Response 201
|
||||
```json
|
||||
{
|
||||
"id": "uuid",
|
||||
"title": "Casa 1",
|
||||
"address": "Rua X, 123",
|
||||
"price": 500000.00,
|
||||
"status": "ativo"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## PUT /api/v1/admin/properties/:id
|
||||
Atualiza um imóvel existente.
|
||||
|
||||
### Request
|
||||
```json
|
||||
{
|
||||
"title": "Casa 1",
|
||||
"address": "Rua X, 123",
|
||||
"price": 500000.00,
|
||||
"status": "ativo"
|
||||
}
|
||||
```
|
||||
|
||||
### Response 200
|
||||
```json
|
||||
{
|
||||
"id": "uuid",
|
||||
"title": "Casa 1",
|
||||
"address": "Rua X, 123",
|
||||
"price": 500000.00,
|
||||
"status": "ativo"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## DELETE /api/v1/admin/properties/:id
|
||||
Remove um imóvel.
|
||||
|
||||
### Response 204
|
||||
86
.specify/features/007-admin-panel/contracts/visitas.md
Normal file
86
.specify/features/007-admin-panel/contracts/visitas.md
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
# Contract: Admin Visitas Endpoints
|
||||
|
||||
**Prefix:** `/api/v1/admin/visitas`
|
||||
**Auth:** JWT Bearer (admin)
|
||||
|
||||
---
|
||||
|
||||
## GET /api/v1/admin/visitas
|
||||
Lista todos os pedidos de visita.
|
||||
|
||||
### Response 200
|
||||
```json
|
||||
[
|
||||
{
|
||||
"id": "uuid",
|
||||
"user_id": "uuid",
|
||||
"property_id": "uuid",
|
||||
"message": "Gostaria de agendar uma visita",
|
||||
"status": "pending",
|
||||
"scheduled_at": "2026-05-15T14:00:00"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## POST /api/v1/admin/visitas
|
||||
Cria um novo pedido de visita.
|
||||
|
||||
### Request
|
||||
```json
|
||||
{
|
||||
"user_id": "uuid",
|
||||
"property_id": "uuid",
|
||||
"message": "Gostaria de agendar uma visita",
|
||||
"status": "pending",
|
||||
"scheduled_at": "2026-05-15T14:00:00"
|
||||
}
|
||||
```
|
||||
|
||||
### Response 201
|
||||
```json
|
||||
{
|
||||
"id": "uuid",
|
||||
"user_id": "uuid",
|
||||
"property_id": "uuid",
|
||||
"message": "Gostaria de agendar uma visita",
|
||||
"status": "pending",
|
||||
"scheduled_at": "2026-05-15T14:00:00"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## PUT /api/v1/admin/visitas/:id
|
||||
Atualiza um pedido de visita.
|
||||
|
||||
### Request
|
||||
```json
|
||||
{
|
||||
"user_id": "uuid",
|
||||
"property_id": "uuid",
|
||||
"message": "Gostaria de agendar uma visita",
|
||||
"status": "confirmed",
|
||||
"scheduled_at": "2026-05-15T14:00:00"
|
||||
}
|
||||
```
|
||||
|
||||
### Response 200
|
||||
```json
|
||||
{
|
||||
"id": "uuid",
|
||||
"user_id": "uuid",
|
||||
"property_id": "uuid",
|
||||
"message": "Gostaria de agendar uma visita",
|
||||
"status": "confirmed",
|
||||
"scheduled_at": "2026-05-15T14:00:00"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## DELETE /api/v1/admin/visitas/:id
|
||||
Remove um pedido de visita.
|
||||
|
||||
### Response 204
|
||||
28
.specify/features/007-admin-panel/plan.md
Normal file
28
.specify/features/007-admin-panel/plan.md
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
# Implementation Plan: Painel Administrativo
|
||||
|
||||
**Branch**: `007-admin-panel` | **Date**: 2026-04-13 | **Spec**: [spec.md](spec.md)
|
||||
|
||||
## Summary
|
||||
|
||||
Implementar o painel admin com CRUD completo para imóveis, clientes, boletos, visitas e favoritos. Cada entidade terá tela dedicada, formulários de criação/edição, confirmação de remoção e integração com endpoints REST protegidos.
|
||||
|
||||
## Technical Context
|
||||
- React 18, TypeScript 5.5, Tailwind CSS 3.4
|
||||
- Flask 3.x, SQLAlchemy 2.x, Pydantic v2, PyJWT
|
||||
- Endpoints REST sob `/api/v1/admin/*`
|
||||
|
||||
## Project Structure
|
||||
- `/admin/properties` — CRUD Imóveis
|
||||
- `/admin/clientes` — CRUD Clientes
|
||||
- `/admin/boletos` — CRUD Boletos
|
||||
- `/admin/visitas` — CRUD Visitas
|
||||
- `/admin/favoritos` — Visualização/remoção de favoritos
|
||||
|
||||
## UI/UX
|
||||
- Sidebar admin
|
||||
- Tabelas, formulários, modais
|
||||
- Mensagens de erro claras
|
||||
|
||||
## Security
|
||||
- Apenas admins autenticados acessam
|
||||
- JWT obrigatório
|
||||
32
.specify/features/007-admin-panel/spec.md
Normal file
32
.specify/features/007-admin-panel/spec.md
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
# Feature Specification: Painel Administrativo
|
||||
|
||||
**Feature Branch**: `007-admin-panel`
|
||||
**Created**: 2026-04-13
|
||||
**Status**: Draft
|
||||
|
||||
## Contexto
|
||||
|
||||
O painel administrativo permite que usuários com perfil admin gerenciem imóveis, clientes, boletos, visitas e favoritos. Todas as operações CRUD são protegidas por autenticação JWT e restrição de role.
|
||||
|
||||
## User Stories
|
||||
|
||||
### US1 — Admin gerencia imóveis
|
||||
**Given** um admin autenticado, **When** acessa o painel, **Then** pode criar, editar, remover e listar imóveis.
|
||||
|
||||
### US2 — Admin gerencia clientes
|
||||
**Given** um admin autenticado, **When** acessa o painel, **Then** pode criar, editar, remover e listar clientes.
|
||||
|
||||
### US3 — Admin gerencia boletos
|
||||
**Given** um admin autenticado, **When** acessa o painel, **Then** pode criar, editar, remover e listar boletos.
|
||||
|
||||
### US4 — Admin gerencia visitas
|
||||
**Given** um admin autenticado, **When** acessa o painel, **Then** pode criar, editar, remover e listar visitas.
|
||||
|
||||
### US5 — Admin gerencia favoritos
|
||||
**Given** um admin autenticado, **When** acessa o painel, **Then** pode visualizar e remover favoritos de qualquer cliente.
|
||||
|
||||
## Acceptance Criteria
|
||||
- Apenas admins autenticados acessam o painel
|
||||
- Todas as operações CRUD disponíveis para cada entidade
|
||||
- Validação e mensagens de erro amigáveis
|
||||
- UI consistente com o restante do sistema
|
||||
43
.specify/features/007-admin-panel/tasks.md
Normal file
43
.specify/features/007-admin-panel/tasks.md
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
# Tasks: Painel Administrativo
|
||||
|
||||
**Feature**: `007-admin-panel`
|
||||
**Branch**: `007-admin-panel`
|
||||
**Input**: `spec.md`, `plan.md`, `contracts/`
|
||||
**Generated**: 2026-04-13
|
||||
|
||||
---
|
||||
|
||||
|
||||
## CRUD Imóveis
|
||||
- [x] T001 Criar componente e rota de listagem de imóveis
|
||||
- [x] T002 Implementar formulário/modal de criação de imóvel
|
||||
- [x] T003 Implementar edição de imóvel
|
||||
- [x] T004 Implementar remoção de imóvel com confirmação
|
||||
|
||||
## CRUD Clientes
|
||||
- [x] T005 Criar componente e rota de listagem de clientes
|
||||
- [x] T006 Implementar formulário/modal de criação de cliente
|
||||
- [x] T007 Implementar edição de cliente
|
||||
- [x] T008 Implementar remoção de cliente com confirmação
|
||||
|
||||
## CRUD Boletos
|
||||
- [x] T009 Criar componente e rota de listagem de boletos
|
||||
- [x] T010 Implementar formulário/modal de criação de boleto
|
||||
- [x] T011 Implementar edição de boleto
|
||||
- [x] T012 Implementar remoção de boleto com confirmação
|
||||
|
||||
## CRUD Visitas
|
||||
- [x] T013 Criar componente e rota de listagem de visitas
|
||||
- [x] T014 Implementar formulário/modal de criação de visita
|
||||
- [x] T015 Implementar edição de visita
|
||||
- [x] T016 Implementar remoção de visita com confirmação
|
||||
|
||||
## Favoritos
|
||||
- [x] T017 Criar componente e rota de listagem de favoritos
|
||||
- [x] T018 Implementar remoção de favorito
|
||||
|
||||
## Segurança/Admin
|
||||
- [x] T019 Garantir proteção de rotas e autenticação admin
|
||||
|
||||
## Testes
|
||||
- [ ] T020 Testar todos os fluxos CRUD e mensagens de erro
|
||||
Loading…
Add table
Add a link
Reference in a new issue