dynamic Query typing
This commit is contained in:
parent
1d73a15227
commit
717de68f4e
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