UNPKG

@horizon-modules/property-model-v3

Version:

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

284 lines (246 loc) 8.44 kB
# Refatoração Property Model V3 - Documentação Técnica ## 📋 Entendimento do Projeto ### **Situação Atual** O `property-model-v3` possui: - Modelo PropertyModel unificado em `property-type.schema.ts` - Fake data generator básico usando imagens locais - Custom mapper com validação Zod - Dependência de assets locais (removida) - Falta de profiling e dados reais de exemplo - Estrutura de desenvolvimento incompleta ### **Estrutura do Arbo-CRM Analisada** ``` arbo-crm/ ├── __dev__/ ├── data/ ├── downloads-do-crm/ # Dados reais baixados da API ├── fake-data-output/ # Dados fake gerados ├── mock-output/ # Mocks para testes └── profiling-report.json # Análise dos dados ├── scripts/ ├── download-properties.js # Baixa dados da API ├── generate-fake-data.ts # Gera dados fake ├── generate-mocks.ts # Gera mocks └── profile-properties.js # Faz profiling ├── services/ ├── FakeDataGeneratorService.ts └── MockGeneratorService.ts └── tests/ ├── fakeDataGeneratorService.test.ts └── mockGeneratorService.test.ts └── src/ └── data/ ├── fake-data/ # Dados fake finais exportados └── mock/ # Mocks finais exportados ``` ## 🎯 Objetivo da Refatoração ### **1. Migrar para Unsplash** - Remover pasta `/src/assets` com imagens locais - Usar URLs do Unsplash como no arbo-crm - Gerar imagens fake usando Unsplash ### **2. Criar Estrutura de Desenvolvimento** ``` property-model-v3/ ├── __dev__/ ├── data/ ├── arbo-downloads/ # Dados reais do Arbo convertidos ├── fake-data-output/ # Dados fake gerados (PropertyModel) ├── mock-output/ # Mocks para testes └── profiling-report.json # Análise dos dados PropertyModel ├── scripts/ ├── download-from-arbo.ts # Baixa do arbo-crm e converte ├── generate-fake-data.ts # Gera dados fake PropertyModel ├── generate-mocks.ts # Gera mocks PropertyModel └── profile-properties.ts # Faz profiling PropertyModel ├── services/ ├── ArboDownloaderService.ts # Integra com arbo-crm ├── FakeDataGeneratorService.ts ├── MockGeneratorService.ts └── ProfilerService.ts └── tests/ ├── arboDownloaderService.test.ts ├── fakeDataGeneratorService.test.ts ├── mockGeneratorService.test.ts └── profilerService.test.ts └── src/ └── data/ ├── fake-data/ # Dados fake selecionados manualmente ├── examples/ # Exemplos reais convertidos do Arbo └── profiling/ # Dados de profiling para uso em produção ``` ### **3. Fluxo de Trabalho** 1. **Download & Conversão**: Baixar dados do arbo-crm converter para PropertyModel 2. **Profiling**: Analisar dados convertidos gerar relatório de profiling 3. **Geração Fake**: Usar profiling para gerar dados fake realistas 4. **Geração Mocks**: Criar mocks para testes baseados no profiling 5. **Seleção Manual**: Copiar dados fake selecionados para `/src/data` 6. **Export NPM**: Dados em `/src/data` são exportados no pacote ## 🔧 Tecnologias e Dependências ### **Dependências Necessárias** ```json { "dependencies": { "@horizon-modules/arbo-crm-integration": "^2.0.1", "ramda": "^0.30.0", "zod": "^3.25.67" }, "devDependencies": { "tsup": "^8.0.0", "typescript": "^5.0.0", "vitest": "^1.0.0" } } ``` ### **Integração com Arbo-CRM** - Usar `@horizon-modules/arbo-crm-integration` para baixar dados - Converter dados Arbo para PropertyModel usando `convertArboToPropertyV3` - Aplicar validação Zod para garantir conformidade ## 📝 Formato PropertyModel ### **Estrutura Final** ```typescript interface PropertyModel { reference: string title: string description: string attributes: Record<string, any> media_assets: { images: ImageMedia[] videos: VideoMedia[] virtual_tours: VirtualTourMedia[] documents: DocumentMedia[] } settings?: { currency_unit?: "BRL" | "USD" area_unit?: "m2" | "ft2" distance_unit?: "km" | "mi" | "meters" exibir_no_mapa?: boolean } updated_at?: string } ``` ### **Imagens do Unsplash** ```typescript interface ImageMedia { full: string // URL completa do Unsplash md?: string // Versão 640x480 sm?: string // Versão 320x240 cover?: boolean // Se é a imagem principal } ``` ## 🏗️ Arquitetura dos Serviços ### **ArboDownloaderService** ```typescript class ArboDownloaderService { async downloadAndConvert(options: { startPage: number endPage: number outputDir: string }): Promise<PropertyModel[]> async convertArboToPropertyModel(arboData: any): PropertyModel } ``` ### **ProfilerService** ```typescript class ProfilerService { async profileProperties(inputDir: string): Promise<ProfileResult> interface ProfileResult { [fieldName: string]: any[] // Valores únicos encontrados } } ``` ### **FakeDataGeneratorService** ```typescript class FakeDataGeneratorService { constructor(config: { profilePath?: string outputDir: string count: number useUnsplash: boolean }) async generate(): Promise<Record<string, PropertyModel[]>> } ``` ### **MockGeneratorService** ```typescript class MockGeneratorService { constructor(config: { profilePath?: string outputDir: string validCount: number problematicCount: number }) async generate(): Promise<{ valid: PropertyModel[] problematic: PropertyModel[] }> } ``` ## 📊 Fluxo de Dados ```mermaid graph TD A[Arbo CRM API] --> B[ArboDownloaderService] B --> C[__dev__/data/arbo-downloads/] C --> D[ProfilerService] D --> E[__dev__/data/profiling-report.json] E --> F[FakeDataGeneratorService] E --> G[MockGeneratorService] F --> H[__dev__/data/fake-data-output/] G --> I[__dev__/data/mock-output/] H --> J[Seleção Manual] J --> K[src/data/fake-data/] K --> L[NPM Package Export] ``` ## 🧪 Estratégia de Testes ### **Testes Isolados** - Todos os testes usam pastas temporárias - Nenhum teste escreve em `/src/data` - Cleanup automático após cada teste ### **Mock de APIs** - Testes não fazem chamadas reais para Arbo CRM - Usar dados estáticos para testes ### **Validação Zod** - Todos os dados gerados devem passar na validação - Testes verificam conformidade com PropertyModel ## 🚀 Scripts de Desenvolvimento ### **package.json scripts** ```json { "scripts": { "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" } } ``` ## 📦 Exportação NPM ### **Dados Exportados** ```typescript // src/index.ts export { fakeProperties } from "./data/fake-data" export { exampleProperties } from "./data/examples" export { profilingData } from "./data/profiling" ``` ### **Estrutura Final do Pacote** ``` dist/ ├── index.js ├── index.d.ts └── data/ ├── fake-data/ ├── examples/ └── profiling/ ``` --- ## ✅ Benefícios da Nova Arquitetura 1. **Dados Realistas**: Baseados em dados reais do Arbo CRM 2. **Profiling Inteligente**: Geração baseada em análise estatística 3. **Testes Robustos**: Isolados e com cleanup automático 4. **Desenvolvimento Eficiente**: Scripts automatizados para todas as etapas 5. **Qualidade Garantida**: Validação Zod em todos os dados gerados 6. **Flexibilidade**: Fácil atualização dos dados fake 7. **Performance**: Dados estáticos pré-gerados no NPM 8. **Manutenibilidade**: Estrutura clara e documentada --- *Documentação gerada em: 2025-07-08*