From 787ca4ad25dbc7a72e2a381fd94a248ec374ef2c Mon Sep 17 00:00:00 2001 From: wayanrivan Date: Mon, 20 Apr 2026 10:07:15 +0700 Subject: [PATCH] update: filter in registrationfee --- src/controllers/registrationfee.ts | 31 ++++++++++++++++++++++++------ src/controllers/user_to_room.ts | 4 ++-- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/controllers/registrationfee.ts b/src/controllers/registrationfee.ts index fc8a524..44243c5 100644 --- a/src/controllers/registrationfee.ts +++ b/src/controllers/registrationfee.ts @@ -15,7 +15,7 @@ const log: Logger = new Logger({ }); const RegistrationFeeCreateAndUpdateSchema = { - service: Joi.array().items(Joi.string().allow(null,"").uuid()).optional().label("Service"), + service: Joi.array().items(Joi.string().allow(null, "").uuid()).optional().label("Service"), type: Joi.string().valid("emergency", "outpatient").required().label("Type"), }; @@ -24,15 +24,23 @@ export class RegistrationFeeController { /* #swagger.tags = ['Registration Fee'] #swagger.security = [{ "bearerAuth": [] }] + #swagger.parameters['filter'] = { description: '', in: 'query', type: 'string' } */ try { - const result = await OrmHelper.DB.getRepository(RegistrationFee) + const schema = Joi.object().keys({ + filter: Joi.string().allow("").optional().label("Filter"), + }); + + const param = await schema.validateAsync(req.query); + const filter = param.filter && param.filter !== "" ? JSON.parse(param.filter) : {}; + + const query = OrmHelper.DB.getRepository(RegistrationFee) .createQueryBuilder("RegistrationFee") .leftJoinAndMapMany( - "RegistrationFee.services", // ← property yang akan diisi + "RegistrationFee.services", Service, "service", - "service.id::text = ANY(RegistrationFee.service)" // ← join langsung ke kolom array + "service.id::text = ANY(RegistrationFee.service)" ) .select([ "RegistrationFee.id", @@ -42,8 +50,19 @@ export class RegistrationFeeController { "RegistrationFee.updated_at", "service.id", "service.name", - ]) - .getMany(); + ]); + + // ── Filter RegistrationFee.type ─────────────────────────────────── + if (filter.type && filter.type !== "") { + query.andWhere("RegistrationFee.type = :type", { type: filter.type }); + } + + // ── Filter service.name ─────────────────────────────────────────── + if (filter.service_name && filter.service_name !== "") { + query.andWhere("service.name ILIKE :service_name", { service_name: `%${filter.service_name}%` }); + } + + const result = await query.getMany(); if (!result || result.length === 0) throw { message: "Registration Fee " + Language.lang.failed_not_found }; diff --git a/src/controllers/user_to_room.ts b/src/controllers/user_to_room.ts index c664194..bcf6fc4 100644 --- a/src/controllers/user_to_room.ts +++ b/src/controllers/user_to_room.ts @@ -374,12 +374,12 @@ export class UserToRoomController { .where("user = :userId", { userId: param.user_id }) .execute(); - let relation: UserToRoom; + let relation: UserToRoom | any; for (const roomId of param.room_ids) { relation = new UserToRoom(); relation.user = await userRepo.findOneBy({ id: param.user_id }); relation.room = await roomRepo.findOneBy({ id: roomId }); - relation.created_by = req.auth.data.name; + relation.created_by = req.auth?.data.name; await userToRoomRepo.save(relation); }