From 2b13632d8d1b5449ce53d94683ef176f3192bbe2 Mon Sep 17 00:00:00 2001 From: wayanrivan Date: Wed, 22 Apr 2026 11:27:12 +0700 Subject: [PATCH] update --- src/controllers/reference_range.ts | 89 ++++++++++++++++++------------ src/model/reference_range.ts | 13 +++-- 2 files changed, 62 insertions(+), 40 deletions(-) diff --git a/src/controllers/reference_range.ts b/src/controllers/reference_range.ts index 6a6c175..fda5c47 100644 --- a/src/controllers/reference_range.ts +++ b/src/controllers/reference_range.ts @@ -18,15 +18,15 @@ const log: Logger = new Logger({ export class ReferenceRangeController { static async list(req: Request, res: Response, next: NextFunction): Promise { /* - #swagger.tags = ['Reference Range'] - #swagger.security = [{ "bearerAuth": [] }] - #swagger.parameters['filter'] = { description: 'Filter: plain text or JSON object (gender, age_range_min, age_range_max, etc.)', 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 = ['Reference Range'] + #swagger.security = [{ "bearerAuth": [] }] + #swagger.parameters['filter'] = { description: 'Filter: plain text or JSON object (gender, age_range_min, age_range_max, etc.)', 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"), @@ -89,10 +89,10 @@ export class ReferenceRangeController { static async create(req: Request, res: Response, next: NextFunction): Promise { /* - #swagger.tags = ['Reference Range'] - #swagger.security = [{ "bearerAuth": [] }] - #swagger.requestBody = { required: true, content: { "application/json": { schema: { $ref: "#/components/schemas/referenceRange" } } } } - */ + #swagger.tags = ['Reference Range'] + #swagger.security = [{ "bearerAuth": [] }] + #swagger.requestBody = { required: true, content: { "application/json": { schema: { $ref: "#/components/schemas/referenceRange" } } } } + */ const queryRunner = OrmHelper.DB.createQueryRunner(); await queryRunner.startTransaction(); try { @@ -133,36 +133,53 @@ export class ReferenceRangeController { static async detail(req: Request, res: Response, next: NextFunction): Promise { /* - #swagger.tags = ['Reference Range'] - #swagger.security = [{ "bearerAuth": [] }] - #swagger.parameters['id'] = { in: 'path', type: 'string' } - */ + #swagger.tags = ['Reference Range'] + #swagger.security = [{ "bearerAuth": [] }] + #swagger.parameters['id'] = { in: 'path', type: 'string' } + */ try { const schema = Joi.object().keys({ id: Joi.string().uuid().required().label("Reference Range Id"), }); - let param: any = await schema.validateAsync(req.params); + const param: any = await schema.validateAsync(req.params); - let referenceRange = await ReferenceRangeModel.list({ "ReferenceRange.id": param.id }).then((q) => q.getOne()); + // ❗ FIX: jangan pakai "ReferenceRange.id" + const referenceRange = await ReferenceRangeModel + .list({ id: param.id }) + .then((q) => q.getOne()); - if (!referenceRange) throw { message: "Reference Range Not Found" }; + if (!referenceRange) { + throw { message: "Reference Range Not Found" }; + } - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_view, referenceRange); + return ReturnHelper.successResponseAny( + res, + 200, + Language.lang.success_view, + referenceRange + ); } 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_not_found, + err.message + ); } } static async update(req: Request, res: Response, next: NextFunction): Promise { /* - #swagger.tags = ['Reference Range'] - #swagger.security = [{ "bearerAuth": [] }] - #swagger.parameters['id'] = { in: 'path', type: 'string' } - #swagger.requestBody = { required: true, content: { "application/json": { schema: { $ref: "#/components/schemas/referenceRange" } } } } - */ + #swagger.tags = ['Reference Range'] + #swagger.security = [{ "bearerAuth": [] }] + #swagger.parameters['id'] = { in: 'path', type: 'string' } + #swagger.requestBody = { required: true, content: { "application/json": { schema: { $ref: "#/components/schemas/referenceRange" } } } } + */ const queryRunner = OrmHelper.DB.createQueryRunner(); await queryRunner.startTransaction(); @@ -209,11 +226,11 @@ export class ReferenceRangeController { static async delete(req: Request, res: Response, next: NextFunction): Promise { /* - #swagger.tags = ['Reference Range'] - #swagger.security = [{ "bearerAuth": [] }] - #swagger.parameters['id'] = { in: 'path', required: true, type: 'string' } - #swagger.parameters['hard'] = { in: 'path', description: 'Is Hard Delete', required: false, type: 'boolean' } - */ + #swagger.tags = ['Reference Range'] + #swagger.security = [{ "bearerAuth": [] }] + #swagger.parameters['id'] = { in: 'path', required: true, type: 'string' } + #swagger.parameters['hard'] = { in: 'path', description: 'Is Hard Delete', required: false, type: 'boolean' } + */ try { const schema = Joi.object().keys({ id: Joi.string().uuid().required().label("ID"), @@ -251,10 +268,10 @@ export class ReferenceRangeController { static async restore(req: Request, res: Response, next: NextFunction): Promise { /* - #swagger.tags = ['Reference Range'] - #swagger.security = [{ "bearerAuth": [] }] - #swagger.parameters['id'] = { in: 'path', required: true, type: 'string' } - */ + #swagger.tags = ['Reference Range'] + #swagger.security = [{ "bearerAuth": [] }] + #swagger.parameters['id'] = { in: 'path', required: true, type: 'string' } + */ try { const schema = Joi.object().keys({ id: Joi.string().uuid().required().label("ID"), diff --git a/src/model/reference_range.ts b/src/model/reference_range.ts index 467187c..0119ae1 100644 --- a/src/model/reference_range.ts +++ b/src/model/reference_range.ts @@ -1,8 +1,6 @@ import { ReferenceRange } from "entity"; import { SelectQueryBuilder } from "typeorm"; -import CommonHelper from "../helpers/common"; import { OrmHelper } from "../helpers/orm"; -import { ILogObj, Logger } from "tslog"; export class ReferenceRangeModel { static async list(filter: Record = {}): Promise> { @@ -13,10 +11,17 @@ export class ReferenceRangeModel { if (filter && Object.keys(filter).length > 0) { Object.entries(filter).forEach(([key, value]) => { if (value !== undefined && value !== null && value !== "") { - query.andWhere(`ReferenceRange.${key} = :${key}`, { [key]: value }); + + // 🔥 Handle kalau ada yang kirim "ReferenceRange.id" + const field = key.includes(".") ? key.split(".")[1] : key; + + query.andWhere(`ReferenceRange.${field} = :${field}`, { + [field]: value, + }); } }); } + return query; } -} +} \ No newline at end of file