This commit is contained in:
Luiz Silva 2026-02-17 10:32:57 -03:00
parent fa8b8d6424
commit edcc14d0ad
6 changed files with 72 additions and 42 deletions

View file

@ -99,29 +99,35 @@ import { z } from "zod"
/* =============================================================================
OPERADORES POSTGRESQL POR TIPO
============================================================================= */
============================================================================= */
export enum operadores26 {
"=" = "=",
"!=" = "!=",
">" = ">",
">=" = ">=",
"<" = "<",
"<=" = "<=",
like = "like",
in = "in",
}
type PgOpsNumber = {
"="?: number
"!="?: number
">"?: number
">="?: number
"<"?: number
"<="?: number
in?: number[]
[K in Extract<operadores26, "=" | "!=" | ">" | ">=" | "<" | "<=">]?: number
} & {
[K in Extract<operadores26, "in">]?: number[]
}
type PgOpsString = {
"="?: string
"!="?: string
like?: string
in?: string[]
[K in Extract<operadores26, "=" | "!=" | "like">]?: string
} & {
[K in Extract<operadores26, "in">]?: string[]
}
type PgOpsBoolean = {
"="?: boolean
"!="?: boolean
in?: boolean[]
[K in Extract<operadores26, "=" | "!=">]?: boolean
} & {
[K in Extract<operadores26, "in">]?: boolean[]
}
/* =============================================================================
@ -180,7 +186,7 @@ export type tipoFiltro26<T> = FiltroCampos<T> & {
VALIDAÇÃO ESTRUTURAL (ZOD)
============================================================================= */
const zOperadores = z.enum(["=", "!=", ">", ">=", "<", "<=", "like", "in"])
const zOperadores = z.nativeEnum(operadores26)
const zValor = z.any()
const zCondicao = z.record(zOperadores, zValor)
@ -208,15 +214,17 @@ type Pessoa = {
}
const _filtro: tipoFiltro26<Pessoa> = {
idade: { ">=": 18 },
idade: { [operadores26[">="]]: 18 },
OU: [
{ nome: { like: "%pa%" } },
{ nome: { [operadores26.like]: "%pa%" } },
{
E: [
{ carro: { ano: { "=": 2020 } } },
{ carro: { modelo: { in: ["Civic", "Corolla"] } } },
{ carro: { ano: { [operadores26["="]]: 2020 } } },
{ carro: { modelo: { [operadores26.in]: ["Civic", "Corolla"] } } },
],
},
],
}
export const criarFiltro26 = <T>(filtro: tipoFiltro26<T>) => filtro