@horizon-domains/property-model
Version:
Modelo de propriedades imobiliárias v3 - Sistema de atributos dinâmicos
68 lines (53 loc) • 1.58 kB
Markdown
# Arquitetura de Datas - 3 Camadas
## 1. CRM (origem)
```
published_at → primeira publicação no CRM
updated_at → última republicação no CRM
```
## 2. Horizon Base (modelo canônico)
```
source_published_at ← published_at do CRM
source_updated_at ← updated_at do CRM
```
## 3. Web App/API (Prisma)
```
created_at → @default(now()) autogerado
updated_at → @updatedAt autogerado
first_synced_at → data da PRIMEIRA sincronização (persistente)
```
## Quando usar cada campo
### Para SINCRONIZAÇÃO
```typescript
// Comparar se imóvel precisa atualizar:
if (imovel.source_updated_at > ultimaSincronizacao) {
// Atualizar
}
```
✅ Usa data EXATA do CRM
### Para ORDENAÇÃO (quando CRM não tem data)
```typescript
// Ordenar por mais antigos:
ORDER BY first_synced_at ASC
```
✅ Persiste mesmo com delete+recreate
### Controle interno
- `created_at` e `updated_at` do Prisma = apenas audit trail
- NÃO usar para lógica de negócio
## Implementação first_synced_at
```typescript
// Primeira sincronização:
first_synced_at: first_synced_at || new Date()
// Próximas sincronizações (manter original):
first_synced_at: imovel_existente.first_synced_at
```
## Mudanças v3.12.5
### Horizon Base - REMOVIDO:
- ❌ `updated_at`
- ❌ `created_at`
- ❌ `published_at`
### Horizon Base - ADICIONADO:
- ✅ `source_published_at` (opcional)
- ✅ `source_updated_at` (opcional)
### Publisher - Espera receber do CRM:
- `published_at` → mapeia para `source_published_at`
- `updated_at` → mapeia para `source_updated_at`