From f3ecf8801bf04f88a3a182959c50f8ce0e3ea08e Mon Sep 17 00:00:00 2001 From: wayanrivan Date: Mon, 20 Apr 2026 10:13:32 +0700 Subject: [PATCH] update filter --- src/controllers/registrationfee.ts | 45 ++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/src/controllers/registrationfee.ts b/src/controllers/registrationfee.ts index a9a99c5..e2056c7 100644 --- a/src/controllers/registrationfee.ts +++ b/src/controllers/registrationfee.ts @@ -1,5 +1,5 @@ import { NextFunction, Response } from "express"; -import { RegistrationFee, Service } from "entity"; +import { RegistrationFee, Service,Paging } from "entity"; import { Request } from "express-jwt"; import Joi from "joi"; import { ILogObj, Logger } from "tslog"; @@ -25,14 +25,25 @@ export class RegistrationFeeController { #swagger.tags = ['Registration Fee'] #swagger.security = [{ "bearerAuth": [] }] #swagger.parameters['filter'] = { description: '', in: 'query', type: 'string' } + #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['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"), + page: Joi.number().required().min(1).label("Page"), + limit: Joi.number().required().min(1).label("Limit"), + with_deleted: Joi.bool().required().label("With Deleted"), + order_field: Joi.string().required().label("Order Field"), + order_direction: Joi.string().allow("ASC", "DESC").required().label("Order Direction"), }); - const param = await schema.validateAsync(req.query); + const param: Paging = await schema.validateAsync(req.query); const filter = param.filter && param.filter !== "" ? JSON.parse(param.filter) : {}; + const offset = (param.page - 1) * param.limit; const query = OrmHelper.DB.getRepository(RegistrationFee) .createQueryBuilder("RegistrationFee") @@ -54,23 +65,41 @@ export class RegistrationFeeController { // ── Filter RegistrationFee.type ─────────────────────────────────── if (filter.type && filter.type !== "") { - query.orWhere("RegistrationFee.type = :type", { type: filter.type }); + query.andWhere("RegistrationFee.type = :type", { type: filter.type }); } // ── Filter service.name ─────────────────────────────────────────── if (filter.service_name && filter.service_name !== "") { - query.orWhere("service.name ILIKE :service_name", { service_name: `%${filter.service_name}%` }); + query.andWhere("service.name ILIKE :service_name", { service_name: `%${filter.service_name}%` }); } - const result = await query.getMany(); + if (param.with_deleted) { + query.withDeleted(); + } - if (!result || result.length === 0) throw { message: "Registration Fee " + Language.lang.failed_not_found }; + const current_page = param.page; + const total_count_data = await query.getCount(); + const list_data = await query + .orderBy("RegistrationFee." + param.order_field, param.order_direction) + .offset(offset) + .limit(param.limit) + .getMany(); - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_view, result); + const count_data = CommonHelper.countObject(list_data); + + return ReturnHelper.successResponselist( + res, + 200, + Language.lang.success_view, + count_data, + current_page, + total_count_data, + list_data + ); } catch (e: unknown) { log.error(e); const err = e as Error; - return ReturnHelper.errorResponse(res, 400, 401, Language.lang.failed_not_found, err.message); + return ReturnHelper.errorResponse(res, 400, 401, Language.lang.failed_view, err.message); } }