diff --git a/server/src/main/java/ru/dragonestia/picker/controller/RoomController.java b/server/src/main/java/ru/dragonestia/picker/controller/RoomController.java index a67226d..bb2084e 100644 --- a/server/src/main/java/ru/dragonestia/picker/controller/RoomController.java +++ b/server/src/main/java/ru/dragonestia/picker/controller/RoomController.java @@ -4,6 +4,12 @@ import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import ru.dragonestia.picker.controller.response.ResponseObject; +import ru.dragonestia.picker.exception.DoesNotExistsException; +import ru.dragonestia.picker.model.instance.InstanceId; +import ru.dragonestia.picker.model.room.RoomId; +import ru.dragonestia.picker.model.room.factory.RoomFactory; +import ru.dragonestia.picker.service.InstanceService; +import ru.dragonestia.picker.service.RoomService; import java.util.List; @@ -12,19 +18,25 @@ import java.util.List; @RequiredArgsConstructor public class RoomController { + private final InstanceService instanceService; + private final RoomService roomService; + private final RoomFactory roomFactory; + @GetMapping List listRooms(@PathVariable String instanceId) { - throw new UnsupportedOperationException("Not implemented"); + return roomService.all(InstanceId.of(instanceId)).stream().map(id -> id.getId().getValue()).toList(); } @GetMapping("/target/{roomId}") ResponseObject.Room targetRoomDetails(@PathVariable String instanceId, @PathVariable String roomId) { - throw new UnsupportedOperationException("Not implemented"); + return roomService.find(InstanceId.of(instanceId), RoomId.of(roomId)) + .map(ResponseObject.Room::of) + .orElseThrow(() -> DoesNotExistsException.forRoom(RoomId.of(roomId))); } @GetMapping("/list") List listRoomDetails(@PathVariable String instanceId, @RequestParam List id) { - throw new UnsupportedOperationException("Not implemented"); + return id.stream().map(roomId -> targetRoomDetails(instanceId, roomId)).toList(); } @PostMapping @@ -34,21 +46,32 @@ public class RoomController { @RequestParam String payload, @RequestParam(defaultValue = "false") boolean locked, @RequestParam(defaultValue = "false") boolean persist) { - throw new UnsupportedOperationException("Not implemented"); + var instance = instanceService.find(InstanceId.of(instanceId)) + .orElseThrow(() -> DoesNotExistsException.forInstance(InstanceId.of(instanceId))); + roomService.create(roomFactory.create(RoomId.of(id), instance, slots, payload, persist, locked)); + return ResponseEntity.ok().build(); } @DeleteMapping("/target/{roomId}") ResponseEntity deleteRoom(@PathVariable String instanceId, @PathVariable String roomId) { - throw new UnsupportedOperationException("Not implemented"); + roomService.find(InstanceId.of(instanceId), RoomId.of(roomId)).ifPresent(roomService::remove); + return ResponseEntity.ok().build(); } @DeleteMapping("/list") ResponseEntity deleteRooms(@PathVariable String instanceId, @RequestParam List id) { - throw new UnsupportedOperationException("Not implemented"); + for (var roomId: id) { + deleteRoom(instanceId, roomId); + } + return ResponseEntity.ok().build(); } @PutMapping("/target/{roomId}/lock") ResponseEntity lockRoom(@PathVariable String instanceId, @PathVariable String roomId, @RequestParam boolean newState) { - throw new UnsupportedOperationException("Not implemented"); + var room = roomService.find(InstanceId.of(instanceId), RoomId.of(roomId)) + .orElseThrow(() -> DoesNotExistsException.forRoom(RoomId.of(roomId))); + room.setLocked(newState); + roomService.updateState(room); + return ResponseEntity.ok().build(); } } diff --git a/server/src/main/java/ru/dragonestia/picker/model/room/factory/RoomFactory.java b/server/src/main/java/ru/dragonestia/picker/model/room/factory/RoomFactory.java index 1a0f88e..905962c 100644 --- a/server/src/main/java/ru/dragonestia/picker/model/room/factory/RoomFactory.java +++ b/server/src/main/java/ru/dragonestia/picker/model/room/factory/RoomFactory.java @@ -11,6 +11,12 @@ import ru.dragonestia.picker.model.room.RoomId; public class RoomFactory { public Room create(RoomId identifier, Instance instance, int slots, String payload, boolean persist) { - return new Room(identifier, instance, slots, payload, persist); + return create(identifier, instance, slots, payload, persist, false); + } + + public Room create(RoomId identifier, Instance instance, int slots, String payload, boolean persist, boolean locked) { + var room = new Room(identifier, instance, slots, payload, persist); + room.setLocked(locked); + return room; } } diff --git a/server/src/main/java/ru/dragonestia/picker/service/impl/RoomServiceImpl.java b/server/src/main/java/ru/dragonestia/picker/service/impl/RoomServiceImpl.java index 7412b9f..f24a7e8 100644 --- a/server/src/main/java/ru/dragonestia/picker/service/impl/RoomServiceImpl.java +++ b/server/src/main/java/ru/dragonestia/picker/service/impl/RoomServiceImpl.java @@ -26,7 +26,6 @@ public class RoomServiceImpl implements RoomService { private final RoomRepository roomRepository; private final InstanceRepository instanceRepository; - private final EntityRepository entityRepository; private final InstanceAndRoomStorage storage; @Override