From e7f4deca7c48c687773e9b01398ee783a8aecc58 Mon Sep 17 00:00:00 2001 From: wayanrivan Date: Mon, 16 Feb 2026 08:54:16 +0700 Subject: [PATCH] add new service: service to rooms --- config/default.json | 8 +++--- src/controllers/service.ts | 50 ++++++++++++++++++++++++++++++++++++++ src/routes/private.ts | 1 + src/swagger/builder.js | 3 +++ 4 files changed, 58 insertions(+), 4 deletions(-) diff --git a/config/default.json b/config/default.json index f212e0f..b9a30bc 100644 --- a/config/default.json +++ b/config/default.json @@ -23,10 +23,10 @@ "engine": "postgres", "host": "127.0.0.1", "port": "15432", - "username": "saude_tl", - "password": "saude_tl_local", - "database": "saude_tl", + "username": "saude_stag", + "password": "gM*#o>3W4&5X", + "database": "saude_stag", "synchronize": true, "logging": true } -} +} \ No newline at end of file diff --git a/src/controllers/service.ts b/src/controllers/service.ts index b57b10c..e54c57e 100644 --- a/src/controllers/service.ts +++ b/src/controllers/service.ts @@ -205,6 +205,56 @@ export class ServiceController { } } + static async updateservicerooms(req: Request, res: Response, next: NextFunction): Promise { + /* + #swagger.tags = ['Service'] + #swagger.security = [{ "bearerAuth": [] }] + #swagger.parameters['id'] = { description: '', in: 'path', type: 'string' } + #swagger.requestBody = { required: true, content: { "application/json": { schema: { $ref: "#/components/schemas/servicerooms" } } } } + */ + 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("Service ID"), + room_ids: Joi.array().items(Joi.string().uuid()).optional().label("Room IDs"), + }); + + let param: any = await schema.validateAsync(req.body); + + let service = await ServiceModel.list({ "Service.id": param.id }) + .then((q) => q.leftJoinAndSelect("Service.serviceType", "st").leftJoinAndSelect("Service.rooms", "r").getOne()); + + if (!service) throw { message: "Service " + Language.lang.failed_not_found }; + + let rooms: any[] = []; + if (param.room_ids && param.room_ids.length > 0) { + for (const roomId of param.room_ids) { + const room = await RoomModel.list({ id: roomId }).then((q) => q.getOne()); + if (room) rooms.push(room); + } + } + + service.rooms = rooms; + service.updated_by = req.auth.data.name; + await queryRunner.manager.save(service); + + await queryRunner.commitTransaction(); + + return ReturnHelper.successResponseAny(res, 200, Language.lang.success_update, service); + } 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 = ['Service'] diff --git a/src/routes/private.ts b/src/routes/private.ts index 1dae638..8c0b2d4 100644 --- a/src/routes/private.ts +++ b/src/routes/private.ts @@ -124,6 +124,7 @@ export class RoutePrivate { app.put('/api/service/update/:id', ServiceController.update) app.delete('/api/service/delete/:id/:hard', ServiceController.delete) app.put('/api/service/restore/:id', ServiceController.restore) + app.put('/api/service/update-service-rooms/:id', ServiceController.updateservicerooms) app.get('/api/service-fare/list', ServiceFareController.list) app.post('/api/service-fare/create', ServiceFareController.create) diff --git a/src/swagger/builder.js b/src/swagger/builder.js index b073eda..601cf56 100644 --- a/src/swagger/builder.js +++ b/src/swagger/builder.js @@ -125,6 +125,9 @@ const doc = { $service_type_id: "uuid-string", $room_ids: ["uuid-string"] }, + servicerooms: { + $room_ids: ["uuid-string"] + }, serviceFare: { $service_class_id: "uuid-string", $service_id: "uuid-string",