This commit is contained in:
wayanrivan
2026-04-22 11:27:12 +07:00
parent 898649045c
commit 2b13632d8d
2 changed files with 62 additions and 40 deletions

View File

@ -18,15 +18,15 @@ const log: Logger<ILogObj> = new Logger({
export class ReferenceRangeController { export class ReferenceRangeController {
static async list(req: Request, res: Response, next: NextFunction): Promise<void | Response> { static async list(req: Request, res: Response, next: NextFunction): Promise<void | Response> {
/* /*
#swagger.tags = ['Reference Range'] #swagger.tags = ['Reference Range']
#swagger.security = [{ "bearerAuth": [] }] #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['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['limit'] = { in: 'query', required: true, type: 'number' }
#swagger.parameters['page'] = { 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['with_deleted'] = { in: 'query', required: true, type: 'boolean' }
#swagger.parameters['order_field'] = { in: 'query', required: true, type: 'string' } #swagger.parameters['order_field'] = { in: 'query', required: true, type: 'string' }
#swagger.parameters['order_direction'] = { in: 'query', required: true, schema: { '@enum': ['ASC', 'DESC'] } } #swagger.parameters['order_direction'] = { in: 'query', required: true, schema: { '@enum': ['ASC', 'DESC'] } }
*/ */
try { try {
const schema = Joi.object().keys({ const schema = Joi.object().keys({
filter: Joi.string().allow("").optional().label("Filter"), filter: Joi.string().allow("").optional().label("Filter"),
@ -89,10 +89,10 @@ export class ReferenceRangeController {
static async create(req: Request, res: Response, next: NextFunction): Promise<void | Response> { static async create(req: Request, res: Response, next: NextFunction): Promise<void | Response> {
/* /*
#swagger.tags = ['Reference Range'] #swagger.tags = ['Reference Range']
#swagger.security = [{ "bearerAuth": [] }] #swagger.security = [{ "bearerAuth": [] }]
#swagger.requestBody = { required: true, content: { "application/json": { schema: { $ref: "#/components/schemas/referenceRange" } } } } #swagger.requestBody = { required: true, content: { "application/json": { schema: { $ref: "#/components/schemas/referenceRange" } } } }
*/ */
const queryRunner = OrmHelper.DB.createQueryRunner(); const queryRunner = OrmHelper.DB.createQueryRunner();
await queryRunner.startTransaction(); await queryRunner.startTransaction();
try { try {
@ -133,36 +133,53 @@ export class ReferenceRangeController {
static async detail(req: Request, res: Response, next: NextFunction): Promise<void | Response> { static async detail(req: Request, res: Response, next: NextFunction): Promise<void | Response> {
/* /*
#swagger.tags = ['Reference Range'] #swagger.tags = ['Reference Range']
#swagger.security = [{ "bearerAuth": [] }] #swagger.security = [{ "bearerAuth": [] }]
#swagger.parameters['id'] = { in: 'path', type: 'string' } #swagger.parameters['id'] = { in: 'path', type: 'string' }
*/ */
try { try {
const schema = Joi.object().keys({ const schema = Joi.object().keys({
id: Joi.string().uuid().required().label("Reference Range Id"), 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) { } catch (e: unknown) {
log.error(e); log.error(e);
const err = e as Error; 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<void | Response> { static async update(req: Request, res: Response, next: NextFunction): Promise<void | Response> {
/* /*
#swagger.tags = ['Reference Range'] #swagger.tags = ['Reference Range']
#swagger.security = [{ "bearerAuth": [] }] #swagger.security = [{ "bearerAuth": [] }]
#swagger.parameters['id'] = { in: 'path', type: 'string' } #swagger.parameters['id'] = { in: 'path', type: 'string' }
#swagger.requestBody = { required: true, content: { "application/json": { schema: { $ref: "#/components/schemas/referenceRange" } } } } #swagger.requestBody = { required: true, content: { "application/json": { schema: { $ref: "#/components/schemas/referenceRange" } } } }
*/ */
const queryRunner = OrmHelper.DB.createQueryRunner(); const queryRunner = OrmHelper.DB.createQueryRunner();
await queryRunner.startTransaction(); await queryRunner.startTransaction();
@ -209,11 +226,11 @@ export class ReferenceRangeController {
static async delete(req: Request, res: Response, next: NextFunction): Promise<Response> { static async delete(req: Request, res: Response, next: NextFunction): Promise<Response> {
/* /*
#swagger.tags = ['Reference Range'] #swagger.tags = ['Reference Range']
#swagger.security = [{ "bearerAuth": [] }] #swagger.security = [{ "bearerAuth": [] }]
#swagger.parameters['id'] = { in: 'path', required: true, type: 'string' } #swagger.parameters['id'] = { in: 'path', required: true, type: 'string' }
#swagger.parameters['hard'] = { in: 'path', description: 'Is Hard Delete', required: false, type: 'boolean' } #swagger.parameters['hard'] = { in: 'path', description: 'Is Hard Delete', required: false, type: 'boolean' }
*/ */
try { try {
const schema = Joi.object().keys({ const schema = Joi.object().keys({
id: Joi.string().uuid().required().label("ID"), id: Joi.string().uuid().required().label("ID"),
@ -251,10 +268,10 @@ export class ReferenceRangeController {
static async restore(req: Request, res: Response, next: NextFunction): Promise<Response> { static async restore(req: Request, res: Response, next: NextFunction): Promise<Response> {
/* /*
#swagger.tags = ['Reference Range'] #swagger.tags = ['Reference Range']
#swagger.security = [{ "bearerAuth": [] }] #swagger.security = [{ "bearerAuth": [] }]
#swagger.parameters['id'] = { in: 'path', required: true, type: 'string' } #swagger.parameters['id'] = { in: 'path', required: true, type: 'string' }
*/ */
try { try {
const schema = Joi.object().keys({ const schema = Joi.object().keys({
id: Joi.string().uuid().required().label("ID"), id: Joi.string().uuid().required().label("ID"),

View File

@ -1,8 +1,6 @@
import { ReferenceRange } from "entity"; import { ReferenceRange } from "entity";
import { SelectQueryBuilder } from "typeorm"; import { SelectQueryBuilder } from "typeorm";
import CommonHelper from "../helpers/common";
import { OrmHelper } from "../helpers/orm"; import { OrmHelper } from "../helpers/orm";
import { ILogObj, Logger } from "tslog";
export class ReferenceRangeModel { export class ReferenceRangeModel {
static async list(filter: Record<string, any> = {}): Promise<SelectQueryBuilder<any>> { static async list(filter: Record<string, any> = {}): Promise<SelectQueryBuilder<any>> {
@ -13,10 +11,17 @@ export class ReferenceRangeModel {
if (filter && Object.keys(filter).length > 0) { if (filter && Object.keys(filter).length > 0) {
Object.entries(filter).forEach(([key, value]) => { Object.entries(filter).forEach(([key, value]) => {
if (value !== undefined && value !== null && 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; return query;
} }
} }