From 033c44c4f1df66088b343c21ad4042cdd6cccb48 Mon Sep 17 00:00:00 2001 From: Muhammad Rayhan Ardiansyah Date: Mon, 6 Apr 2026 10:22:20 +0700 Subject: [PATCH] update user to room --- src/controllers/user_to_room.ts | 72 ++++++++++++++++++++++++--------- src/routes/private.ts | 2 +- src/swagger/builder.js | 4 ++ 3 files changed, 57 insertions(+), 21 deletions(-) diff --git a/src/controllers/user_to_room.ts b/src/controllers/user_to_room.ts index 7c33e70..f22aaa3 100644 --- a/src/controllers/user_to_room.ts +++ b/src/controllers/user_to_room.ts @@ -241,7 +241,7 @@ export class UserToRoomController { }] #swagger.parameters['id'] = { in: 'path', - description: 'UserToRoom ID.', + description: 'User ID.', required: true, type: 'string' } @@ -251,7 +251,7 @@ export class UserToRoomController { content: { "application/json": { schema: { - $ref: "#/components/schemas/user_to_room" + $ref: "#/components/schemas/user_to_room_update" } } } @@ -260,30 +260,62 @@ export class UserToRoomController { try { const schema = Joi.object().keys({ - id: Joi.string().uuid().required().label('ID'), user_id: Joi.string().uuid().required().label('User ID'), - room_id: Joi.string().uuid().required().label('Room ID'), + room_ids: Joi.array() + .items(Joi.string().uuid().required()) + .min(1) + .required() + .label("Factory IDs") + // room_id: Joi.string().uuid().required().label('Room ID'), }); - req.body.id = req.params['id']; + req.body.user_id = req.params['user_id']; const param: any = await schema.validateAsync(req.body); - - const repo = OrmHelper.DB.getRepository(UserToRoom); - - const data = await repo.findOneBy({ id: param.id }); - - if (data != null) { - data.user = param.user_id; - data.room = param.room_id; - data.updated_by = req.auth.data.name; - - await repo.save(data); - - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_update, data); - } else { - return ReturnHelper.errorResponse(res, 404, 401, Language.lang.failed_not_found, ""); + + const userToRoomRepo = OrmHelper.DB.getRepository(UserToRoom); + const userRepo = OrmHelper.DB.getRepository(User); + const roomRepo = OrmHelper.DB.getRepository(Room); + + await userToRoomRepo + .createQueryBuilder() + .delete() + .from(UserToRoom) + .where("service_id = :userId", { userId: param.user_id }) + .execute(); + + let relation : UserToRoom; + for (const roomId of param.room_ids) { + relation = new UserToRoom(); + relation.user = await userRepo.findOneBy({ id: param.user_id }); + relation.room = await roomRepo.findOneBy({ id: roomId }); + relation.created_by = req.auth.data.name; + + await userToRoomRepo.save(relation); } + + const data = await userToRoomRepo.createQueryBuilder("user_to_room") + .leftJoinAndSelect("user_to_room.user", "user") + .leftJoinAndSelect("user_to_room.room", "room") + .where("user_to_room.service_id = :userId", { userId: param.user_id }).getMany(); + + return ReturnHelper.successResponseAny(res, 200, Language.lang.success_update, data); + + // const repo = OrmHelper.DB.getRepository(UserToRoom); + + // const data = await repo.findOneBy({ id: param.id }); + + // if (data != null) { + // data.user = param.user_id; + // data.room = param.room_id; + // data.updated_by = req.auth.data.name; + + // await repo.save(data); + + // return ReturnHelper.successResponseAny(res, 200, Language.lang.success_update, data); + // } else { + // return ReturnHelper.errorResponse(res, 404, 401, Language.lang.failed_not_found, ""); + // } } catch (e: unknown) { log.error(e); const err = e as Error; diff --git a/src/routes/private.ts b/src/routes/private.ts index 2de78c8..e8f7425 100644 --- a/src/routes/private.ts +++ b/src/routes/private.ts @@ -444,7 +444,7 @@ export class RoutePrivate { app.get('/api/user-to-room/list', UserToRoomController.list) app.get('/api/user-to-room/export', UserToRoomController.export) app.post('/api/user-to-room/create', UserToRoomController.create) - app.put('/api/user-to-room/update/:id', UserToRoomController.update) + app.put('/api/user-to-room/update/:user_id', UserToRoomController.update) app.get('/api/user-to-room/view/:id', UserToRoomController.detail) app.get('/api/room-to-pharmacy/list', RoomToPharmacyController.list) diff --git a/src/swagger/builder.js b/src/swagger/builder.js index 3d39082..e39254f 100644 --- a/src/swagger/builder.js +++ b/src/swagger/builder.js @@ -361,6 +361,10 @@ const doc = { $user_id: "user ID (required, UUID)", $room_id: "Room ID (required, UUID)", }, + user_to_room_update: { + $user_id: "user ID (required, UUID)", + $room_ids: "Array [room-uuid-1, room-uuid-2]", + }, room_to_pharmacy: { $pharmacy_room_id: "Pharmacy Room ID (required, UUID)", $room_ids: "Array [room-uuid-1, room-uuid-2]",