change: query builder fetch all
This commit is contained in:
parent
7904a98d5f
commit
da78c17235
3 changed files with 35 additions and 21 deletions
|
@ -36,9 +36,10 @@ export async function getTableMetaByTablename(req: Request, res: Response): Prom
|
||||||
export async function executeQuery(req: Request, res: Response): Promise<any> {
|
export async function executeQuery(req: Request, res: Response): Promise<any> {
|
||||||
let offset = parseInt((req.query.offset as string) ?? "0");
|
let offset = parseInt((req.query.offset as string) ?? "0");
|
||||||
let count = parseInt((req.query.count as string) ?? "25");
|
let count = parseInt((req.query.count as string) ?? "25");
|
||||||
|
let noLimit = req.query.noLimit === "true";
|
||||||
const query = req.body.query;
|
const query = req.body.query;
|
||||||
|
|
||||||
let result = await DynamicQueryBuilder.executeQuery(query, offset, count);
|
let result = await DynamicQueryBuilder.executeQuery({ query, offset, count, noLimit });
|
||||||
|
|
||||||
res.json(result);
|
res.json(result);
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,18 +51,26 @@ export default abstract class DynamicQueryBuilder {
|
||||||
return this.allowedTables.map((table) => this.getTableMeta(table));
|
return this.allowedTables.map((table) => this.getTableMeta(table));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static buildQuery(
|
public static buildQuery({
|
||||||
queryObj: DynamicQueryStructure,
|
queryObj,
|
||||||
offset: number = 0,
|
offset = 0,
|
||||||
count: number = 25
|
count = 25,
|
||||||
): SelectQueryBuilder<ObjectLiteral> {
|
noLimit = false,
|
||||||
|
}: {
|
||||||
|
queryObj?: DynamicQueryStructure;
|
||||||
|
offset?: number;
|
||||||
|
count?: number;
|
||||||
|
noLimit?: boolean;
|
||||||
|
}): SelectQueryBuilder<ObjectLiteral> {
|
||||||
let affix = Math.random().toString(36).substring(2);
|
let affix = Math.random().toString(36).substring(2);
|
||||||
let query = dataSource.getRepository(queryObj.table).createQueryBuilder(`${queryObj.table}_${affix}`);
|
let query = dataSource.getRepository(queryObj.table).createQueryBuilder(`${queryObj.table}_${affix}`);
|
||||||
|
|
||||||
this.buildDynamicQuery(query, queryObj, affix);
|
this.buildDynamicQuery(query, queryObj, affix);
|
||||||
|
|
||||||
query.offset(offset);
|
if (!noLimit) {
|
||||||
query.limit(count);
|
query.offset(offset);
|
||||||
|
query.limit(count);
|
||||||
|
}
|
||||||
|
|
||||||
return query;
|
return query;
|
||||||
}
|
}
|
||||||
|
@ -281,11 +289,17 @@ export default abstract class DynamicQueryBuilder {
|
||||||
return flattenedResults;
|
return flattenedResults;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async executeQuery(
|
public static async executeQuery({
|
||||||
query: string | DynamicQueryStructure,
|
query = "",
|
||||||
offset: number,
|
offset = 0,
|
||||||
count: number
|
count = 25,
|
||||||
): Promise<
|
noLimit = false,
|
||||||
|
}: {
|
||||||
|
query: string | DynamicQueryStructure;
|
||||||
|
offset?: number;
|
||||||
|
count?: number;
|
||||||
|
noLimit?: boolean;
|
||||||
|
}): Promise<
|
||||||
| {
|
| {
|
||||||
stats: "error";
|
stats: "error";
|
||||||
sql: string;
|
sql: string;
|
||||||
|
@ -348,14 +362,14 @@ export default abstract class DynamicQueryBuilder {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
let [rows, total] = await this.buildQuery(query, offset, count).getManyAndCount();
|
let [rows, total] = await this.buildQuery({ queryObj: query, offset, count, noLimit }).getManyAndCount();
|
||||||
|
|
||||||
return {
|
return {
|
||||||
stats: "success",
|
stats: "success",
|
||||||
rows: this.flattenQueryResult(rows),
|
rows: this.flattenQueryResult(rows),
|
||||||
total: total,
|
total: total,
|
||||||
offset: offset,
|
offset: offset,
|
||||||
count: count,
|
count: noLimit ? total : count,
|
||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -123,11 +123,10 @@ export abstract class NewsletterHelper {
|
||||||
|
|
||||||
let queryMemberIds: Array<string> = [];
|
let queryMemberIds: Array<string> = [];
|
||||||
if (useQuery) {
|
if (useQuery) {
|
||||||
let result = await DynamicQueryBuilder.executeQuery(
|
let result = await DynamicQueryBuilder.executeQuery({
|
||||||
useQuery.startsWith("{") ? JSON.parse(useQuery) : useQuery,
|
query: useQuery.startsWith("{") ? JSON.parse(useQuery) : useQuery,
|
||||||
0,
|
noLimit: true,
|
||||||
1000
|
});
|
||||||
);
|
|
||||||
if (result.stats == "success") {
|
if (result.stats == "success") {
|
||||||
let keys = Object.keys(result.rows?.[0] ?? {});
|
let keys = Object.keys(result.rows?.[0] ?? {});
|
||||||
let memberKey = keys.find((k) => k.includes("member_id"));
|
let memberKey = keys.find((k) => k.includes("member_id"));
|
||||||
|
@ -142,7 +141,7 @@ export abstract class NewsletterHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
let members = await MemberService.getAll({ noLimit: true, ids: queryMemberIds });
|
let members = await MemberService.getAll({ noLimit: true, ids: queryMemberIds });
|
||||||
console.log(members);
|
|
||||||
return members[0];
|
return members[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue