README.md
This commit is contained in:
parent
edcc14d0ad
commit
f2a223b015
3 changed files with 92 additions and 1 deletions
91
README.md
91
README.md
|
|
@ -88,3 +88,94 @@ adicionar em .vscode/settings.json
|
||||||
"source.fixAll.biome": "always"
|
"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);
|
||||||
|
```
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "p-comuns",
|
"name": "p-comuns",
|
||||||
"version": "0.308.0",
|
"version": "0.309.0",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "./dist-front/index.mjs",
|
"main": "./dist-front/index.mjs",
|
||||||
"module": "./dist-front/index.mjs",
|
"module": "./dist-front/index.mjs",
|
||||||
|
|
|
||||||
BIN
pacote.tgz
BIN
pacote.tgz
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue