From 205d44328713cc6e96c95c3b4e3cbe548472a317 Mon Sep 17 00:00:00 2001 From: wayanrivan Date: Fri, 15 May 2026 09:46:53 +0700 Subject: [PATCH] update room_services controller --- src/controllers/room_services.ts | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/controllers/room_services.ts b/src/controllers/room_services.ts index f0fc4e5..1c1ee0d 100644 --- a/src/controllers/room_services.ts +++ b/src/controllers/room_services.ts @@ -24,13 +24,18 @@ export class RoomServicesController { /* #swagger.tags = ['Room Services'] #swagger.security = [{ "bearerAuth": [] }] - #swagger.parameters['filter'] = { description: '', in: 'query', type: 'string' } + #swagger.parameters['filter'] = { + description: 'Filter data in JSON format. Available fields: Room entity fields (e.g. {\"room\": \"value\"}), {\"any\": \"value\"} for searching by Room.code or Room.room, and special field {\"department_name\": \"value\"} for filtering by department name (case-insensitive, supports partial match)', + in: 'query', + type: 'string', + example: '{\"department_name\": \"radiology\"}' + } #swagger.parameters['limit'] = { in: 'query', required: true, type: 'number' } #swagger.parameters['page'] = { in: 'query', required: true, type: 'number' } - #swagger.parameters['with_deleted'] = { in: 'query', required: true, type: 'boolean' } + #swagger.parameters['with_deleted'] = { in: 'query', required: true, type: 'boolean' } #swagger.parameters['order_field'] = { in: 'query', required: true, type: 'string' } #swagger.parameters['order_direction'] = { in: 'query', required: true, schema: { '@enum': ['ASC', 'DESC'] } } - */ + */ try { const schema = Joi.object().keys({ filter: Joi.string().allow("").optional().label("Filter"), @@ -44,8 +49,10 @@ export class RoomServicesController { let param: Paging = await schema.validateAsync(req.query); let filter = param.filter && param.filter !== "" ? JSON.parse(param.filter) : {}; const filterAny = filter.any && filter.any !== "" ? String(filter.any) : ""; + const departmentName = filter?.department_name ?? null; // ← tambah let filterObj = { ...filter } as any; delete filterObj.any; + delete filterObj.department_name; // ← tambah // Get total count of rooms const query = await RoomServicesModel.listByRoom(filterObj, param.with_deleted); @@ -53,6 +60,12 @@ export class RoomServicesController { const anyVal = filterAny.includes("%") ? filterAny : `%${filterAny}%`; query.andWhere("(Room.code ILIKE :any OR Room.room ILIKE :any)", { any: anyVal }); } + + // Filter by department name ← tambah + if (departmentName) { + query.andWhere("Department.name ILIKE :department_name", { department_name: `%${departmentName}%` }); + } + const total_count_data = await query.getCount(); // Get all rooms with services