#5-intelligent-groups #23
1 changed files with 60 additions and 0 deletions
60
src/type/dynamicQueries.ts
Normal file
60
src/type/dynamicQueries.ts
Normal 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",
|
||||
},
|
||||
};
|
Loading…
Reference in a new issue