diff --git a/src/controllers/service_fare.ts b/src/controllers/service_fare.ts index ad1e585..ea1088d 100644 --- a/src/controllers/service_fare.ts +++ b/src/controllers/service_fare.ts @@ -23,10 +23,10 @@ export class ServiceFareController { #swagger.tags = ['Service Fare'] #swagger.security = [{ "bearerAuth": [] }] #swagger.parameters['filter'] = { - description: 'Filter data in JSON format. Available fields: Service entity fields (e.g. {\"name\": \"value\"}) and special field {\"service_type_name\": \"value\"} for filtering by service type name (case-insensitive, supports partial match)', + description: 'Filter data in JSON format. Available fields: {\"any\": \"value\"} for searching by Service.name or service type name (case-insensitive, supports partial match)', in: 'query', type: 'string', - example: '{\"service_type_name\": \"express\"}' + example: '{\"any\": \"express\"}' } #swagger.parameters['limit'] = { in: 'query', required: true, type: 'number' } #swagger.parameters['page'] = { in: 'query', required: true, type: 'number' } @@ -51,11 +51,11 @@ export class ServiceFareController { const offset = (param.page - 1) * param.limit; const limit = param.limit; - // Pisahkan service_type_name dari filter sebelum masuk ke ServiceModel.list - const serviceTypeName = filter?.service_type_name ?? null; - if (filter?.service_type_name) delete filter.service_type_name; + const filterAny = filter.any && filter.any !== "" ? String(filter.any) : ""; + let filterObj = { ...filter } as any; + delete filterObj.any; - var query = await ServiceModel.list(filter); + var query = await ServiceModel.list(filterObj); const res_count = query.clone(); const res_list = query @@ -87,10 +87,10 @@ export class ServiceFareController { .skip(offset) .take(limit); - // Filter service_type_name dari subquery - if (serviceTypeName) { - res_list.andWhere('sfa.service_type_name ILIKE :service_type_name', { service_type_name: `%${serviceTypeName}%` }); - res_count.andWhere('sfa.service_type_name ILIKE :service_type_name', { service_type_name: `%${serviceTypeName}%` }); + if (filterAny !== "") { + const anyVal = filterAny.includes("%") ? filterAny : `%${filterAny}%`; + res_list.andWhere("(Service.name ILIKE :any OR sfa.service_type_name ILIKE :any)", { any: anyVal }); + res_count.andWhere("(Service.name ILIKE :any OR sfa.service_type_name ILIKE :any)", { any: anyVal }); } if (param.with_deleted) {