This commit is contained in:
Narul Hidayah
2026-02-11 14:31:26 +07:00
parent c7a15bfe93
commit 143cf856ed
8 changed files with 628 additions and 12 deletions

View File

@ -8,6 +8,7 @@ import { ReturnHelper } from "../helpers/express/return";
import { Language } from "../langs/lang";
import { RoomModel } from "../model/room";
import { PoliModel } from "../model/poli";
import { DepartmentModel } from "../model/department";
import { OrmHelper } from "../helpers/orm";
import moment from "moment";
@ -21,7 +22,7 @@ export class RoomController {
/*
#swagger.tags = ['Room']
#swagger.security = [{ "bearerAuth": [] }]
#swagger.parameters['filter'] = { description: 'Filter: plain text or JSON object (status, code, poli_id, etc.)', in: 'query', type: 'string' }
#swagger.parameters['filter'] = { description: 'Filter: plain text or JSON object (status, code, poli_id, departmentId, 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' }
@ -47,6 +48,7 @@ export class RoomController {
const res_count = query;
const res_list = query
.leftJoinAndSelect("Room.poli", "poli")
.leftJoinAndSelect("Room.department", "department")
.orderBy("Room." + param.order_field, param.order_direction)
.offset(offset)
.limit(param.limit);
@ -82,7 +84,8 @@ export class RoomController {
room: Joi.string().max(256).required().label("Room"),
code: Joi.string().max(128).required().label("Code"),
description: Joi.string().allow("").max(512).optional().label("Description"),
poli_id: Joi.string().uuid().required().label("Poli ID"),
poli_id: Joi.string().uuid().allow("", null).optional().label("Poli ID"),
department_id: Joi.string().uuid().required().label("Department ID"),
status: Joi.string().required().label("Status"),
});
@ -91,14 +94,18 @@ export class RoomController {
let exist = await RoomModel.list({ code: param.code }).then((q) => q.getOne());
if (exist) throw { message: "Room " + Language.lang.failed_duplicate };
let poli = await PoliModel.list({ id: param.poli_id }).then((q) => q.getOne());
if (!poli) throw { message: "Poli not found" };
let department = await DepartmentModel.list({ id: param.department_id }).then((q) => q.getOne());
if (!department) throw { message: "Department not found" };
let poli = param.poli_id ? await PoliModel.list({ id: param.poli_id }).then((q) => q.getOne()) : null;
if (param.poli_id && !poli) throw { message: "Poli not found" };
let room = new Room();
room.room = param.room;
room.code = param.code;
room.description = param.description || null;
room.poli = poli;
room.poli = poli || null;
room.department = department;
room.status = param.status;
room.created_by = req.auth.data.name;
room.updated_by = req.auth.data.name;
@ -128,7 +135,7 @@ export class RoomController {
});
let param: any = await schema.validateAsync(req.params);
let room = await RoomModel.list({ "Room.id": param.id })
.then((q) => q.leftJoinAndSelect("Room.poli", "poli").getOne());
.then((q) => q.leftJoinAndSelect("Room.poli", "poli").leftJoinAndSelect("Room.department", "department").getOne());
if (!room) throw { message: "Room Not Found" };
return ReturnHelper.successResponseAny(res, 200, Language.lang.success_view, room);
} catch (e: unknown) {
@ -154,7 +161,8 @@ export class RoomController {
room: Joi.string().max(256).required().label("Room"),
code: Joi.string().max(128).required().label("Code"),
description: Joi.string().allow("").max(512).optional().label("Description"),
poli_id: Joi.string().uuid().required().label("Poli ID"),
poli_id: Joi.string().uuid().allow("", null).optional().label("Poli ID"),
department_id: Joi.string().uuid().required().label("Department ID"),
status: Joi.string().required().label("Status"),
});
let param: any = await schema.validateAsync(req.body);
@ -162,8 +170,11 @@ export class RoomController {
let exist = await RoomModel.list({ code: param.code }).then((q) => q.getOne());
if (exist && exist.id != param.id) throw { message: "Room " + Language.lang.failed_duplicate };
let poli = await PoliModel.list({ id: param.poli_id }).then((q) => q.getOne());
if (!poli) throw { message: "Poli not found" };
let department = await DepartmentModel.list({ id: param.department_id }).then((q) => q.getOne());
if (!department) throw { message: "Department not found" };
let poli = param.poli_id ? await PoliModel.list({ id: param.poli_id }).then((q) => q.getOne()) : null;
if (param.poli_id && !poli) throw { message: "Poli not found" };
let room = await RoomModel.list({ "Room.id": param.id }).then((q) => q.getOne());
if (!room) throw { message: "Room " + Language.lang.failed_not_found };
@ -171,7 +182,8 @@ export class RoomController {
room.room = param.room;
room.code = param.code;
room.description = param.description || null;
room.poli = poli;
room.poli = poli || null;
room.department = department;
room.status = param.status;
room.updated_by = req.auth.data.name;
await queryRunner.manager.save(room);