update room_services controller
This commit is contained in:
@ -24,13 +24,18 @@ export class RoomServicesController {
|
|||||||
/*
|
/*
|
||||||
#swagger.tags = ['Room Services']
|
#swagger.tags = ['Room Services']
|
||||||
#swagger.security = [{ "bearerAuth": [] }]
|
#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['limit'] = { in: 'query', required: true, type: 'number' }
|
||||||
#swagger.parameters['page'] = { 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_field'] = { in: 'query', required: true, type: 'string' }
|
||||||
#swagger.parameters['order_direction'] = { in: 'query', required: true, schema: { '@enum': ['ASC', 'DESC'] } }
|
#swagger.parameters['order_direction'] = { in: 'query', required: true, schema: { '@enum': ['ASC', 'DESC'] } }
|
||||||
*/
|
*/
|
||||||
try {
|
try {
|
||||||
const schema = Joi.object().keys({
|
const schema = Joi.object().keys({
|
||||||
filter: Joi.string().allow("").optional().label("Filter"),
|
filter: Joi.string().allow("").optional().label("Filter"),
|
||||||
@ -44,8 +49,10 @@ export class RoomServicesController {
|
|||||||
let param: Paging = await schema.validateAsync(req.query);
|
let param: Paging = await schema.validateAsync(req.query);
|
||||||
let filter = param.filter && param.filter !== "" ? JSON.parse(param.filter) : {};
|
let filter = param.filter && param.filter !== "" ? JSON.parse(param.filter) : {};
|
||||||
const filterAny = filter.any && filter.any !== "" ? String(filter.any) : "";
|
const filterAny = filter.any && filter.any !== "" ? String(filter.any) : "";
|
||||||
|
const departmentName = filter?.department_name ?? null; // ← tambah
|
||||||
let filterObj = { ...filter } as any;
|
let filterObj = { ...filter } as any;
|
||||||
delete filterObj.any;
|
delete filterObj.any;
|
||||||
|
delete filterObj.department_name; // ← tambah
|
||||||
|
|
||||||
// Get total count of rooms
|
// Get total count of rooms
|
||||||
const query = await RoomServicesModel.listByRoom(filterObj, param.with_deleted);
|
const query = await RoomServicesModel.listByRoom(filterObj, param.with_deleted);
|
||||||
@ -53,6 +60,12 @@ export class RoomServicesController {
|
|||||||
const anyVal = filterAny.includes("%") ? filterAny : `%${filterAny}%`;
|
const anyVal = filterAny.includes("%") ? filterAny : `%${filterAny}%`;
|
||||||
query.andWhere("(Room.code ILIKE :any OR Room.room ILIKE :any)", { any: anyVal });
|
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();
|
const total_count_data = await query.getCount();
|
||||||
|
|
||||||
// Get all rooms with services
|
// Get all rooms with services
|
||||||
|
|||||||
Reference in New Issue
Block a user