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 {
static async list(req: Request, res: Response, next: NextFunction): Promise<void | Response> {
/*
#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<void | Response> {
/*
#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<void | Response> {
/*
#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<void | Response> {
/*
#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<Response> {
/*
#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<Response> {
/*
#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"),

View File

@ -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<string, any> = {}): Promise<SelectQueryBuilder<any>> {
@ -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;
}
}
}