2024-11-26 14:00:21 +00:00
|
|
|
export interface DynamicQueryStructure {
|
|
|
|
select: string[] | "*";
|
|
|
|
table: string;
|
|
|
|
where?: Partial<ConditionStructure>;
|
2024-11-27 14:01:31 +00:00
|
|
|
join?: Array<DynamicQueryStructure & { foreignColumn: string }>;
|
2024-11-26 14:00:21 +00:00
|
|
|
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: {
|
2024-11-27 14:01:31 +00:00
|
|
|
mail: { endsWith: "@gmail.com" },
|
2024-11-26 14:00:21 +00:00
|
|
|
OR: {
|
2024-11-27 14:01:31 +00:00
|
|
|
firstname: { startsWith: "J" },
|
|
|
|
lastname: { endsWith: "K" },
|
2024-11-26 14:00:21 +00:00
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
join: [
|
|
|
|
{
|
|
|
|
select: "*",
|
2024-11-27 14:01:31 +00:00
|
|
|
table: "communication",
|
|
|
|
foreignColumn: "sendNewsletter",
|
2024-11-26 14:00:21 +00:00
|
|
|
},
|
|
|
|
],
|
|
|
|
orderBy: {
|
|
|
|
firstname: "ASC",
|
|
|
|
lastname: "ASC",
|
|
|
|
},
|
|
|
|
};
|