Refactored picked room response and updated client NodeRepository
This commit is contained in:
parent
475191de79
commit
fb06655d89
@ -6,9 +6,13 @@ import ru.dragonestia.picker.api.model.node.NodeDefinition;
|
||||
import ru.dragonestia.picker.api.repository.request.node.FindNodeById;
|
||||
import ru.dragonestia.picker.api.repository.request.node.GetAllNodes;
|
||||
import ru.dragonestia.picker.api.repository.request.node.RemoveNodesByIds;
|
||||
import ru.dragonestia.picker.api.repository.response.PickedRoomResponse;
|
||||
import ru.dragonestia.picker.api.repository.type.NodeIdentifier;
|
||||
import ru.dragonestia.picker.api.repository.type.UserIdentifier;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
|
||||
public interface NodeRepository {
|
||||
|
||||
@ -21,4 +25,6 @@ public interface NodeRepository {
|
||||
void removeNode(@NotNull INode node);
|
||||
|
||||
void saveNode(@NotNull NodeDefinition definition);
|
||||
|
||||
@NotNull PickedRoomResponse pickRoom(@NotNull NodeIdentifier identifier, @NotNull Set<UserIdentifier> users);
|
||||
}
|
||||
|
||||
@ -0,0 +1,16 @@
|
||||
package ru.dragonestia.picker.api.repository.response;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
@Schema(title = "Result of picking room", hidden = true)
|
||||
public record PickedRoomResponse(
|
||||
@Schema(description = "Node identifier", example = "test-node") String nodeId,
|
||||
@Schema(description = "Room identifier", example = "test-room") String roomId,
|
||||
@Schema(description = "Payload", example = "Hello world!") String payload,
|
||||
@Schema(description = "Max slots in room", example = "25") int slots,
|
||||
@Schema(description = "Used slots in room", example = "5") int usedSlots,
|
||||
@Schema(description = "Locked for picking?", example = "false") boolean locked,
|
||||
@Schema(description = "User identifiers") Set<String> users
|
||||
) {}
|
||||
@ -10,9 +10,13 @@ import ru.dragonestia.picker.api.repository.NodeRepository;
|
||||
import ru.dragonestia.picker.api.repository.request.node.FindNodeById;
|
||||
import ru.dragonestia.picker.api.repository.request.node.GetAllNodes;
|
||||
import ru.dragonestia.picker.api.repository.request.node.RemoveNodesByIds;
|
||||
import ru.dragonestia.picker.api.repository.response.PickedRoomResponse;
|
||||
import ru.dragonestia.picker.api.repository.type.NodeIdentifier;
|
||||
import ru.dragonestia.picker.api.repository.type.UserIdentifier;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
|
||||
public class NodeRepositoryImpl implements NodeRepository {
|
||||
|
||||
@ -47,4 +51,9 @@ public class NodeRepositoryImpl implements NodeRepository {
|
||||
public void saveNode(@NotNull NodeDefinition definition) {
|
||||
throw new UnsupportedOperationException("Not implemented");
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull PickedRoomResponse pickRoom(@NotNull NodeIdentifier identifier, @NotNull Set<UserIdentifier> users) {
|
||||
throw new UnsupportedOperationException("Not implemented");
|
||||
}
|
||||
}
|
||||
|
||||
@ -10,6 +10,7 @@ import ru.dragonestia.picker.api.exception.NodeNotFoundException;
|
||||
import ru.dragonestia.picker.api.model.node.PickingMethod;
|
||||
import ru.dragonestia.picker.api.repository.response.NodeDetailsResponse;
|
||||
import ru.dragonestia.picker.api.repository.response.NodeListResponse;
|
||||
import ru.dragonestia.picker.api.repository.response.PickedRoomResponse;
|
||||
import ru.dragonestia.picker.model.Node;
|
||||
import ru.dragonestia.picker.service.NodeService;
|
||||
import ru.dragonestia.picker.service.RoomService;
|
||||
@ -73,7 +74,7 @@ public class NodeController {
|
||||
|
||||
@Operation(summary = "Pick node for users")
|
||||
@PostMapping("/{nodeId}/pick")
|
||||
ResponseEntity<?> pickRoom(
|
||||
ResponseEntity<PickedRoomResponse> pickRoom(
|
||||
@Parameter(description = "Node identifier") @PathVariable("nodeId") String nodeId,
|
||||
@Parameter(description = "Users to add", example = "user1,user3,user3") @RequestParam(name = "userIds") String userIds
|
||||
) {
|
||||
@ -81,8 +82,8 @@ public class NodeController {
|
||||
|
||||
var node = nodeService.find(nodeId).orElseThrow(() -> new NodeNotFoundException(nodeId));
|
||||
var users = namingValidator.validateUserIds(Arrays.stream(userIds.split(",")).toList());
|
||||
var room = roomService.pickAvailable(node, users);
|
||||
var response = roomService.pickAvailable(node, users);
|
||||
|
||||
return ResponseEntity.ok(room); // TODO: make other json schema
|
||||
return ResponseEntity.ok(response);
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@ import ru.dragonestia.picker.api.exception.InvalidRoomIdentifierException;
|
||||
import ru.dragonestia.picker.api.exception.RoomAlreadyExistException;
|
||||
import ru.dragonestia.picker.api.model.room.RoomDetails;
|
||||
import ru.dragonestia.picker.api.model.room.ShortResponseRoom;
|
||||
import ru.dragonestia.picker.api.repository.response.PickedRoomResponse;
|
||||
import ru.dragonestia.picker.model.Room;
|
||||
import ru.dragonestia.picker.model.Node;
|
||||
import ru.dragonestia.picker.model.User;
|
||||
@ -24,7 +25,7 @@ public interface RoomService {
|
||||
|
||||
List<ShortResponseRoom> getAllRoomsWithDetailsResponse(Node node, Set<RoomDetails> details);
|
||||
|
||||
Room pickAvailable(Node node, List<User> users);
|
||||
PickedRoomResponse pickAvailable(Node node, List<User> users);
|
||||
|
||||
void updateState(Room room);
|
||||
}
|
||||
|
||||
@ -9,11 +9,13 @@ import ru.dragonestia.picker.api.exception.NotPersistedNodeException;
|
||||
import ru.dragonestia.picker.api.exception.RoomAlreadyExistException;
|
||||
import ru.dragonestia.picker.api.model.room.RoomDetails;
|
||||
import ru.dragonestia.picker.api.model.room.ShortResponseRoom;
|
||||
import ru.dragonestia.picker.api.repository.response.PickedRoomResponse;
|
||||
import ru.dragonestia.picker.model.Room;
|
||||
import ru.dragonestia.picker.model.Node;
|
||||
import ru.dragonestia.picker.model.User;
|
||||
import ru.dragonestia.picker.repository.NodeRepository;
|
||||
import ru.dragonestia.picker.repository.RoomRepository;
|
||||
import ru.dragonestia.picker.repository.UserRepository;
|
||||
import ru.dragonestia.picker.service.RoomService;
|
||||
import ru.dragonestia.picker.storage.NodeAndRoomStorage;
|
||||
import ru.dragonestia.picker.util.DetailsExtractor;
|
||||
@ -23,6 +25,7 @@ import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Log4j2
|
||||
@Service
|
||||
@ -31,6 +34,7 @@ public class RoomServiceImpl implements RoomService {
|
||||
|
||||
private final RoomRepository roomRepository;
|
||||
private final NodeRepository nodeRepository;
|
||||
private final UserRepository userRepository;
|
||||
private final DetailsExtractor detailsExtractor;
|
||||
private final NamingValidator namingValidator;
|
||||
private final NodeAndRoomStorage storage;
|
||||
@ -74,9 +78,20 @@ public class RoomServiceImpl implements RoomService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Room pickAvailable(Node node, List<User> users) {
|
||||
return roomRepository.pickFree(node, users)
|
||||
public PickedRoomResponse pickAvailable(Node node, List<User> users) {
|
||||
var room = roomRepository.pickFree(node, users)
|
||||
.orElseThrow(() -> new RuntimeException("There are no rooms available"));
|
||||
var roomUsers = userRepository.usersOf(room);
|
||||
|
||||
return new PickedRoomResponse(
|
||||
room.getNodeId(),
|
||||
room.getId(),
|
||||
room.getPayload(),
|
||||
room.getSlots().getSlots(),
|
||||
roomUsers.size(),
|
||||
room.isLocked(),
|
||||
roomUsers.stream().map(User::id).collect(Collectors.toSet())
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user