From a67078580fb6d3f8b94aad0c6f17992373dbafb0 Mon Sep 17 00:00:00 2001 From: wayanrivan Date: Wed, 8 Apr 2026 09:58:48 +0700 Subject: [PATCH] update : add region in master data --- src/controllers/pharmacy/pharmacy_info.ts | 119 ++++++++++++---------- src/controllers/region.ts | 2 +- src/model/pharmacy_info.ts | 6 +- src/routes/private.ts | 2 +- src/swagger/builder.js | 4 + 5 files changed, 77 insertions(+), 56 deletions(-) diff --git a/src/controllers/pharmacy/pharmacy_info.ts b/src/controllers/pharmacy/pharmacy_info.ts index c695638..e93b22a 100644 --- a/src/controllers/pharmacy/pharmacy_info.ts +++ b/src/controllers/pharmacy/pharmacy_info.ts @@ -79,28 +79,28 @@ export class PharmacyInfoController { } static async detail(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['Pharmacy - PharmacyInfo'] - #swagger.security = [{ "bearerAuth": [] }] - #swagger.parameters['id'] = { description: '', in: 'path', type: 'string' } - */ - try { - const schema = Joi.object().keys({ - id: Joi.string().uuid().required().label("Pharmacy Info Id"), - }); - - let param: any = await schema.validateAsync(req.params); - - let data = await PharmacyInfoModel.list({ "id": param.id }).then((q) => q.getOne()); - if (!data) throw { message: "Pharmacy Info Not Found" }; - - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_view, data); - } catch (e: unknown) { - log.error(e); - const err = e as Error; - return ReturnHelper.errorResponse(res, 400, 401, Language.lang.failed_not_found, err.message); - } + /* + #swagger.tags = ['Pharmacy - PharmacyInfo'] + #swagger.security = [{ "bearerAuth": [] }] + #swagger.parameters['id'] = { description: '', in: 'path', type: 'string' } + */ + try { + const schema = Joi.object().keys({ + id: Joi.string().uuid().required().label("Pharmacy Info Id"), + }); + + let param: any = await schema.validateAsync(req.params); + + let data = await PharmacyInfoModel.list({ "id": param.id }).then((q) => q.getOne()); + if (!data) throw { message: "Pharmacy Info Not Found" }; + + return ReturnHelper.successResponseAny(res, 200, Language.lang.success_view, data); + } 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 export(req: Request, res: Response, next: NextFunction): Promise { /* @@ -144,7 +144,7 @@ export class PharmacyInfoController { var query = await PharmacyInfoModel.list(filter); const data = await query.getMany(); - + const filename = "pharmacy_info.csv"; res.setHeader('Content-Type', 'text/csv'); @@ -250,6 +250,11 @@ export class PharmacyInfoController { .uuid() .required() .label('Default Room'), + + province: Joi.string().allow("").optional().label("Province Code"), + city: Joi.string().allow("").optional().label("City Code"), + subdistrict: Joi.string().allow("").optional().label("Subdistrict Code"), + ward: Joi.string().allow("").optional().label("Ward Code"), }); const param: any = await schema.validateAsync(req.body); @@ -264,7 +269,11 @@ export class PharmacyInfoController { data.phone = param.phone data.default_room = param.default_room_id data.logo = param.logo - data.created_by = req.auth.data.name; + data.province = param.province + data.city = param.city + data.subdistrict = param.subdistrict + data.ward = param.ward + data.created_by = req.auth?.data.name; await OrmHelper.DB.manager.save(data); @@ -369,7 +378,11 @@ export class PharmacyInfoController { data.phone = param.phone data.default_room = param.default_room_id data.logo = param.logo - data.updated_by = req.auth.data.name; + data.province = param.province + data.city = param.city + data.subdistrict = param.subdistrict + data.ward = param.ward + data.updated_by = req.auth?.data.name; await repo.save(data); @@ -416,7 +429,7 @@ export class PharmacyInfoController { const existData = await repo.findOne({ where: { id: param.id } }); if (existData && !param.hard) { - existData.deleted_by = req.auth.data.name; + existData.deleted_by = req.auth?.data.name; await OrmHelper.DB.manager.save(existData); } @@ -625,33 +638,33 @@ export class PharmacyInfoController { } static async view(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['Pharmacy - PharmacyInfo'] - #swagger.security = [{ "bearerAuth": [] }] - */ - try { - const data = await OrmHelper.DB - .getRepository(PharmacyInfo) - .findOne({ - where: {} - }); - - if (!data) return ReturnHelper.errorResponse(res, 404, 404, Language.lang.failed_view, "data not found"); - - const result = { - id: data.id, - name: data.name, - address: data.address, - phone: data.phone, - logo: 'http://his.shiblysolution.id:3011/service-master-data/uploads/hospital-logo/' + data.logo - }; - - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_view, result); - - } catch (e: unknown) { - log.error(e); - const err = e as Error; - return ReturnHelper.errorResponse(res,400,401,Language.lang.failed_view,err.message); - } + /* + #swagger.tags = ['Pharmacy - PharmacyInfo'] + #swagger.security = [{ "bearerAuth": [] }] + */ + try { + const data = await OrmHelper.DB + .getRepository(PharmacyInfo) + .findOne({ + where: {} + }); + + if (!data) return ReturnHelper.errorResponse(res, 404, 404, Language.lang.failed_view, "data not found"); + + const result = { + id: data.id, + name: data.name, + address: data.address, + phone: data.phone, + logo: 'http://his.shiblysolution.id:3011/service-master-data/uploads/hospital-logo/' + data.logo + }; + + return ReturnHelper.successResponseAny(res, 200, Language.lang.success_view, result); + + } catch (e: unknown) { + log.error(e); + const err = e as Error; + return ReturnHelper.errorResponse(res, 400, 401, Language.lang.failed_view, err.message); } + } } \ No newline at end of file diff --git a/src/controllers/region.ts b/src/controllers/region.ts index 68d7d1d..ccc5156 100644 --- a/src/controllers/region.ts +++ b/src/controllers/region.ts @@ -82,7 +82,7 @@ export class RegionController { } } - static async subdistric(req: Request, res: Response, next: NextFunction): Promise { + static async subdistrict(req: Request, res: Response, next: NextFunction): Promise { /* #swagger.tags = ['Region'] #swagger.security = [{ diff --git a/src/model/pharmacy_info.ts b/src/model/pharmacy_info.ts index 4183138..781b2dc 100644 --- a/src/model/pharmacy_info.ts +++ b/src/model/pharmacy_info.ts @@ -18,7 +18,11 @@ export class PharmacyInfoModel { .leftJoinAndSelect("pharmacy_info.munisipiu", "munisipiu") .leftJoinAndSelect("pharmacy_info.postu_admin", "postu_admin") .leftJoinAndSelect("pharmacy_info.suco", "suco") - .leftJoinAndSelect("pharmacy_info.aldeia", "aldeia"); + .leftJoinAndSelect("pharmacy_info.aldeia", "aldeia") + .leftJoinAndSelect("pharmacy_info.province", "province") + .leftJoinAndSelect("pharmacy_info.city", "city") + .leftJoinAndSelect("pharmacy_info.subdistrict", "subdistrict") + .leftJoinAndSelect("pharmacy_info.ward", "ward"); if (whereAttr.length != 0) { query = query.where(whereAttr.join(" and "), whereVal); } diff --git a/src/routes/private.ts b/src/routes/private.ts index dff3759..0e582fa 100644 --- a/src/routes/private.ts +++ b/src/routes/private.ts @@ -488,7 +488,7 @@ export class RoutePrivate { app.get('/api/region/province', RegionController.province) app.get('/api/region/city/:province_code', RegionController.city) - app.get('/api/region/subdistrict/:city_code', RegionController.subdistric) + app.get('/api/region/subdistrict/:city_code', RegionController.subdistrict) app.get('/api/region/ward/:subdistric_code', RegionController.ward) } } diff --git a/src/swagger/builder.js b/src/swagger/builder.js index e39254f..fd25c0e 100644 --- a/src/swagger/builder.js +++ b/src/swagger/builder.js @@ -319,6 +319,10 @@ const doc = { $aldeia: "Aldeia ID (UUID)", $phone: "Phone (string, max 30, optional)", $default_room_id: "Default Room ID (UUID)", + $province: "Province Code", + $city: "City Code", + $subdistrict: "Subdistrict Code", + $ward: "Ward Code", }, item_price: { $item_master_id: "Item Master ID (required, UUID)",