diff --git a/README.md b/README.md index 14fc5b3..566b352 100755 --- a/README.md +++ b/README.md @@ -88,3 +88,94 @@ adicionar em .vscode/settings.json "source.fixAll.biome": "always" } } + +--- + +## ✅ Sistema de Filtros (tipoFiltro26) + +O sistema `tipoFiltro26` foi projetado para gerar automaticamente a tipagem de filtros compatíveis com operadores padrão do PostgreSQL, a partir de um tipo base `T`. + +**Principais características:** +- Tipagem forte e segura (Typescript) +- Suporte a aninhamento de objetos +- Operadores lógicos `E` (AND) e `OU` (OR) +- Validação de operadores permitidos por tipo de dado (string, number, boolean) + +### Estrutura do Filtro + +O filtro segue uma estrutura onde chaves representam campos (simples ou aninhados) e valores representam condições com operadores específicos. + +#### 1. Campos Simples +```typescript +{ + idade: { ">=": 18 } +} +``` + +#### 2. Campos Aninhados +```typescript +{ + carro: { + ano: { "=": 2020 } + } +} +``` + +#### 3. Operadores Lógicos + +**Operador E (AND):** Todos devem ser verdadeiros. +```typescript +{ + E: [ + { idade: { ">=": 18 } }, + { nome: { like: "%pa%" } } + ] +} +``` + +**Operador OU (OR):** Pelo menos um deve ser verdadeiro. +```typescript +{ + OU: [ + { idade: { "<": 18 } }, + { idade: { ">=": 60 } } + ] +} +``` + +#### 4. Exemplo Complexo Complet +```typescript +{ + idade: { ">=": 18 }, + OU: [ + { nome: { like: "%pa%" } }, + { + E: [ + { carro: { ano: { "=": 2020 } } }, + { carro: { modelo: { in: ["Civic"] } } } + ] + } + ] +} +``` + +### Operadores Suportados (`operadores26`) + +Os operadores são fornecidos pelo enum `operadores26` e são restritos pelo tipo do campo: + +* **Number**: `=`, `!=`, `>`, `>=`, `<`, `<=`, `in` +* **String**: `=`, `!=`, `like`, `in` +* **Boolean**: `=`, `!=`, `in` + +> **Nota:** Atualmente não há suporte automático para `null`, `date`, `jsonb` ou `arrays` como tipos de campo raiz (exceto arrays dentro do operador `in`). + +### Validação em Tempo de Execução (Zod) + +O sistema inclui um validador Zod `zFiltro26` para validação estrutural dos objetos de filtro recebidos (ex: via API). + +```typescript +import { zFiltro26 } from './tipoFiltro.26'; + +// Valida a estrutura (não checa existência de colunas no DB) +zFiltro26.parse(objetoFiltro); +``` diff --git a/package.json b/package.json index 06fd482..32de149 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "p-comuns", - "version": "0.308.0", + "version": "0.309.0", "description": "", "main": "./dist-front/index.mjs", "module": "./dist-front/index.mjs", diff --git a/pacote.tgz b/pacote.tgz index 2d261c0..3953da1 100644 Binary files a/pacote.tgz and b/pacote.tgz differ