UNPKG

@horizon-domains/property-model

Version:

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

161 lines (150 loc) 4.03 kB
/** * 📋 Schema Type Definitions v2.0.0 * * Tipagens TypeScript para validar estrutura dos schemas JSON * Baseado no formato Entity Schema v2.0.0 */ /** * Metadados de relação com outras entidades */ export interface RelationMetadata { /** Nome do modelo Prisma relacionado */ model: string; /** Campo de ligação (FK) */ field: string; /** Campo para exibição (label) */ labelField: string; /** Template opcional para exibição (ex: "{{name}} - {{creci}}") */ displayTemplate?: string; /** Coluna FK nesta entidade que contém o valor (para campos virtualizados) */ foreignKey?: string; } /** * Metadados de UI e apresentação */ export interface UIMetadata { /** Label de exibição do campo */ label: string; /** Descrição detalhada */ description?: string; /** Placeholder para inputs */ placeholder?: string; /** Se pode ser buscado por texto */ searchable?: boolean; /** Se pode ser filtrado */ filterable?: boolean; /** Se pode ser ordenado */ sortable?: boolean; /** Se pode ser usado em facetas */ facetable?: boolean; /** Se é visível na UI */ visible?: boolean; /** Template de exibição (ex: "{{area}} m²") */ displayTemplate?: string; /** Ícone associado */ iconName?: string; } /** * Metadados de auditoria */ export interface AuditMetadata { /** Origem do campo (ex: "hb:property", "publisher:property") */ origin: string; /** Descrição de onde o dado foi captado no CRM original (ex: "features.bedroom", "values.saleValue (REAIS)") */ source?: string; } /** * Regras de negócio e dependências */ export interface RulesMetadata { /** Condições para exibição (ex: ["operacao:venda"]) */ conditions?: string[]; /** Campo pai (dependência hierárquica) */ parent?: string; } /** * Validações do campo */ export interface ValidationRules { /** Campo obrigatório */ required?: boolean; /** Valor mínimo (números) */ min?: number; /** Valor máximo (números) */ max?: number; /** Comprimento mínimo (strings) */ minLength?: number; /** Comprimento máximo (strings) */ maxLength?: number; /** Precisão decimal */ precision?: number; /** Padrão regex */ pattern?: string; } /** * Metadados de banco de dados */ export interface DBMetadata { /** Tipo do campo no DB (ex: "varchar(255)", "decimal(10,8)") */ type?: string; /** Valor padrão */ default?: string | number | boolean; /** Se tem índice */ index?: boolean | string; // true, "gin", "fulltext", "geo" /** Se é unique */ unique?: boolean; } /** * Definição de um campo do schema */ export interface FieldSchema { /** Chave única do campo */ key: string; /** Tipo do campo (String, Number, Boolean, Json, Json[], String[], Number[], Relation) */ type: string; /** Tipo dos itens em arrays */ itemType?: string; /** Categorias do campo */ categories: string[]; /** Validações */ validation?: ValidationRules; /** Metadados de banco de dados */ db?: DBMetadata; /** Metadados de UI */ ui: UIMetadata; /** Metadados de auditoria */ audit: AuditMetadata; /** Enum de valores possíveis */ enum?: Record<string, string>; /** Formato do campo (currency, area, count, datetime, year, distance, etc) */ format?: string; /** Unidade (BRL, m2, m, etc) */ unit?: string; /** Máscara de formatação frontend (cpf, cnpj, cep, phone, email, url) */ mask?: string; /** Regras de negócio */ rules?: RulesMetadata; /** Metadados de relação (para FKs) */ relation?: RelationMetadata; } /** * Schema completo de uma entidade */ export interface EntitySchema { /** Nome da entidade */ entity: string; /** Versão do schema */ version: string; /** Descrição da entidade */ description?: string; /** Lista de campos */ fields: FieldSchema[]; } /** * Tipo auxiliar: chave de campo */ export type FieldKey = string; /** * Tipo auxiliar: mapa de campos */ export type FieldsMap = Record<FieldKey, FieldSchema>;