UNPKG

@horizon-modules/property-model-v3

Version:

Modelo de propriedades imobiliárias v3 - Sistema de atributos dinâmicos

291 lines (259 loc) 8.98 kB
# 🔧 Configuração de Desenvolvimento - Property Model V3 ## 📁 Estrutura de Diretórios Target ``` property-model-v3/ ├── __dev__/ # 🚧 CRIAR │ ├── data/ # 🚧 CRIAR │ │ ├── arbo-downloads/ # Dados reais convertidos do Arbo │ │ ├── fake-data-output/ # Dados fake gerados │ │ ├── mock-output/ # Mocks para testes │ │ └── profiling-report.json # Análise estatística │ ├── scripts/ # 🚧 CRIAR │ │ ├── download-from-arbo.ts # Baixa e converte do Arbo │ │ ├── profile-properties.ts # Faz profiling │ │ ├── generate-fake-data.ts # Gera dados fake │ │ └── generate-mocks.ts # Gera mocks │ ├── services/ # 🚧 CRIAR │ │ ├── ArboDownloaderService.ts │ │ ├── ProfilerService.ts │ │ ├── FakeDataGeneratorService.ts │ │ └── MockGeneratorService.ts │ └── tests/ # 🚧 CRIAR │ ├── arboDownloaderService.test.ts │ ├── profilerService.test.ts │ ├── fakeDataGeneratorService.test.ts │ └── mockGeneratorService.test.ts ├── docs/ # ✅ EXISTE │ ├── REFATORACAO_PROPERTY_MODEL_V3.md │ ├── CHECKLIST_IMPLEMENTACAO.md │ └── CONFIGURACAO_DEV.md ├── src/ # ✅ EXISTE (modificar) │ ├── data/ # 🚧 CRIAR │ │ ├── fake-data/ # Dados fake selecionados │ │ ├── examples/ # Exemplos reais │ │ └── profiling/ # Dados de profiling │ ├── fake-data-generator/ # ✅ EXISTE (modificar) │ ├── custom-mapper/ # ✅ EXISTE │ ├── models/ # ✅ EXISTE │ └── tests/ # ✅ EXISTE (modificar) └── ❌ assets/ (REMOVIDO) ``` ## 🔗 Dependências Necessárias ### **package.json alterações** ```json { "dependencies": { "@horizon-modules/arbo-crm-integration": "^2.0.1", "ramda": "^0.30.0", "zod": "^3.25.67" }, "devDependencies": { "@types/ramda": "^0.30.0", "tsup": "^8.0.0", "typescript": "^5.0.0", "tsx": "^4.0.0", "vitest": "^1.0.0" }, "scripts": { "build": "tsup", "dev": "tsup --watch", "test": "vitest", "test:coverage": "vitest --coverage", "typecheck": "tsc --noEmit", // 🚧 NOVOS SCRIPTS DEV "dev:download": "tsx __dev__/scripts/download-from-arbo.ts", "dev:profile": "tsx __dev__/scripts/profile-properties.ts", "dev:fake": "tsx __dev__/scripts/generate-fake-data.ts", "dev:mocks": "tsx __dev__/scripts/generate-mocks.ts", "dev:all": "npm run dev:download && npm run dev:profile && npm run dev:fake && npm run dev:mocks", "dev:test": "vitest __dev__/tests/ --run" }, "files": [ "dist", "docs" ] } ``` ## 🖼️ URLs do Unsplash (Substituindo assets locais) ### **Categorias de Imagens** ```typescript const UNSPLASH_IMAGES = { apartamento: [ "https://images.unsplash.com/photo-1502672260266-1c1ef2d93688?w=800&q=80", "https://images.unsplash.com/photo-1522708323590-d24dbb6b0267?w=800&q=80", "https://images.unsplash.com/photo-1560448204-e02f11c3d0e2?w=800&q=80", "https://images.unsplash.com/photo-1565183997392-2f6f122e5912?w=800&q=80" ], casa: [ "https://images.unsplash.com/photo-1512917774080-9991f1c4c750?w=800&q=80", "https://images.unsplash.com/photo-1568605114967-8130f3a36994?w=800&q=80", "https://images.unsplash.com/photo-1570129477492-45c003edd2be?w=800&q=80", "https://images.unsplash.com/photo-1583608205776-bfd35f0d9f83?w=800&q=80" ], comercial: [ "https://images.unsplash.com/photo-1497366216548-37526070297c?w=800&q=80", "https://images.unsplash.com/photo-1524758631624-e2822e304c36?w=800&q=80", "https://images.unsplash.com/photo-1462826303086-329426d1aef5?w=800&q=80", "https://images.unsplash.com/photo-1497366811353-6870744d04b2?w=800&q=80" ], terreno: [ "https://images.unsplash.com/photo-1500382017468-9049fed747ef?w=800&q=80", "https://images.unsplash.com/photo-1416331108676-a22ccb276e35?w=800&q=80", "https://images.unsplash.com/photo-1564013799919-ab600027ffc6?w=800&q=80", "https://images.unsplash.com/photo-1448630360428-65456885c650?w=800&q=80" ], interior: [ "https://images.unsplash.com/photo-1556909114-f6e7ad7d3136?w=800&q=80", "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=800&q=80", "https://images.unsplash.com/photo-1555041469-a586c61ea9bc?w=800&q=80" ] } ``` ## ⚙️ Configurações dos Serviços ### **ArboDownloaderService Config** ```typescript interface ArboDownloadConfig { startPage: number // 1 endPage: number // 5 perPage: number // 50 outputDir: string // "__dev__/data/arbo-downloads" convertToPropertyModel: boolean // true validateWithZod: boolean // true } ``` ### **ProfilerService Config** ```typescript interface ProfilerConfig { inputDir: string // "__dev__/data/arbo-downloads" outputFile: string // "__dev__/data/profiling-report.json" fieldConfigs: { [fieldName: string]: { maxExamples: number // Quantos exemplos por campo } } defaultMaxExamples: number // 10 } ``` ### **FakeDataGeneratorService Config** ```typescript interface FakeDataConfig { profilePath: string // "__dev__/data/profiling-report.json" outputDir: string // "__dev__/data/fake-data-output" counts: { apartamentos: number // 25 casas: number // 20 comerciais: number // 15 terrenos: number // 10 } useUnsplash: boolean // true validateWithZod: boolean // true } ``` ### **MockGeneratorService Config** ```typescript interface MockConfig { profilePath: string // "__dev__/data/profiling-report.json" outputDir: string // "__dev__/data/mock-output" validCount: number // 10 problematicCount: number // 5 validateWithZod: boolean // true (só para válidos) } ``` ## 🗂️ Formato dos Dados ### **Profiling Report** ```json { "tipo": ["Casa", "Apartamento", "Terreno", "Comercial"], "operacao": [["venda"], ["locacao"], ["venda", "locacao"]], "dormitorios": [1, 2, 3, 4, 5], "valor_venda": [200000, 350000, 500000, 750000], "endereco_cidade": ["São Paulo", "Rio de Janeiro", "Curitiba"], "endereco_estado": ["SP", "RJ", "PR"], // ... mais campos } ``` ### **PropertyModel Fake Data** ```json { "reference": "FAKE_CASA_001", "title": "Casa em Pinheiros - 3 dorms, 150m²", "description": "Excelente casa em localização privilegiada...", "attributes": { "tipo": "Casa", "operacao": ["venda"], "dormitorios": 3, "valor_venda": 850000, "endereco_cidade": "São Paulo" // ... outros atributos }, "media_assets": { "images": [ { "full": "https://images.unsplash.com/photo-1512917774080-9991f1c4c750?w=800&q=80", "md": "https://images.unsplash.com/photo-1512917774080-9991f1c4c750?w=640&q=80", "sm": "https://images.unsplash.com/photo-1512917774080-9991f1c4c750?w=320&q=80", "cover": true } ], "videos": [], "virtual_tours": [], "documents": [] }, "settings": { "currency_unit": "BRL", "area_unit": "m2", "exibir_no_mapa": true }, "updated_at": "2025-07-08T20:30:00.000Z" } ``` ## 🔧 .gitignore Atualizações ```gitignore # Development data (não commitar dados baixados) __dev__/data/arbo-downloads/ __dev__/data/fake-data-output/ __dev__/data/mock-output/ __dev__/data/profiling-report.json # Manter estrutura mas não dados !__dev__/data/.gitkeep !__dev__/data/*/ !__dev__/data/*/.gitkeep # Logs __dev__/logs/ ``` ## 🎯 Casos de Uso Principais ### **1. Desenvolvedor quer dados fake para testar** ```bash # Gerar dados fake rapidamente npm run dev:fake # Dados ficam em __dev__/data/fake-data-output/ ``` ### **2. Desenvolvedor quer dados reais para análise** ```bash # Baixar dados reais do Arbo e converter npm run dev:download # Dados ficam em __dev__/data/arbo-downloads/ ``` ### **3. Desenvolvedor quer criar mocks para testes** ```bash # Gerar mocks baseados em profiling npm run dev:mocks # Mocks ficam em __dev__/data/mock-output/ ``` ### **4. Pipeline completo de dados** ```bash # Executar pipeline completo npm run dev:all # 1. Baixa dados do Arbo # 2. Faz profiling # 3. Gera dados fake # 4. Gera mocks ``` ### **5. Testar nova implementação** ```bash # Rodar testes dos serviços de dev npm run dev:test # Todos os testes usam pastas temporárias ``` --- *Configuração atualizada em: 2025-07-08*