From bc0d8cbb1088c6e8bc3a2d30c5e0c8fe41397360 Mon Sep 17 00:00:00 2001 From: Aswin Ashar Abdullah <98192542+Asharaswin@users.noreply.github.com> Date: Thu, 20 Jun 2024 17:17:11 +0700 Subject: [PATCH] fix(index) perbaikan sorting index --- .../helpers/query/default-filter.helper.ts | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/core/helpers/query/default-filter.helper.ts b/src/core/helpers/query/default-filter.helper.ts index 4f21619..017793f 100644 --- a/src/core/helpers/query/default-filter.helper.ts +++ b/src/core/helpers/query/default-filter.helper.ts @@ -23,12 +23,12 @@ export function setQueryFilterDefault( // jika searching status terdapat dalam enum, maka dia mencari specific data // ? karena jika tidak, ketika dia search "active" maka "inactive" juga ikut if (STATUS[statusData.toUpperCase()]) - qb.orWhere(`${tableName}.status = :statusData`, { + qb.orWhere(`${ tableName }.status = :statusData`, { statusData: statusData, }); else qb['orWhere']( - `${tableName}.status::text ILIKE '%${[statusData]}%'`, + `${ tableName }.status::text ILIKE '%${ [statusData] }%'`, ); }); }), @@ -85,15 +85,25 @@ export function getOrderBy( queryBuilder: SelectQueryBuilder, tableName: TABLE_NAME, ) { - let orderBy: string = `${tableName}.created_at`; + let orderBys: string[] = [`${ tableName }.created_at`]; const orderType = baseFilter.order_type ?? ORDER_TYPE.DESC; if (!!baseFilter.order_by) { - orderBy = + orderBys = baseFilter.order_by.split('.').length > 1 - ? `${baseFilter.order_by}` - : `${tableName}.${baseFilter.order_by}`; + ? [`${ baseFilter.order_by }`] + : [`${ tableName }.${ baseFilter.order_by }`]; + + if (baseFilter.order_by.split('.').length == 1 && baseFilter.order_by.split('.').pop() != 'id') { + orderBys.push(`${ tableName }.created_at`) + } } - queryBuilder.orderBy(orderBy, orderType); + for (let i = 0; i < orderBys.length; i++) { + if (i == 0) { + queryBuilder.orderBy(orderBys[i], orderType); + } else { + queryBuilder.addOrderBy(orderBys[i], orderType); + } + } }