sort by new query structure

This commit is contained in:
Julian Krauser 2025-04-15 10:02:15 +02:00
parent 16f6846d89
commit dbafd568dd
2 changed files with 34 additions and 17 deletions

View file

@ -62,11 +62,17 @@ export default abstract class DynamicQueryBuilder {
count?: number;
noLimit?: boolean;
}): SelectQueryBuilder<ObjectLiteral> {
let affix = Math.random().toString(36).substring(2);
let query = dataSource.getRepository(queryObj.table).createQueryBuilder(`${queryObj.table}_${affix}`);
let affix = queryObj.id;
let query = dataSource.getRepository(queryObj.table).createQueryBuilder(`${affix}_${queryObj.table}`);
this.buildDynamicQuery(query, queryObj, affix);
if (queryObj.orderBy) {
queryObj.orderBy.forEach((order) => {
query.addOrderBy(`${order.id}_${order.table}.${order.column}`, order.order);
});
}
if (!noLimit) {
query.offset(offset);
query.limit(count);
@ -78,10 +84,10 @@ export default abstract class DynamicQueryBuilder {
private static buildDynamicQuery(
query: SelectQueryBuilder<ObjectLiteral>,
queryObject: DynamicQueryStructure,
affix: string = "",
affix: string = "", // table id
depth: number = 0
): void {
const alias = queryObject.table + "_" + affix;
const alias = `${affix}_${queryObject.table}`;
let firstSelect = true;
let selects: Array<string> = [];
@ -108,18 +114,12 @@ export default abstract class DynamicQueryBuilder {
if (queryObject.join) {
for (const join of queryObject.join) {
let subaffix = Math.random().toString(36).substring(2);
query.leftJoin(`${alias}.${join.foreignColumn}`, join.table + "_" + subaffix);
let subaffix = join.id;
query.leftJoin(`${alias}.${join.foreignColumn}`, `${subaffix}_${join.table}`);
this.buildDynamicQuery(query, join, subaffix, depth + 1);
}
}
if (queryObject.orderBy) {
queryObject.orderBy.forEach((order) => {
query.addOrderBy(`${alias}.${order.column}`, order.order);
});
}
}
public static applyWhere(
@ -391,19 +391,22 @@ export default abstract class DynamicQueryBuilder {
}
const memberQuery: DynamicQueryStructure = {
id: "memberId",
select: "*",
table: "member",
orderBy: [
{ column: "lastname", order: "ASC" },
{ column: "firstname", order: "ASC" },
{ id: "memberId", depth: 0, table: "member", column: "lastname", order: "ASC" },
{ id: "memberId", depth: 0, table: "member", column: "firstname", order: "ASC" },
],
};
const memberByRunningMembershipQuery: DynamicQueryStructure = {
id: "memberId",
select: "*",
table: "member",
join: [
{
id: "membershipId",
select: "*",
table: "membership",
where: [{ structureType: "condition", concat: "_", operation: "null", column: "end", value: "" }],
@ -411,7 +414,7 @@ const memberByRunningMembershipQuery: DynamicQueryStructure = {
},
],
orderBy: [
{ column: "lastname", order: "ASC" },
{ column: "firstname", order: "ASC" },
{ id: "memberId", depth: 0, table: "member", column: "lastname", order: "ASC" },
{ id: "memberId", depth: 0, table: "member", column: "firstname", order: "ASC" },
],
};