diff --git a/src/controller/admin/club/queryBuilderController.ts b/src/controller/admin/club/queryBuilderController.ts index 1fa4cb5..ddf1e18 100644 --- a/src/controller/admin/club/queryBuilderController.ts +++ b/src/controller/admin/club/queryBuilderController.ts @@ -36,9 +36,10 @@ export async function getTableMetaByTablename(req: Request, res: Response): Prom export async function executeQuery(req: Request, res: Response): Promise { let offset = parseInt((req.query.offset as string) ?? "0"); let count = parseInt((req.query.count as string) ?? "25"); + let noLimit = req.query.noLimit === "true"; 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); } diff --git a/src/helpers/dynamicQueryBuilder.ts b/src/helpers/dynamicQueryBuilder.ts index 1c39f80..1749016 100644 --- a/src/helpers/dynamicQueryBuilder.ts +++ b/src/helpers/dynamicQueryBuilder.ts @@ -51,18 +51,26 @@ export default abstract class DynamicQueryBuilder { return this.allowedTables.map((table) => this.getTableMeta(table)); } - public static buildQuery( - queryObj: DynamicQueryStructure, - offset: number = 0, - count: number = 25 - ): SelectQueryBuilder { + public static buildQuery({ + queryObj, + offset = 0, + count = 25, + noLimit = false, + }: { + queryObj?: DynamicQueryStructure; + offset?: number; + count?: number; + noLimit?: boolean; + }): SelectQueryBuilder { let affix = Math.random().toString(36).substring(2); let query = dataSource.getRepository(queryObj.table).createQueryBuilder(`${queryObj.table}_${affix}`); this.buildDynamicQuery(query, queryObj, affix); - query.offset(offset); - query.limit(count); + if (!noLimit) { + query.offset(offset); + query.limit(count); + } return query; } @@ -281,11 +289,17 @@ export default abstract class DynamicQueryBuilder { return flattenedResults; } - public static async executeQuery( - query: string | DynamicQueryStructure, - offset: number, - count: number - ): Promise< + public static async executeQuery({ + query = "", + offset = 0, + count = 25, + noLimit = false, + }: { + query: string | DynamicQueryStructure; + offset?: number; + count?: number; + noLimit?: boolean; + }): Promise< | { stats: "error"; sql: string; @@ -348,14 +362,14 @@ export default abstract class DynamicQueryBuilder { } } else { try { - let [rows, total] = await this.buildQuery(query, offset, count).getManyAndCount(); + let [rows, total] = await this.buildQuery({ queryObj: query, offset, count, noLimit }).getManyAndCount(); return { stats: "success", rows: this.flattenQueryResult(rows), total: total, offset: offset, - count: count, + count: noLimit ? total : count, }; } catch (error) { return { diff --git a/src/helpers/newsletterHelper.ts b/src/helpers/newsletterHelper.ts index e5e619b..15a104f 100644 --- a/src/helpers/newsletterHelper.ts +++ b/src/helpers/newsletterHelper.ts @@ -123,11 +123,10 @@ export abstract class NewsletterHelper { let queryMemberIds: Array = []; if (useQuery) { - let result = await DynamicQueryBuilder.executeQuery( - useQuery.startsWith("{") ? JSON.parse(useQuery) : useQuery, - 0, - 1000 - ); + let result = await DynamicQueryBuilder.executeQuery({ + query: useQuery.startsWith("{") ? JSON.parse(useQuery) : useQuery, + noLimit: true, + }); if (result.stats == "success") { let keys = Object.keys(result.rows?.[0] ?? {}); 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 }); - console.log(members); + return members[0]; }