From 40609b4782c379e061517bec5a0c6f0567a5a436 Mon Sep 17 00:00:00 2001 From: avicenan Date: Mon, 4 May 2026 14:37:40 +0700 Subject: [PATCH] fix(surgery-type): searching error --- src/controllers/surgery_type.ts | 67 ++++++++++++++++++--------------- src/model/surgery_type.ts | 29 ++++++++------ 2 files changed, 54 insertions(+), 42 deletions(-) diff --git a/src/controllers/surgery_type.ts b/src/controllers/surgery_type.ts index 921e1dc..4c2d757 100644 --- a/src/controllers/surgery_type.ts +++ b/src/controllers/surgery_type.ts @@ -17,15 +17,15 @@ const log: Logger = new Logger({ export class SurgeryTypeController { static async list(req: Request, res: Response, next: NextFunction): Promise { /* - #swagger.tags = ['Surgery Type'] - #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'] } } - */ + #swagger.tags = ['Surgery Type'] + #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"), @@ -39,15 +39,20 @@ export class SurgeryTypeController { let param: Paging = await schema.validateAsync(req.query); let filter = param.filter && param.filter !== "" ? JSON.parse(param.filter) : {}; + let filterAny = filter.any && filter.any !== "" ? filter.any : ""; - var query = await SurgeryTypeModel.list(filter); + let filterObj = { ...filter } as any; + delete filterObj.any; + filterObj = { ...filterObj }; + + var query = await SurgeryTypeModel.list(filterObj, filterAny); const offset = (param.page - 1) * param.limit; let limit = param.limit; const res_count = query; const res_list = query - .orderBy("st." + param.order_field, param.order_direction) + .orderBy("SurgeryType." + param.order_field, param.order_direction) .offset(offset) .limit(limit); @@ -71,10 +76,10 @@ export class SurgeryTypeController { static async create(req: Request, res: Response, next: NextFunction): Promise { /* - #swagger.tags = ['Surgery Type'] - #swagger.security = [{ "bearerAuth": [] }] - #swagger.requestBody = { required: true, content: { "application/json": { schema: { $ref: "#/components/schemas/surgery_type" } } } } - */ + #swagger.tags = ['Surgery Type'] + #swagger.security = [{ "bearerAuth": [] }] + #swagger.requestBody = { required: true, content: { "application/json": { schema: { $ref: "#/components/schemas/surgery_type" } } } } + */ try { const schema = Joi.object().keys({ name: Joi.string().required().label("Name"), @@ -99,10 +104,10 @@ export class SurgeryTypeController { static async detail(req: Request, res: Response, next: NextFunction): Promise { /* - #swagger.tags = ['Surgery Type'] - #swagger.security = [{ "bearerAuth": [] }] - #swagger.parameters['id'] = { description: '', in: 'path', type: 'string' } - */ + #swagger.tags = ['Surgery Type'] + #swagger.security = [{ "bearerAuth": [] }] + #swagger.parameters['id'] = { description: '', in: 'path', type: 'string' } + */ try { const schema = Joi.object().keys({ id: Joi.string().uuid().required().label("Surgery Type Id"), @@ -110,7 +115,7 @@ export class SurgeryTypeController { let param: { id: string } = await schema.validateAsync(req.params); - let surgeryType = await SurgeryTypeModel.list({ "st.id": param.id }).then((q) => q.getOne()); + let surgeryType = await SurgeryTypeModel.list({ "SurgeryType.id": param.id }).then((q) => q.getOne()); if (!surgeryType) throw { message: "Surgery Type " + Language.lang.failed_not_found }; @@ -124,11 +129,11 @@ export class SurgeryTypeController { static async update(req: Request, res: Response, next: NextFunction): Promise { /* - #swagger.tags = ['Surgery Type'] - #swagger.security = [{ "bearerAuth": [] }] - #swagger.parameters['id'] = { description: '', in: 'path', type: 'string' } - #swagger.requestBody = { required: true, content: { "application/json": { schema: { $ref: "#/components/schemas/surgery_type" } } } } - */ + #swagger.tags = ['Surgery Type'] + #swagger.security = [{ "bearerAuth": [] }] + #swagger.parameters['id'] = { description: '', in: 'path', type: 'string' } + #swagger.requestBody = { required: true, content: { "application/json": { schema: { $ref: "#/components/schemas/surgery_type" } } } } + */ try { req.body.id = req.params["id"]; @@ -142,7 +147,7 @@ export class SurgeryTypeController { let exist = await SurgeryTypeModel.list({ name: param.name }).then((q) => q.getOne()); if (exist && exist.id != param.id) throw { message: "Surgery Type " + Language.lang.failed_duplicate }; - let surgeryType = await SurgeryTypeModel.list({ "st.id": param.id }).then((q) => q.getOne()); + let surgeryType = await SurgeryTypeModel.list({ "SurgeryType.id": param.id }).then((q) => q.getOne()); if (!surgeryType) throw { message: "Surgery Type " + Language.lang.failed_not_found }; @@ -159,11 +164,11 @@ export class SurgeryTypeController { static async delete(req: Request, res: Response, next: NextFunction): Promise { /* - #swagger.tags = ['Surgery Type'] - #swagger.security = [{ "bearerAuth": [] }] - #swagger.parameters['id'] = { in: 'path', required: true, type: 'string' } - #swagger.parameters['hard'] = { in: 'path', description: 'Is Hard Delete (ignored; entity has no soft delete)', required: false, type: 'boolean' } - */ + #swagger.tags = ['Surgery Type'] + #swagger.security = [{ "bearerAuth": [] }] + #swagger.parameters['id'] = { in: 'path', required: true, type: 'string' } + #swagger.parameters['hard'] = { in: 'path', description: 'Is Hard Delete (ignored; entity has no soft delete)', required: false, type: 'boolean' } + */ try { const schema = Joi.object().keys({ id: Joi.string().uuid().required().label("ID"), diff --git a/src/model/surgery_type.ts b/src/model/surgery_type.ts index 57bd3a9..0751ad1 100644 --- a/src/model/surgery_type.ts +++ b/src/model/surgery_type.ts @@ -4,22 +4,29 @@ import CommonHelper from "../helpers/common"; import { OrmHelper } from "../helpers/orm"; export class SurgeryTypeModel { - static async list(filter = {}): Promise> { + static async list(filterObj = {}, filterAny: string = ""): Promise> { const repo = OrmHelper.DB.getRepository(SurgeryType); - let whereAttr: string[] = []; + let whereAttr = []; let whereVal: any = {}; - if (filter && Object.keys(filter).length > 0) { - const normalized: Record = {}; - for (const key of Object.keys(filter)) { - const nk = key.replace(/^SurgeryType\./, "st."); - normalized[nk] = (filter as Record)[key]; + if (filterObj) { + const filterResult = CommonHelper.handleQueryFilter(filterObj); + whereAttr = [...whereAttr, ...filterResult.whereAttr]; + whereVal = { ...whereVal, ...filterResult.whereVal }; + } + if (filterAny && filterAny !== "" && filterAny !== null && filterAny !== undefined) { + const filterResult = CommonHelper.handleFilter({ + filter: JSON.stringify({ any: filterAny }), + col_any_eq: [], + col_any_like: ["name"], + }); + + if (filterResult.whereAttr && filterResult.whereAttr !== "") { + whereAttr = [...whereAttr, filterResult.whereAttr]; + whereVal = { ...whereVal, ...filterResult.whereVal }; } - const parsed = CommonHelper.handleQueryFilter(normalized, "st"); - whereAttr = [...whereAttr, ...parsed.whereAttr]; - whereVal = { ...whereVal, ...parsed.whereVal }; } - var query = repo.createQueryBuilder("st"); + var query = repo.createQueryBuilder("SurgeryType"); if (whereAttr.length != 0) { query = query.where(whereAttr.join(" and "), whereVal); }