change: query builder fetch all

This commit is contained in:
Julian Krauser 2025-02-16 13:32:10 +01:00
parent 7904a98d5f
commit da78c17235
3 changed files with 35 additions and 21 deletions

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

View file

@ -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<ObjectLiteral> {
public static buildQuery({
queryObj,
offset = 0,
count = 25,
noLimit = false,
}: {
queryObj?: DynamicQueryStructure;
offset?: number;
count?: number;
noLimit?: boolean;
}): SelectQueryBuilder<ObjectLiteral> {
let affix = Math.random().toString(36).substring(2);
let query = dataSource.getRepository(queryObj.table).createQueryBuilder(`${queryObj.table}_${affix}`);
this.buildDynamicQuery(query, queryObj, affix);
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 {

View file

@ -123,11 +123,10 @@ export abstract class NewsletterHelper {
let queryMemberIds: Array<string> = [];
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];
}