export interface DynamicQueryStructure { select: string[] | "*"; table: string; where?: Partial; join?: Array; orderBy?: { [key: string]: "ASC" | "DESC" }; } export type ConditionStructure = { [opt in WhereOptions]: Partial | { [column: string]: Partial }; }; export type ConditionOperation = { [op in WhereOperation]: FieldType | Array | { 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: { endsWith: "@gmail.com" }, OR: { firstname: { startsWith: "J" }, lastname: { endsWith: "K" }, }, }, }, join: [ { select: "*", table: "communication", foreignColumn: "sendNewsletter", }, ], orderBy: { firstname: "ASC", lastname: "ASC", }, };