update: filter in registrationfee

This commit is contained in:
wayanrivan
2026-04-20 10:07:15 +07:00
parent e34ccc0cde
commit 787ca4ad25
2 changed files with 27 additions and 8 deletions

View File

@ -15,7 +15,7 @@ const log: Logger<ILogObj> = 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 };