Refactor details parsing for RoomController

This commit is contained in:
Andrey Terentev 2024-02-05 15:53:51 +07:00
parent 682ffd49d8
commit 65c0ea4739

View File

@ -15,6 +15,8 @@ import ru.dragonestia.picker.model.Room;
import ru.dragonestia.picker.model.type.SlotLimit; import ru.dragonestia.picker.model.type.SlotLimit;
import ru.dragonestia.picker.service.RoomService; import ru.dragonestia.picker.service.RoomService;
import ru.dragonestia.picker.service.NodeService; import ru.dragonestia.picker.service.NodeService;
import ru.dragonestia.picker.util.DetailsExtractor;
import ru.dragonestia.picker.util.DetailsParser;
import ru.dragonestia.picker.util.NamingValidator; import ru.dragonestia.picker.util.NamingValidator;
import java.util.HashSet; import java.util.HashSet;
@ -28,21 +30,18 @@ public class RoomController {
private final NodeService nodeService; private final NodeService nodeService;
private final RoomService roomService; private final RoomService roomService;
private final NamingValidator namingValidator; private final NamingValidator namingValidator;
private final DetailsParser detailsParser;
@GetMapping @GetMapping
ResponseEntity<RoomListResponse> all(@PathVariable(name = "nodeId") String nodeId, ResponseEntity<RoomListResponse> all(@PathVariable(name = "nodeId") String nodeId,
@RequestParam(name = "requiredDetails", required = false, defaultValue = "") String detailsSeq) { @RequestParam(name = "requiredDetails", required = false, defaultValue = "") String detailsSeq) {
var details = new HashSet<RoomDetails>();
for (var detailStr: detailsSeq.split(",")) {
try {
details.add(RoomDetails.valueOf(detailStr.toUpperCase()));
} catch (IllegalArgumentException ignore) {}
}
return nodeService.find(nodeId) return nodeService.find(nodeId)
.map(node -> ResponseEntity.ok(new RoomListResponse(nodeId, roomService.getAllRoomsWithDetailsResponse(node, details)))) .map(node -> {
.orElseThrow(() -> new NodeNotFoundException(nodeId)); var details = detailsParser.parseRoomDetails(detailsSeq);
var response = new RoomListResponse(nodeId, roomService.getAllRoomsWithDetailsResponse(node, details));
return ResponseEntity.ok(response);
}).orElseThrow(() -> new NodeNotFoundException(nodeId));
} }
@PostMapping @PostMapping