update room_services controller

This commit is contained in:
wayanrivan
2026-05-15 10:24:35 +07:00
parent 205d443287
commit c0ecceb195

View File

@ -25,10 +25,10 @@ export class RoomServicesController {
#swagger.tags = ['Room Services']
#swagger.security = [{ "bearerAuth": [] }]
#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)',
description: 'Filter data in JSON format. Available fields: {\"any\": \"value\"} for searching by Room.code, Room.room, or Department.name (case-insensitive, supports partial match)',
in: 'query',
type: 'string',
example: '{\"department_name\": \"radiology\"}'
example: '{\"any\": \"radiology\"}'
}
#swagger.parameters['limit'] = { in: 'query', required: true, type: 'number' }
#swagger.parameters['page'] = { in: 'query', required: true, type: 'number' }
@ -49,21 +49,17 @@ 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);
if (filterAny !== "") {
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}%` });
query.andWhere(
"(Room.code ILIKE :any OR Room.room ILIKE :any OR Department.name ILIKE :any)",
{ any: anyVal }
);
}
const total_count_data = await query.getCount();