@horizon-domains/property-model
Version:
Modelo de propriedades imobiliárias v3 - Sistema de atributos dinâmicos
225 lines (187 loc) • 7.85 kB
Markdown
# 🎨 FakeDataGenerator Project - Documentação do Estado Atual
## 📋 **Objetivo do Projeto**
Criar um serviço de geração de dados fake para propriedades imobiliárias que:
- Use o **schema base oficial** como fonte de verdade dos campos
- Permita **configuração manual** de tipos, subtipos e valores
- Gere dados **realistas e variados** para desenvolvimento e testes
- Mantenha **imagens Unsplash** dos fake data existentes
## 🏗️ **Arquitetura Definida**
### **1. Schema como Base**
- **Source**: `/src/schemas/horizon-property-schema-base.json`
- **Tipo Zod**: `HorizonPropertySchemaBaseType` (já gerado)
- **Função**: Define TODOS os campos possíveis, tipos, enums, obrigatórios
### **2. Config de Exemplos**
- **Localização**: `__dev__/configs/fake-data-examples.ts` (a criar)
- **Função**: Configuração manual de valores possíveis por campo
- **Exemplos**:
```typescript
export const fakeDataExamples = {
tipos: ["Apartamento", "Casa", "Sobrado", "Cobertura", "Terreno"],
subtipos: {
"Apartamento": ["Padrão", "Studio", "Loft", "Duplex"],
"Casa": ["Térrea", "Sobreposta", "Geminada"]
},
cidades: ["São Paulo", "Rio de Janeiro", "Belo Horizonte"],
bairros: {
"São Paulo": ["Vila Madalena", "Pinheiros", "Itaim Bibi"],
"Rio de Janeiro": ["Copacabana", "Ipanema", "Leblon"]
},
caracteristicas: ["Churrasqueira", "Piscina", "Academia", "Jardim"],
// ... mais configurações
}
```
### **3. FakeDataGenerator Service**
- **Localização**: `__dev__/services/FakeDataGenerator.ts`
- **Função**:
- Lê o schema JSON para saber os campos
- Usa config de exemplos para valores
- Gera propriedades seguindo `HorizonPropertySchemaBaseType`
- Mantém imagens Unsplash existentes
### **4. Script de Execução**
- **Localização**: `__dev__/scripts/generate-fake-properties.ts`
- **Comando**: `pnpm dev:generate-fake`
- **Função**: Executa o generator com configurações
## 🔄 **Estado Atual do Projeto**
### ✅ **Já Implementado**
1. **ObjectTransformer** movido para dev-toolkit v1.2.0
2. **Script de customização** funcionando (`pnpm dev:customize`)
3. **README atualizado** - removido serviços obsoletos
4. **Index.ts limpo** - só exporta fake-data, schemas, utils
5. **FakeDataGenerator v1** criado (mas precisa refatoração)
### 🚧 **Próximos Passos Definidos**
1. **Criar config de exemplos** (`fake-data-examples.ts`)
2. **Refatorar FakeDataGenerator** para usar schema + config
3. **Testar geração** com dados configuráveis
4. **Integrar com exportação** do pacote
## 📁 **Estrutura de Arquivos**
```
__dev__/
├── configs/
│ ├── property-customer-rules.ts ✅ (ObjectTransformer rules)
│ └── fake-data-examples.ts 🚧 (a criar - config de valores)
├── data/
│ ├── properties-demo/ ✅ (dados reais - só referência)
│ └── fake-properties-output/ ✅ (saída do generator)
├── scripts/
│ ├── customize-properties.ts ✅ (ObjectTransformer + BatchFileConverter)
│ └── generate-fake-properties.ts ✅ (executa FakeDataGenerator)
└── services/
└── FakeDataGenerator.ts 🚧 (refatorar - usar schema+config)
```
## 🎯 **Especificações Técnicas**
### **Config de Exemplos (fake-data-examples.ts)**
```typescript
export interface FakeDataExamples {
// Tipos principais
tipos: string[]
subtipos: Record<string, string[]>
// Localização
cidades: string[]
bairros: Record<string, string[]>
logradouros: string[]
// Características
caracteristicas: string[]
// Ranges numéricos
ranges: {
dormitorios: [number, number]
banheiros: [number, number]
vagas_garagem: [number, number]
area_total: [number, number]
valor_venda: [number, number]
}
// Imagens por categoria
images: {
apartamento: string[]
casa: string[]
terreno: string[]
comercial: string[]
}
}
```
### **FakeDataGenerator Refatorado**
```typescript
export class FakeDataGenerator {
private schema: any // JSON schema
private examples: FakeDataExamples // Config de exemplos
private zodType: HorizonPropertySchemaBaseType // Tipo para validação
// Métodos principais:
generateProperty(): HorizonPropertySchemaBaseType
generateByType(tipo: string): HorizonPropertySchemaBaseType
generateBatch(count: number): HorizonPropertySchemaBaseType[]
}
```
## 🎨 **Fluxo de Geração**
1. **Lê schema JSON** → sabe quais campos existem
2. **Carrega config de exemplos** → valores possíveis por campo
3. **Para cada campo do schema**:
- Se tem `enumValues` → usar enum
- Se tem config → usar valores do config
- Se tem `required: true` → garantir valor
- Se tem `type: "Number"` → usar ranges
4. **Gera combinações lógicas** (ex: Apartamento + subtipo compatível)
5. **Adiciona imagens** baseado no tipo
6. **Valida com Zod** antes de retornar
## 🚀 **Comandos Disponíveis**
```bash
# Gerar dados fake
pnpm dev:generate-fake
# Customizar propriedades existentes
pnpm dev:customize
# Gerar schemas Zod
pnpm generate:zod
```
## 📝 **Notas Importantes**
- ✅ **Dados demo** são só para **referência/entendimento**
- ✅ **Config manual** é a **fonte de verdade** dos valores
- ✅ **Schema JSON** define **estrutura** e **validações**
- ✅ **Tipo Zod** garante **type safety**
- ✅ **Imagens Unsplash** são **mantidas** dos fake data existentes
---
## 🎉 **Status**: CONCLUÍDO COM SUCESSO
**Última atualização**: 03/08/2025 - Jefferson
**Implementação**: ✅ FakeDataGenerator v2.1 atualizado com novos campos
### ✅ **Entregáveis Finalizados**
1. **FakeDataGenerator v2.1**
- Gerador baseado em schema JSON + configuração manual
- Validação com Zod garantindo type safety
- Suporte a tipos principais e subtipos
- **Atualizado com novos campos**:
- `condominio_id` → `condo_id`
- Nova geração de `condo_slug`
- `corretor_id` → `broker_id`
- Nova geração de `broker_slug`
2. **Estrutura de Tipos/Subtipos**
- **Casas/Sobrados**: Casa, Sobrado, Casa de Condomínio
- **Apartamentos**: Apartamento Padrão, Cobertura, Duplex, Triplex, Studio, Loft, Garden
- **Terrenos/Lotes**: Terreno, Lote
- **Comerciais**: Loja Comercial, Sala Comercial, Prédio Comercial, Ponto Comercial
- **Rurais**: Chácara, Sítio, Fazenda, Rancho
- **Industriais**: Galpão Industrial, Barracão, Área Industrial
3. **Exportações do Pacote**
```typescript
import {
FakeDataApartamentos,
FakeDataCasasSobrados,
FakeDataComerciais,
FakeDataIndustriais,
FakeDataRurais,
FakeDataTerrenosLotes,
FakeDataAllProperties
} from '@horizon-domains/property-model'
```
4. **Comandos Disponíveis**
- `pnpm dev:generate-fake` - Gera dados fake e copia para exportação
- `pnpm dev:customize` - Customiza propriedades existentes
- `pnpm generate:zod` - Gera schemas Zod
### 📊 **Resultados**
- 100 propriedades geradas sem erros de validação
- Dados realistas baseados em configuração manual
- Imagens Unsplash categorizadas por tipo
- Build do pacote funcionando perfeitamente
- **Novos campos adicionados**: Geração automática de slugs para condomínios e corretores
### 🔄 **Changelog v2.1 (03/08/2025)**
- ✅ Alterado `condominio_id` para `condo_id` conforme schema atualizado
- ✅ Adicionada geração automática de `condo_slug` baseada no nome do condomínio
- ✅ Alterado `corretor_id` para `broker_id` conforme schema atualizado
- ✅ Adicionada geração automática de `broker_slug` baseada no nome do corretor
- ✅ Implementadas funções `generateCondoSlug()` e `generateBrokerSlug()` para criar URLs amigáveis