implementado filtro Delta
This commit is contained in:
parent
b0b76562b7
commit
4aa775266f
6 changed files with 234 additions and 5 deletions
|
|
@ -129,6 +129,44 @@ declare const extensoes: {
|
|||
*/
|
||||
declare const tipoArquivo: (nomeArquivo: string | null | undefined) => tiposArquivo;
|
||||
|
||||
/**
|
||||
* =============================================================================
|
||||
* FILTRO DELTA (zFiltroDelta)
|
||||
* =============================================================================
|
||||
*
|
||||
* OBJETIVO
|
||||
* -----------------------------------------------------------------------------
|
||||
* Novo sistema de filtros projetado para maior flexibilidade e geração segura
|
||||
* de instruções SQL dinâmicas (WHERE).
|
||||
*
|
||||
* REGRAS IMPORTANTES (PARA IA)
|
||||
* -----------------------------------------------------------------------------
|
||||
* - O filtro é composto de duas partes obrigatórias: `condicoes` e `formula`.
|
||||
* - Apenas referências aos `id`s das `condicoes` podem ser usadas na `formula`.
|
||||
* - Não use sintaxe baseada em objetos aninhados para agrupamento (ex: { E: [], OU: [] }). Use fórmulas em string.
|
||||
*
|
||||
* 1) CONDIÇÕES (`condicoes`):
|
||||
* Array de objetos contendo as definições isoladas de cada comparação.
|
||||
* Exemplo:
|
||||
* [
|
||||
* { id: "{1}", coluna: "idade", operador: ">=", valor: 18 },
|
||||
* { id: "{2}", coluna: "nome", operador: "like", valor: "%pa%" }
|
||||
* ]
|
||||
* - `id`: Deve SEMPRE seguir o formato {identificador}. Ex: `{c1}`, `{idade_min}`.
|
||||
* - `coluna`: O nome da coluna ou um path JSONB válido (ex: `veiculo.ano`).
|
||||
* - `operador`: Um dos valores do tipo `tipoOperadorFiltroDelta` (veja a constante).
|
||||
*
|
||||
* 2) FÓRMULA (`formula`):
|
||||
* String que define a expressão lógica relacionando as condições através de seus `id`s.
|
||||
* Operadores Lógicos Suportados (EM MAIÚSCULO):
|
||||
* - `E` (AND)
|
||||
* - `OU` (OR)
|
||||
* - `NAO` (NOT)
|
||||
* Suporta o agrupamento lógico usando parênteses `()`
|
||||
* Exemplo válido: "({1} E NAO({2})) OU {3}"
|
||||
*
|
||||
* =============================================================================
|
||||
*/
|
||||
/**
|
||||
* Operadores permitidos para comparação.
|
||||
*/
|
||||
|
|
@ -141,6 +179,11 @@ declare const zOperadorFiltroDelta: z.ZodEnum<{
|
|||
"<=": "<=";
|
||||
like: "like";
|
||||
in: "in";
|
||||
"\u2229": "∩";
|
||||
}>;
|
||||
declare const operadorFiltroDeltaDetalhes: Record<z.infer<typeof zOperadorFiltroDelta>, {
|
||||
rotulo: string;
|
||||
descricao: string;
|
||||
}>;
|
||||
/**
|
||||
* Coluna simples ou caminho aninhado de jsonb.
|
||||
|
|
@ -161,6 +204,7 @@ declare const zCondicaoFiltroDelta: z.ZodObject<{
|
|||
"<=": "<=";
|
||||
like: "like";
|
||||
in: "in";
|
||||
"\u2229": "∩";
|
||||
}>;
|
||||
valor: z.ZodAny;
|
||||
}, z.core.$strip>;
|
||||
|
|
@ -180,6 +224,7 @@ declare const zFiltroDelta: z.ZodObject<{
|
|||
"<=": "<=";
|
||||
like: "like";
|
||||
in: "in";
|
||||
"\u2229": "∩";
|
||||
}>;
|
||||
valor: z.ZodAny;
|
||||
}, z.core.$strip>>;
|
||||
|
|
@ -189,6 +234,33 @@ type tipoOperadorFiltroDelta = z.infer<typeof zOperadorFiltroDelta>;
|
|||
type tipoColunaFiltroDelta = z.infer<typeof zColunaFiltroDelta>;
|
||||
type tipoCondicaoFiltroDelta = z.infer<typeof zCondicaoFiltroDelta>;
|
||||
type tipoFiltroDelta = z.infer<typeof zFiltroDelta>;
|
||||
type tipoFiltroDeltaColunaTipada<T extends string> = {
|
||||
condicoes: (tipoCondicaoFiltroDelta & {
|
||||
coluna: T;
|
||||
})[];
|
||||
formula: string;
|
||||
};
|
||||
/**
|
||||
* Fábrica para criar filtros com colunas estritamente tipadas.
|
||||
* Útil para autocompletar os nomes das colunas e garantir a estrutura no TypeScript.
|
||||
*
|
||||
* @example
|
||||
* ```ts
|
||||
* const { criarFiltroDelta } = iniciarFiltroDelta<"nome" | "idade" | "jsonb.propriedade">()
|
||||
*
|
||||
* const filtro = criarFiltroDelta({
|
||||
* condicoes: [
|
||||
* { id: "{c1}", coluna: "idade", operador: ">", valor: 18 },
|
||||
* { id: "{c2}", coluna: "nome", operador: "=", valor: "luiz" },
|
||||
* { id: "{c3}", coluna: "jsonb.propriedade", operador: "=", valor: "valor" },
|
||||
* ],
|
||||
* formula: "({c1} E {c2}) OU {c3}",
|
||||
* })
|
||||
* ```
|
||||
*/
|
||||
declare const iniciarFiltroDelta: <TColunas extends string>() => {
|
||||
criarFiltroDelta: (filtro: tipoFiltroDeltaColunaTipada<TColunas>) => tipoFiltroDeltaColunaTipada<TColunas>;
|
||||
};
|
||||
|
||||
/**
|
||||
* LocalStorage Tipado
|
||||
|
|
@ -402,4 +474,4 @@ declare const nomeVariavel: (v: {
|
|||
[key: string]: any;
|
||||
}) => string;
|
||||
|
||||
export { Produtos, TipagemRotas, type TipoPayloadAuditoria, aleatorio, cacheM, cacheMFixo, cacheMemoria, camposComuns, erUuid, esperar, extensoes, type interfaceConsulta, link_paiol, localValor, nomeVariavel, objetoPg, operadores, paraObjetoRegistroPg, pgObjeto, siglas_unidades_medida, texto_busca, tipoArquivo, type tipoColunaFiltroDelta, type tipoCondicaoFiltroDelta, type tipoFiltro, type tipoFiltroDelta, type tipoOperadorFiltroDelta, tipoUsuarioResiduos, tiposSituacoesElicencie, tx, umaFuncao, umaVariavel, unidades_medida, uuid, uuidV3, uuidV4, uuid_null, validarUuid, verCacheM, zColunaFiltroDelta, zCondicaoFiltroDelta, zFiltro, zFiltroDelta, zOperadorFiltroDelta, zOperadores };
|
||||
export { Produtos, TipagemRotas, type TipoPayloadAuditoria, aleatorio, cacheM, cacheMFixo, cacheMemoria, camposComuns, erUuid, esperar, extensoes, iniciarFiltroDelta, type interfaceConsulta, link_paiol, localValor, nomeVariavel, objetoPg, operadorFiltroDeltaDetalhes, operadores, paraObjetoRegistroPg, pgObjeto, siglas_unidades_medida, texto_busca, tipoArquivo, type tipoColunaFiltroDelta, type tipoCondicaoFiltroDelta, type tipoFiltro, type tipoFiltroDelta, type tipoFiltroDeltaColunaTipada, type tipoOperadorFiltroDelta, tipoUsuarioResiduos, tiposSituacoesElicencie, tx, umaFuncao, umaVariavel, unidades_medida, uuid, uuidV3, uuidV4, uuid_null, validarUuid, verCacheM, zColunaFiltroDelta, zCondicaoFiltroDelta, zFiltro, zFiltroDelta, zOperadorFiltroDelta, zOperadores };
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
Loading…
Add table
Add a link
Reference in a new issue