patches v1.3.5 #74

Merged
jkeffects merged 10 commits from develop into main 2025-03-12 08:52:49 +00:00
3 changed files with 35 additions and 21 deletions
Showing only changes of commit da78c17235 - Show all commits

View file

@ -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);
} }

View file

@ -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 {

View file

@ -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];
} }