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,68 @@
# Plan: Redesign da Listagem de Imóveis (Admin)
**Feature**: `008-admin-properties-redesign`
**Input**: `spec.md`, `DESIGN.md`
## Arquitetura
### Backend
- `PropertyAdminOut` estendido com `photos: list[PhotoOut]`, `city_name`, `neighborhood_name`, `code`
- `GET /api/v1/admin/properties` com query params: `?q`, `?city_id`, `?neighborhood_id`, `?page`, `?per_page`
- `GET /api/v1/admin/cities` → lista todas as cidades
- `GET /api/v1/admin/neighborhoods?city_id=` → bairros por cidade
### Frontend
- `AdminPropertiesPage.tsx` reescrita com:
- `FilterBar`: `<input>` busca + `<select>` cidade + `<select>` bairro (dependente)
- `PropertyCard`: card com carrossel de imagens, badges, dados e ações
- `Pagination`: controles prev/next com número de página
- Debounce de 350ms no input de busca
## Design Tokens Utilizados
| Elemento | Token Tailwind |
|---|---|
| Fundo da página | `bg-canvas` |
| Cards | `bg-surface border border-borderPrimary` |
| Texto principal | `text-textPrimary` |
| Texto secundário | `text-textSecondary` |
| Texto muted | `text-textTertiary` |
| Botão primário | `bg-brand hover:bg-accentHover text-white` |
| Input/Select | `bg-panel border border-borderPrimary text-textSecondary` |
| Badge status ativo | `bg-statusEmerald/10 text-statusEmerald` |
| Badge status inativo | `bg-red-500/10 text-red-400` |
## Estrutura de Dados
### `GET /admin/properties` response
```json
{
"items": [...],
"total": 25,
"page": 1,
"per_page": 12,
"pages": 3
}
```
### PropertyAdminOut (estendido)
```json
{
"id": "uuid",
"title": "Apto 3 dorms",
"address": "Rua X, 123",
"price": 450000.00,
"type": "venda",
"bedrooms": 3,
"bathrooms": 2,
"parking_spots": 1,
"area_m2": 85,
"is_active": true,
"is_featured": false,
"code": "AP001",
"city_name": "São Paulo",
"neighborhood_name": "Vila Madalena",
"photos": [
{ "url": "https://...", "alt_text": "Sala", "display_order": 0 }
]
}
```

View file

@ -0,0 +1,44 @@
# Feature Specification: Redesign da Listagem de Imóveis (Admin)
**Feature Branch**: `008-admin-properties-redesign`
**Created**: 2026-04-14
**Status**: In Progress
## Contexto
A página de listagem de imóveis do admin está com design defasado (tabela simples, sem visual system). Esta feature moderniza a interface seguindo o Design System (DESIGN.md): cards com carrossel de imagens, barra de filtros numa linha (busca por nome, filtro de cidade, filtro de bairro) e paginação.
## User Stories
### US1 — Admin filtra e busca imóveis (P1)
**Given** admin na página `/admin/properties`, **When** digita no campo de busca ou seleciona cidade/bairro, **Then** a lista atualiza em tempo real (debounce) sem reload.
**Acceptance Scenarios:**
1. **Given** lista com 30 imóveis, **When** digita "Apto", **Then** lista mostra apenas imóveis com "Apto" no título.
2. **Given** filtro com cidade selecionada, **When** seleciona bairro do dropdown dependente, **Then** lista filtra por cidade+bairro.
3. **Given** busca ativa, **When** limpa input, **Then** lista volta a mostrar todos.
### US2 — Admin navega com paginação (P1)
**Given** admin com mais de 12 imóveis, **When** a página carrega, **Then** exibe no máximo 12 cards e controles de paginação.
**Acceptance Scenarios:**
1. **Given** 25 imóveis, **When** página 1 carrega, **Then** exibe 12 cards e botão "Próxima".
2. **Given** página 2 ativa, **When** clica "Anterior", **Then** volta para página 1.
3. **Given** filtros ativos, **When** muda para próxima página, **Then** paginação respeita os filtros.
### US3 — Admin visualiza cards modernos com carrossel (P2)
**Given** imóvel com múltiplas fotos, **When** o card é renderizado, **Then** exibe carrossel com navegação por setas e indicador de posição.
**Acceptance Scenarios:**
1. **Given** imóvel com 3 fotos, **When** card renderiza, **Then** foto 1 é exibida com setas prev/next.
2. **Given** seta "next" clicada, **When** última foto ativa, **Then** volta para a primeira (loop).
3. **Given** imóvel sem fotos, **When** card renderiza, **Then** exibe placeholder com ícone de imagem.
## Acceptance Criteria Gerais
- Design 100% fiel ao DESIGN.md (tokens de cor, tipografia, bordas)
- Filtros na mesma linha horizontal (busca + cidade + bairro)
- Cards em grid: 3 colunas (lg), 2 (md), 1 (sm)
- Carrossel de imagens com loop, setas e contador "1/N"
- Paginação com previous/next e indicador de página atual
- Backend retorna fotos e metadados de cidade/bairro no payload
- Sem regressões nas funcionalidades de criar/editar/remover

View file

@ -0,0 +1,22 @@
# Tasks: Redesign da Listagem de Imóveis (Admin)
**Feature**: `008-admin-properties-redesign`
**Branch**: `008-admin-properties-redesign`
**Input**: `spec.md`, `plan.md`
**Generated**: 2026-04-14
---
## Backend
- [x] T001 Estender `PropertyAdminOut` com photos, city_name, neighborhood_name, code
- [x] T002 Adicionar paginação e filtros (q, city_id, neighborhood_id) no endpoint GET /admin/properties
- [x] T003 Adicionar endpoint GET /admin/cities
- [x] T004 Adicionar endpoint GET /admin/neighborhoods?city_id=
## Frontend
- [x] T005 Reescrever AdminPropertiesPage com FilterBar, cards grid e paginação
- [x] T006 Implementar carrossel de imagens por card com setas e contador
- [x] T007 Implementar dropdown de bairros dependente da cidade selecionada
- [x] T008 Aplicar design tokens do DESIGN.md em toda a página