dynamic Query typing

This commit is contained in:
Julian Krauser 2024-11-26 15:00:21 +01:00
parent 1d73a15227
commit 717de68f4e

View file

@ -0,0 +1,60 @@
export interface DynamicQueryStructure {
select: string[] | "*";
table: string;
where?: Partial<ConditionStructure>;
join?: Array<DynamicQueryStructure>;
orderBy?: { [key: string]: "ASC" | "DESC" };
}
export type ConditionStructure = {
[opt in WhereOptions]: Partial<ConditionStructure> | { [column: string]: Partial<ConditionOperation> };
};
export type ConditionOperation = {
[op in WhereOperation]: FieldType | Array<FieldType> | { start: FieldType; end: FieldType };
};
export type FieldType = number | string | Date | boolean;
export type WhereOptions = "OR" | "AND";
export type WhereOperation =
| "eq" // Equal
| "neq" // Not equal
| "lt" // Less than
| "lte" // Less than or equal to
| "gt" // Greater than
| "gte" // Greater than or equal to
| "in" // Included in an array
| "notIn" // Not included in an array
| "contains" // Contains
| "notContains" // Does not contain
| "null" // Is null
| "notNull" // Is not null
| "between" // Is between
| "startsWith" // Starts with
| "endsWith"; // Ends with
const exampleQuery: DynamicQueryStructure = {
select: ["firstname", "lastname"],
table: "member",
where: {
AND: {
mail: { eq: 1 },
OR: {
firstname: { eq: "hi" },
lastname: { eq: "ho" },
},
},
},
join: [
{
select: "*",
table: "adress",
},
],
orderBy: {
firstname: "ASC",
lastname: "ASC",
},
};