From 0614d7a491a652e6566fd8f32144aaeb121540dc Mon Sep 17 00:00:00 2001 From: Muhammad Rayhan Ardiansyah Date: Fri, 27 Mar 2026 18:04:01 +0700 Subject: [PATCH] fixing user to room --- src/controllers/user_to_room.ts | 147 ++++++++++++++++++++++++++------ src/routes/private.ts | 2 + src/swagger/builder.js | 2 +- 3 files changed, 124 insertions(+), 27 deletions(-) diff --git a/src/controllers/user_to_room.ts b/src/controllers/user_to_room.ts index 4b0bcab..7c33e70 100644 --- a/src/controllers/user_to_room.ts +++ b/src/controllers/user_to_room.ts @@ -176,41 +176,53 @@ export class UserToRoomController { .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_ids: Joi.array() + // .items(Joi.string().uuid().required()) + // .min(1) + // .required() + // .label("Factory IDs") }); const param: any = await schema.validateAsync(req.body); - const userToRoomRepo = OrmHelper.DB.getRepository(UserToRoom); - const userRepo = OrmHelper.DB.getRepository(User); - const roomRepo = OrmHelper.DB.getRepository(Room); + // 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(); + // 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; + const data = new UserToRoom() + data.user = param.user_id; + data.room = param.room_id; + data.created_by = req.auth.data.name; - await userToRoomRepo.save(relation); - } + await OrmHelper.DB.manager.save(data); - 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(); + // 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_insert, data); } catch (e: unknown) { @@ -220,4 +232,87 @@ export class UserToRoomController { return ReturnHelper.errorResponse(res, 500, 401, Language.lang.failed_insert, err.message); } } + + static async update(req: Request, res: Response, next: NextFunction): Promise { + /* + #swagger.tags = ['UserToRoom'] + #swagger.security = [{ + "bearerAuth": [] + }] + #swagger.parameters['id'] = { + in: 'path', + description: 'UserToRoom ID.', + required: true, + type: 'string' + } + + #swagger.requestBody = { + required: true, + content: { + "application/json": { + schema: { + $ref: "#/components/schemas/user_to_room" + } + } + } + } + */ + + 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'), + }); + + req.body.id = req.params['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, ""); + } + } catch (e: unknown) { + log.error(e); + const err = e as Error; + + return ReturnHelper.errorResponse(res, 500, 402, Language.lang.failed_update, err.message); + } + } + + static async detail(req: Request, res: Response, next: NextFunction): Promise { + /* + #swagger.tags = ['UserToRoom'] + #swagger.security = [{ "bearerAuth": [] }] + #swagger.parameters['id'] = { description: '', in: 'path', type: 'string' } + */ + try { + const schema = Joi.object().keys({ + id: Joi.string().uuid().required().label("UserToRoom Id"), + }); + + let param: any = await schema.validateAsync(req.params); + + let data = await UserToRoomModel.list({ "id": param.id }).then((q) => q.getOne()); + if (!data) throw { message: "UserToRoom 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); + } + } } \ No newline at end of file diff --git a/src/routes/private.ts b/src/routes/private.ts index 500b2cf..4d7918c 100644 --- a/src/routes/private.ts +++ b/src/routes/private.ts @@ -442,6 +442,8 @@ 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.get('/api/user-to-room/view/:id', UserToRoomController.detail) app.get('/api/room-to-pharmacy/list', RoomToPharmacyController.list) app.get('/api/room-to-pharmacy/export', RoomToPharmacyController.export) diff --git a/src/swagger/builder.js b/src/swagger/builder.js index f522295..77e1ba7 100644 --- a/src/swagger/builder.js +++ b/src/swagger/builder.js @@ -348,7 +348,7 @@ const doc = { }, user_to_room: { $user_id: "user ID (required, UUID)", - $room_ids: "Array [room-uuid-1, room-uuid-2]", + $room_id: "Room ID (required, UUID)", }, room_to_pharmacy: { $pharmacy_room_id: "Pharmacy Room ID (required, UUID)",