From bc4cb35f544f428a107a7d75b42efa51d3e956b1 Mon Sep 17 00:00:00 2001 From: Narul Hidayah Date: Wed, 11 Feb 2026 14:41:49 +0700 Subject: [PATCH] upd --- src/controllers/poli.ts | 232 ---------------------------------------- src/controllers/room.ts | 16 +-- src/helpers/orm.ts | 4 +- src/model/poli.ts | 24 ----- src/routes/private.ts | 8 -- src/swagger/builder.js | 5 - 6 files changed, 4 insertions(+), 285 deletions(-) delete mode 100644 src/controllers/poli.ts delete mode 100644 src/model/poli.ts diff --git a/src/controllers/poli.ts b/src/controllers/poli.ts deleted file mode 100644 index 7107517..0000000 --- a/src/controllers/poli.ts +++ /dev/null @@ -1,232 +0,0 @@ -import { Poli, Paging } from "entity"; -import { NextFunction, Response } from "express"; -import { Request } from "express-jwt"; -import Joi from "joi"; -import { ILogObj, Logger } from "tslog"; -import CommonHelper from "../helpers/common"; -import { ReturnHelper } from "../helpers/express/return"; -import { Language } from "../langs/lang"; -import { PoliModel } from "../model/poli"; -import { OrmHelper } from "../helpers/orm"; -import moment from "moment"; - -const log: Logger = new Logger({ - name: "[PoliController]", - type: "pretty", -}); - -export class PoliController { - static async list(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['Poli'] - #swagger.security = [{ "bearerAuth": [] }] - #swagger.parameters['filter'] = { description: 'Filter: plain text or JSON object (status, poli, 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"), - page: Joi.number().required().min(1).label("Page"), - limit: Joi.number().required().min(1).label("Limit"), - with_deleted: Joi.bool().required().label("With Deleted"), - order_field: Joi.string().required().label("Order Field"), - order_direction: Joi.string().allow("asc", "desc").required().label("Order Direction"), - }); - - let param: Paging = await schema.validateAsync(req.query); - let filter = JSON.parse(param.filter); - var query = await PoliModel.list(filter); - - const offset = (param.page - 1) * param.limit; - const res_count = query; - const res_list = query - .orderBy("Poli." + param.order_field, param.order_direction) - .offset(offset) - .limit(param.limit); - - if (param.with_deleted) { - res_count.withDeleted(); - res_list.withDeleted(); - } - - const current_page = param.page; - const total_count_data = await res_count.getCount(); - const list_data = await res_list.getMany(); - const count_data = CommonHelper.countObject(list_data); - - return ReturnHelper.successResponselist(res, 200, Language.lang.success_view, count_data, current_page, total_count_data, list_data); - } catch (e: unknown) { - log.error(e); - const err = e as Error; - return ReturnHelper.errorResponse(res, 400, 401, Language.lang.failed_view, err.message); - } - } - - static async create(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['Poli'] - #swagger.security = [{ "bearerAuth": [] }] - #swagger.requestBody = { required: true, content: { "application/json": { schema: { $ref: "#/components/schemas/poli" } } } } - */ - const queryRunner = OrmHelper.DB.createQueryRunner(); - await queryRunner.startTransaction(); - try { - const schema = Joi.object().keys({ - poli: Joi.string().max(256).required().label("Poli"), - status: Joi.string().required().label("Status"), - }); - - let param: any = await schema.validateAsync(req.body); - - let exist = await PoliModel.list({ poli: param.poli }).then((q) => q.getOne()); - if (exist) throw { message: "Poli " + Language.lang.failed_duplicate }; - - let poli = new Poli(); - poli.poli = param.poli; - poli.status = param.status; - poli.created_by = req.auth.data.name; - poli.updated_by = req.auth.data.name; - await queryRunner.manager.save(poli); - - await queryRunner.commitTransaction(); - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_insert, poli); - } catch (e: unknown) { - await queryRunner.rollbackTransaction(); - log.error(e); - const err = e as Error; - return ReturnHelper.errorResponse(res, 400, 401, Language.lang.failed_view, err.message); - } finally { - await queryRunner.release(); - } - } - - static async detail(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['Poli'] - #swagger.security = [{ "bearerAuth": [] }] - #swagger.parameters['id'] = { in: 'path', type: 'string' } - */ - try { - const schema = Joi.object().keys({ - id: Joi.string().uuid().required().label("Poli Id"), - }); - let param: any = await schema.validateAsync(req.params); - let poli = await PoliModel.list({ id: param.id }).then((q) => q.getOne()); - if (!poli) throw { message: "Poli Not Found" }; - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_view, poli); - } catch (e: unknown) { - log.error(e); - const err = e as Error; - 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 = ['Poli'] - #swagger.security = [{ "bearerAuth": [] }] - #swagger.parameters['id'] = { in: 'path', type: 'string' } - #swagger.requestBody = { required: true, content: { "application/json": { schema: { $ref: "#/components/schemas/poli" } } } } - */ - const queryRunner = OrmHelper.DB.createQueryRunner(); - await queryRunner.startTransaction(); - try { - req.body.id = req.params["id"]; - const schema = Joi.object().keys({ - id: Joi.string().uuid().required().label("Poli ID"), - poli: Joi.string().max(256).required().label("Poli"), - status: Joi.string().required().label("Status"), - }); - let param: any = await schema.validateAsync(req.body); - - let exist = await PoliModel.list({ poli: param.poli }).then((q) => q.getOne()); - if (exist && exist.id != param.id) throw { message: "Poli " + Language.lang.failed_duplicate }; - - let poli = await PoliModel.list({ id: param.id }).then((q) => q.getOne()); - if (!poli) throw { message: "Poli " + Language.lang.failed_not_found }; - - poli.poli = param.poli; - poli.status = param.status; - poli.updated_by = req.auth.data.name; - await queryRunner.manager.save(poli); - - await queryRunner.commitTransaction(); - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_update, poli); - } catch (e: unknown) { - await queryRunner.rollbackTransaction(); - log.error(e); - const err = e as Error; - return ReturnHelper.errorResponse(res, 400, 401, Language.lang.failed_view, err.message); - } finally { - await queryRunner.release(); - } - } - - static async delete(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['Poli'] - #swagger.security = [{ "bearerAuth": [] }] - #swagger.parameters['id'] = { in: 'path', required: true, type: 'string' } - #swagger.parameters['hard'] = { in: 'path', required: false, type: 'boolean' } - */ - try { - const schema = Joi.object().keys({ - id: Joi.string().uuid().required().label("ID"), - hard: Joi.bool().optional().allow("").label("Is hard delete?"), - }); - const param: { id: string; hard: boolean } = await schema.validateAsync(req.params); - - let affected = 0; - if (!param.hard) { - let poli: Poli = await PoliModel.list({ id: param.id }).then((q) => q.getOne()); - if (!poli) throw { message: "Poli " + Language.lang.failed_not_found }; - poli.deleted_by = req.auth.data.name; - poli.deleted_at = moment().toDate(); - await OrmHelper.DB.manager.save(poli); - affected = 1; - } else { - const repo = OrmHelper.DB.getRepository(Poli); - affected = (await repo.delete({ id: param.id })).affected; - } - - if (affected > 0) { - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_delete, {}); - } else { - return ReturnHelper.errorResponse(res, 404, 401, Language.lang.failed_not_found, ""); - } - } catch (e: unknown) { - log.error(e); - const err = e as Error; - return ReturnHelper.errorResponse(res, 500, 402, Language.lang.failed_delete, err.message); - } - } - - static async restore(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['Poli'] - #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"), - }); - const param: any = await schema.validateAsync(req.params); - const repo = OrmHelper.DB.getRepository(Poli); - const affected = (await repo.restore({ id: param.id })).affected; - if (affected > 0) { - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_restore, {}); - } else { - return ReturnHelper.errorResponse(res, 404, 401, Language.lang.failed_not_found, ""); - } - } catch (e: unknown) { - log.error(e); - const err = e as Error; - return ReturnHelper.errorResponse(res, 500, 402, Language.lang.failed_restore, err.message); - } - } -} diff --git a/src/controllers/room.ts b/src/controllers/room.ts index 5d61d04..5b891c3 100644 --- a/src/controllers/room.ts +++ b/src/controllers/room.ts @@ -7,7 +7,6 @@ import CommonHelper from "../helpers/common"; 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"; @@ -22,7 +21,7 @@ export class RoomController { /* #swagger.tags = ['Room'] #swagger.security = [{ "bearerAuth": [] }] - #swagger.parameters['filter'] = { description: 'Filter: plain text or JSON object (status, code, poli_id, departmentId, etc.)', in: 'query', type: 'string' } + #swagger.parameters['filter'] = { description: 'Filter: plain text or JSON object (status, code, 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,7 +46,6 @@ export class RoomController { const offset = (param.page - 1) * param.limit; 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) @@ -84,7 +82,6 @@ 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().allow("", null).optional().label("Poli ID"), department_id: Joi.string().uuid().required().label("Department ID"), status: Joi.string().required().label("Status"), }); @@ -97,14 +94,10 @@ export class RoomController { 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 || null; room.department = department; room.status = param.status; room.created_by = req.auth.data.name; @@ -135,7 +128,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").leftJoinAndSelect("Room.department", "department").getOne()); + .then((q) => q.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) { @@ -161,7 +154,6 @@ 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().allow("", null).optional().label("Poli ID"), department_id: Joi.string().uuid().required().label("Department ID"), status: Joi.string().required().label("Status"), }); @@ -173,16 +165,12 @@ export class RoomController { 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 }; room.room = param.room; room.code = param.code; room.description = param.description || null; - room.poli = poli || null; room.department = department; room.status = param.status; room.updated_by = req.auth.data.name; diff --git a/src/helpers/orm.ts b/src/helpers/orm.ts index 32d5427..bd34cb3 100644 --- a/src/helpers/orm.ts +++ b/src/helpers/orm.ts @@ -1,7 +1,7 @@ import config from 'config'; import { DataSource } from "typeorm"; import { ILogObj, Logger } from 'tslog'; -import { Administrativu, Aldeia, District, Menu, Munisipo, Suco, Application, Nationality, Diagnosis, DiagnosticProcedure, Poli, Room, ServiceType, ServiceClass, Service, ServiceFare, ServicePackage, Department, DoctorSchedule } from 'entity' +import { Administrativu, Aldeia, District, Menu, Munisipo, Suco, Application, Nationality, Diagnosis, DiagnosticProcedure, Room, ServiceType, ServiceClass, Service, ServiceFare, ServicePackage, Department, DoctorSchedule } from 'entity' export class OrmHelper { static DB: DataSource = null @@ -20,7 +20,7 @@ export class OrmHelper { database: String(config.get("database.database")), synchronize: true, logging: config.get('database.logging'), - entities: [Menu, Administrativu, Aldeia, District, Munisipo, Suco, Application, Nationality, Diagnosis, DiagnosticProcedure, Poli, Room, ServiceType, ServiceClass, Service, ServiceFare, ServicePackage, Department, DoctorSchedule], + entities: [Menu, Administrativu, Aldeia, District, Munisipo, Suco, Application, Nationality, Diagnosis, DiagnosticProcedure, Room, ServiceType, ServiceClass, Service, ServiceFare, ServicePackage, Department, DoctorSchedule], subscribers: [], migrations: [], }) diff --git a/src/model/poli.ts b/src/model/poli.ts deleted file mode 100644 index baaf775..0000000 --- a/src/model/poli.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { Poli } from "entity"; -import { SelectQueryBuilder } from "typeorm"; -import CommonHelper from "../helpers/common"; -import { OrmHelper } from "../helpers/orm"; - -export class PoliModel { - static async list(filter = {}): Promise> { - const repo = OrmHelper.DB.getRepository(Poli); - let whereAttr = []; - let whereVal: any = {}; - if (filter) { - whereAttr = [...whereAttr, ...CommonHelper.handleQueryFilter(filter).whereAttr]; - whereVal = { ...whereVal, ...CommonHelper.handleQueryFilter(filter).whereVal }; - } - - var query = null; - query = repo.createQueryBuilder("Poli"); - if (whereAttr.length != 0) { - query = query.where(whereAttr.join(" and "), whereVal); - } - - return query; - } -} diff --git a/src/routes/private.ts b/src/routes/private.ts index f058c8a..1dae638 100644 --- a/src/routes/private.ts +++ b/src/routes/private.ts @@ -11,7 +11,6 @@ import { ApplicationController } from '../controllers/application'; import { NationalityController } from '../controllers/nationality'; import { DiagnosisController } from '../controllers/diagnosis'; import { DiagnosticProcedureController } from '../controllers/diagnostic_procedure'; -import { PoliController } from '../controllers/poli'; import { RoomController } from '../controllers/room'; import { ServiceTypeController } from '../controllers/service_type'; import { ServiceClassController } from '../controllers/service_class'; @@ -98,13 +97,6 @@ export class RoutePrivate { app.delete('/api/diagnostic-procedure/delete/:id/:hard', DiagnosticProcedureController.delete) app.put('/api/diagnostic-procedure/restore/:id', DiagnosticProcedureController.restore) - app.get('/api/poli/list', PoliController.list) - app.post('/api/poli/create', PoliController.create) - app.get('/api/poli/detail/:id', PoliController.detail) - app.put('/api/poli/update/:id', PoliController.update) - app.delete('/api/poli/delete/:id/:hard', PoliController.delete) - app.put('/api/poli/restore/:id', PoliController.restore) - app.get('/api/room/list', RoomController.list) app.post('/api/room/create', RoomController.create) app.get('/api/room/detail/:id', RoomController.detail) diff --git a/src/swagger/builder.js b/src/swagger/builder.js index a987621..b073eda 100644 --- a/src/swagger/builder.js +++ b/src/swagger/builder.js @@ -106,15 +106,10 @@ const doc = { $code: "XYZ789", $status: "Y" }, - poli: { - $poli: "Poli name", - $status: "Y" - }, room: { $room: "Room name", $code: "R001", $description: "Optional description", - $poli_id: "uuid-string", $department_id: "uuid-string", $status: "Y" },