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,163 @@
# Data Model: Página de Política de Privacidade
**Feature**: 020-politica-de-privacidade
**Phase**: 1 — Design & Contracts
**Status**: Complete
---
## Nota sobre "Data Model" para feature 100% frontend
Esta feature não envolve entidades de banco de dados nem estado gerenciado em store. O "modelo de dados" aqui descreve a estrutura lógica do conteúdo estático e o contrato de componentes React.
---
## Entidades de Componente
### PrivacyPolicyPage
| Propriedade | Tipo | Descrição |
|---|---|---|
| — | — | Componente sem props (stateless, sem hooks) |
**Estrutura JSX**:
```
PrivacyPolicyPage
├── <Navbar />
├── <main id="main-content" className="min-h-screen bg-canvas">
│ └── <div className="max-w-[800px] mx-auto px-6 pt-16 pb-20">
│ ├── Header (label + título + data de atualização)
│ └── Seções (18)
│ └── <section> com <h2> numerado + <p>/<ul> de conteúdo
└── <Footer />
```
**Seções (hardcoded)**:
```typescript
type PolicySection = {
id: number // 18
title: string // "1. Instituição Responsável" etc.
content: ReactNode // JSX com paragrafos / listas
}
```
*Observação*: O tipo `PolicySection` NÃO precisa ser exportado nem criado como shared type — é usado somente internamente no componente. Principle VI: sem abstração prematura.
---
### Footer (atualizado)
Mudança pontual: adicionar `<Link to="/politica-de-privacidade">` no bloco `<nav>` existente.
**Estado atual do array `footerLinks`**:
```typescript
const footerLinks = [
{ label: 'Imóveis', href: '/imoveis' },
{ label: 'Sobre', href: '#sobre' },
{ label: 'Contato', href: '#contato' },
]
```
**Após a mudança** — o array `footerLinks` **não é alterado**. Um novo link `<Link>` do react-router-dom é adicionado manualmente no `<ul>` após os links existentes:
```tsx
import { Link } from 'react-router-dom'
// no <ul> dos footerLinks, após o map existente:
<li>
<Link
to="/politica-de-privacidade"
className="text-xs text-text-tertiary hover:text-text-secondary transition-colors duration-150"
>
Política de Privacidade
</Link>
</li>
```
**Rationale**: Adicionar ao array seria inconsistente (o array usa `href` para `<a>`, mas esse precisa de `<Link>`). Manter separado é mais claro e não requer refatorar o loop existente.
---
### Rota (App.tsx)
| Campo | Valor |
|---|---|
| `path` | `/politica-de-privacidade` |
| `element` | `<PrivacyPolicyPage />` |
| Posição no arquivo | Após a rota `/corretores`, antes da rota `/login` |
| Guards | Nenhum — rota pública |
---
## Conteúdo estático das seções
### Seção 1 — Instituição Responsável
Nome: `[NOME DA EMPRESA]`
CNPJ: `[CNPJ]`
Endereço: `[ENDEREÇO COMPLETO]`
*Esta empresa é a controladora dos dados pessoais tratados neste site.*
### Seção 2 — Coleta e Uso de Dados Pessoais
Dados coletados:
- Nome completo, e-mail e telefone ao preencher formulários de contato
- Dados de navegação (páginas visitadas, tempo de sessão) via cookies analíticos
- Dados fornecidos voluntariamente ao solicitar visitas a imóveis
Finalidades:
- Responder solicitações de contato e agendamento de visitas
- Melhorar a experiência de uso do site
- Enviar comunicações sobre imóveis compatíveis com o perfil do usuário (com consentimento)
### Seção 3 — Transferência de Dados Pessoais
Compartilhamento com:
- Corretores parceiros, apenas dados necessários para conduzir visitas
- Plataformas de análise de tráfego (ex.: Google Analytics) — dados anonimizados
- Não vendemos ou alugamos dados pessoais a terceiros
### Seção 4 — Uso de Cookies
Tipos de cookies utilizados:
- **Essenciais**: necessários para o funcionamento do site (autenticação, preferências)
- **Analíticos**: medem o uso do site para melhoria contínua
- O usuário pode desativar cookies analíticos nas configurações do navegador
### Seção 5 — Direitos do Usuário (LGPD)
Conforme a Lei 13.709/2018 (LGPD), o titular dos dados tem direito a:
- **Acesso**: confirmar a existência e solicitar cópia dos dados tratados
- **Correção**: atualizar dados incompletos, inexatos ou desatualizados
- **Exclusão**: solicitar a eliminação de dados desnecessários ou tratados com consentimento
- **Portabilidade**: receber seus dados em formato estruturado
- **Revogação de consentimento**: retirar o consentimento a qualquer momento
### Seção 6 — Segurança dos Dados
- Utilizamos conexões HTTPS em todo o site
- Dados sensíveis são armazenados com criptografia
- Acesso interno limitado ao pessoal autorizado
- Revisamos regularmente nossas práticas de segurança
### Seção 7 — Alterações nesta Política
Podemos atualizar esta Política periodicamente. A data de "última atualização" é exibida no topo da página. Recomendamos revisão periódica.
### Seção 8 — Contato / DPO
Para exercer seus direitos ou esclarecer dúvidas sobre o tratamento de seus dados:
E-mail do Encarregado (DPO): `[EMAIL DO DPO]`
Link exibido como `<a href="mailto:[EMAIL DO DPO]">` abrindo cliente de e-mail.
---
## Validações e regras de estado
| Regra | Implementação |
|---|---|
| Sem chamadas de API | Componente não usa `useEffect`, `useState`, nem imports de `services/` |
| Sem estado de loading | Nenhum skeleton, spinner ou estado condicional |
| Links externos abrem em nova aba | `target="_blank" rel="noopener noreferrer"` no link do e-mail DPO |