feat: add full project - backend, frontend, docker, specs and configs

This commit is contained in:
MatheusAlves96 2026-04-20 23:59:45 -03:00
parent b77c7d5a01
commit e6cb06255b
24489 changed files with 61341 additions and 36 deletions

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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