diff --git a/src/core/helpers/query/default-filter.helper.ts b/src/core/helpers/query/default-filter.helper.ts index 16171ed..c99ff0c 100644 --- a/src/core/helpers/query/default-filter.helper.ts +++ b/src/core/helpers/query/default-filter.helper.ts @@ -1,9 +1,9 @@ -import { SelectQueryBuilder } from 'typeorm'; +import { Brackets, SelectQueryBuilder } from 'typeorm'; import { WhereInQueryHelper } from './or-where-in-query.helpe'; import { BaseFilterEntity } from 'src/core/modules/domain/entities/base-filter.entity'; import { BetweenQueryHelper } from './between-query.helper'; import { TABLE_NAME } from 'src/core/strings/constants/table.constants'; -import { ORDER_TYPE } from 'src/core/strings/constants/base.constants'; +import { ORDER_TYPE, STATUS } from 'src/core/strings/constants/base.constants'; export function setQueryFilterDefault( queryBuilder: SelectQueryBuilder, @@ -11,14 +11,26 @@ export function setQueryFilterDefault( tableName: TABLE_NAME, ): SelectQueryBuilder { // filter berdasarkan statuses - if (!!baseFilter.statuses) - new WhereInQueryHelper( - queryBuilder, - tableName, - 'status', - baseFilter.statuses, - 'statuses', - ).getQuery(); + if (!!baseFilter.statuses) { + queryBuilder.andWhere( + new Brackets((qb) => { + baseFilter.statuses.map((status) => { + const statusData = status.includes("'") + ? status.trim().replace(/'/g, "''").replace(/\s+/g, ' ') + : status.trim().replace(/\s+/g, ' '); + + if (STATUS[statusData.toUpperCase()]) + qb.orWhere(`${tableName}.status = :statusData`, { + statusData: statusData, + }); + else + qb['orWhere']( + `${tableName}.status::text ILIKE '%${[statusData]}%'`, + ); + }); + }), + ); + } // filter berdasarkan id pembuat if (!!baseFilter.created_ids)