Refactored RRoom to ResponseRoom
This commit is contained in:
parent
ef37fa0223
commit
8f29d69ecc
@ -3,7 +3,8 @@ package ru.dragonestia.picker.model;
|
|||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import ru.dragonestia.picker.api.repository.response.type.RRoom;
|
import ru.dragonestia.picker.api.model.room.ResponseRoom;
|
||||||
|
import ru.dragonestia.picker.api.model.room.ShortResponseRoom;
|
||||||
import ru.dragonestia.picker.model.type.SlotLimit;
|
import ru.dragonestia.picker.model.type.SlotLimit;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -48,13 +49,11 @@ public class Room {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public RRoom toResponseObject() {
|
public ResponseRoom toResponseObject() {
|
||||||
var result = new RRoom(id, nodeId, slots.getSlots(), payload);
|
return new ResponseRoom(id, nodeId, slots.getSlots(), locked, payload);
|
||||||
result.setLocked(locked);
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public RRoom.Short toShortResponseObject() {
|
public ShortResponseRoom toShortResponseObject() {
|
||||||
return new RRoom.Short(id, nodeId, slots.getSlots(), locked, new HashMap<>());
|
return new ShortResponseRoom(id, nodeId, slots.getSlots(), locked);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,7 +3,7 @@ package ru.dragonestia.picker.service;
|
|||||||
import ru.dragonestia.picker.api.exception.InvalidRoomIdentifierException;
|
import ru.dragonestia.picker.api.exception.InvalidRoomIdentifierException;
|
||||||
import ru.dragonestia.picker.api.exception.RoomAlreadyExistException;
|
import ru.dragonestia.picker.api.exception.RoomAlreadyExistException;
|
||||||
import ru.dragonestia.picker.api.model.room.RoomDetails;
|
import ru.dragonestia.picker.api.model.room.RoomDetails;
|
||||||
import ru.dragonestia.picker.api.repository.response.type.RRoom;
|
import ru.dragonestia.picker.api.model.room.ShortResponseRoom;
|
||||||
import ru.dragonestia.picker.model.Room;
|
import ru.dragonestia.picker.model.Room;
|
||||||
import ru.dragonestia.picker.model.Node;
|
import ru.dragonestia.picker.model.Node;
|
||||||
import ru.dragonestia.picker.model.User;
|
import ru.dragonestia.picker.model.User;
|
||||||
@ -22,7 +22,7 @@ public interface RoomService {
|
|||||||
|
|
||||||
List<Room> all(Node node);
|
List<Room> all(Node node);
|
||||||
|
|
||||||
List<RRoom.Short> getAllRoomsWithDetailsResponse(Node node, Set<RoomDetails> details);
|
List<ShortResponseRoom> getAllRoomsWithDetailsResponse(Node node, Set<RoomDetails> details);
|
||||||
|
|
||||||
Room pickAvailable(Node node, List<User> users);
|
Room pickAvailable(Node node, List<User> users);
|
||||||
|
|
||||||
|
|||||||
@ -2,8 +2,8 @@ package ru.dragonestia.picker.service;
|
|||||||
|
|
||||||
import ru.dragonestia.picker.api.exception.RoomAreFullException;
|
import ru.dragonestia.picker.api.exception.RoomAreFullException;
|
||||||
import ru.dragonestia.picker.api.model.room.RoomDetails;
|
import ru.dragonestia.picker.api.model.room.RoomDetails;
|
||||||
|
import ru.dragonestia.picker.api.model.room.ShortResponseRoom;
|
||||||
import ru.dragonestia.picker.api.model.user.UserDetails;
|
import ru.dragonestia.picker.api.model.user.UserDetails;
|
||||||
import ru.dragonestia.picker.api.repository.response.type.RRoom;
|
|
||||||
import ru.dragonestia.picker.api.repository.response.type.RUser;
|
import ru.dragonestia.picker.api.repository.response.type.RUser;
|
||||||
import ru.dragonestia.picker.model.Room;
|
import ru.dragonestia.picker.model.Room;
|
||||||
import ru.dragonestia.picker.model.User;
|
import ru.dragonestia.picker.model.User;
|
||||||
@ -16,7 +16,7 @@ public interface UserService {
|
|||||||
|
|
||||||
List<Room> getUserRooms(User user);
|
List<Room> getUserRooms(User user);
|
||||||
|
|
||||||
List<RRoom.Short> getUserRoomsWithDetails(User user, Set<RoomDetails> details);
|
List<ShortResponseRoom> getUserRoomsWithDetails(User user, Set<RoomDetails> details);
|
||||||
|
|
||||||
int linkUsersWithRoom(Room room, Collection<User> users, boolean force) throws RoomAreFullException;
|
int linkUsersWithRoom(Room room, Collection<User> users, boolean force) throws RoomAreFullException;
|
||||||
|
|
||||||
|
|||||||
@ -8,7 +8,7 @@ import ru.dragonestia.picker.api.exception.NodeNotFoundException;
|
|||||||
import ru.dragonestia.picker.api.exception.NotPersistedNodeException;
|
import ru.dragonestia.picker.api.exception.NotPersistedNodeException;
|
||||||
import ru.dragonestia.picker.api.exception.RoomAlreadyExistException;
|
import ru.dragonestia.picker.api.exception.RoomAlreadyExistException;
|
||||||
import ru.dragonestia.picker.api.model.room.RoomDetails;
|
import ru.dragonestia.picker.api.model.room.RoomDetails;
|
||||||
import ru.dragonestia.picker.api.repository.response.type.RRoom;
|
import ru.dragonestia.picker.api.model.room.ShortResponseRoom;
|
||||||
import ru.dragonestia.picker.model.Room;
|
import ru.dragonestia.picker.model.Room;
|
||||||
import ru.dragonestia.picker.model.Node;
|
import ru.dragonestia.picker.model.Node;
|
||||||
import ru.dragonestia.picker.model.User;
|
import ru.dragonestia.picker.model.User;
|
||||||
@ -65,8 +65,8 @@ public class RoomServiceImpl implements RoomService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<RRoom.Short> getAllRoomsWithDetailsResponse(Node node, Set<RoomDetails> details) {
|
public List<ShortResponseRoom> getAllRoomsWithDetailsResponse(Node node, Set<RoomDetails> details) {
|
||||||
var response = new LinkedList<RRoom.Short>();
|
var response = new LinkedList<ShortResponseRoom>();
|
||||||
for (var room: all(node)) {
|
for (var room: all(node)) {
|
||||||
response.add(detailsExtractor.extract(room, details));
|
response.add(detailsExtractor.extract(room, details));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,8 +3,8 @@ package ru.dragonestia.picker.service.impl;
|
|||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import ru.dragonestia.picker.api.model.room.RoomDetails;
|
import ru.dragonestia.picker.api.model.room.RoomDetails;
|
||||||
|
import ru.dragonestia.picker.api.model.room.ShortResponseRoom;
|
||||||
import ru.dragonestia.picker.api.model.user.UserDetails;
|
import ru.dragonestia.picker.api.model.user.UserDetails;
|
||||||
import ru.dragonestia.picker.api.repository.response.type.RRoom;
|
|
||||||
import ru.dragonestia.picker.api.repository.response.type.RUser;
|
import ru.dragonestia.picker.api.repository.response.type.RUser;
|
||||||
import ru.dragonestia.picker.model.Room;
|
import ru.dragonestia.picker.model.Room;
|
||||||
import ru.dragonestia.picker.model.User;
|
import ru.dragonestia.picker.model.User;
|
||||||
@ -27,8 +27,8 @@ public class UserServiceImpl implements UserService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<RRoom.Short> getUserRoomsWithDetails(User user, Set<RoomDetails> details) {
|
public List<ShortResponseRoom> getUserRoomsWithDetails(User user, Set<RoomDetails> details) {
|
||||||
var result = new LinkedList<RRoom.Short>();
|
var result = new LinkedList<ShortResponseRoom>();
|
||||||
for (var room: getUserRooms(user)) {
|
for (var room: getUserRooms(user)) {
|
||||||
result.add(detailsExtractor.extract(room, details));
|
result.add(detailsExtractor.extract(room, details));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,8 +5,8 @@ import org.springframework.stereotype.Component;
|
|||||||
import ru.dragonestia.picker.api.model.node.NodeDetails;
|
import ru.dragonestia.picker.api.model.node.NodeDetails;
|
||||||
import ru.dragonestia.picker.api.model.node.ResponseNode;
|
import ru.dragonestia.picker.api.model.node.ResponseNode;
|
||||||
import ru.dragonestia.picker.api.model.room.RoomDetails;
|
import ru.dragonestia.picker.api.model.room.RoomDetails;
|
||||||
|
import ru.dragonestia.picker.api.model.room.ShortResponseRoom;
|
||||||
import ru.dragonestia.picker.api.model.user.UserDetails;
|
import ru.dragonestia.picker.api.model.user.UserDetails;
|
||||||
import ru.dragonestia.picker.api.repository.response.type.RRoom;
|
|
||||||
import ru.dragonestia.picker.api.repository.response.type.RUser;
|
import ru.dragonestia.picker.api.repository.response.type.RUser;
|
||||||
import ru.dragonestia.picker.model.Node;
|
import ru.dragonestia.picker.model.Node;
|
||||||
import ru.dragonestia.picker.model.Room;
|
import ru.dragonestia.picker.model.Room;
|
||||||
@ -38,18 +38,18 @@ public class DetailsExtractor {
|
|||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
public RRoom.Short extract(Room room, Set<RoomDetails> details) {
|
public ShortResponseRoom extract(Room room, Set<RoomDetails> details) {
|
||||||
var response = room.toShortResponseObject();
|
var response = room.toShortResponseObject();
|
||||||
|
|
||||||
for (var detail: details) {
|
for (var detail: details) {
|
||||||
if (detail == RoomDetails.COUNT_USERS) {
|
if (detail == RoomDetails.COUNT_USERS) {
|
||||||
var users = Integer.toString(userRepository.usersOf(room).size());
|
var users = Integer.toString(userRepository.usersOf(room).size());
|
||||||
response.details().put(RoomDetails.COUNT_USERS, users);
|
response.putDetail(RoomDetails.COUNT_USERS, users);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (detail == RoomDetails.PERSIST) {
|
if (detail == RoomDetails.PERSIST) {
|
||||||
response.details().put(RoomDetails.PERSIST, Boolean.toString(room.isPersist()));
|
response.putDetail(RoomDetails.PERSIST, Boolean.toString(room.isPersist()));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -71,6 +71,6 @@ public class ResponseNode implements INode {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "[NodeDefinition id='%s' pickingMethod=%s]".formatted(id, method);
|
return "[ResponseNode id='%s' pickingMethod=%s]".formatted(id, method);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,27 @@
|
|||||||
package ru.dragonestia.picker.api.model.room;
|
package ru.dragonestia.picker.api.model.room;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
public interface IRoom {
|
public interface IRoom {
|
||||||
|
|
||||||
|
int UNLIMITED_SLOTS = -1;
|
||||||
|
|
||||||
|
@NotNull String getIdentifier();
|
||||||
|
|
||||||
|
@NotNull String getNodeIdentifier();
|
||||||
|
|
||||||
|
int getMaxSlots();
|
||||||
|
|
||||||
|
default boolean hasUnlimitedSlots() {
|
||||||
|
return getMaxSlots() == UNLIMITED_SLOTS;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean isLocked();
|
||||||
|
|
||||||
|
@Nullable Boolean isPersist();
|
||||||
|
|
||||||
|
@Nullable String getPayload();
|
||||||
|
|
||||||
|
@Nullable String getDetail(@NotNull RoomDetails detail);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,108 @@
|
|||||||
|
package ru.dragonestia.picker.api.model.room;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
import java.beans.Transient;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Schema(title = "Room")
|
||||||
|
public class ResponseRoom implements IRoom {
|
||||||
|
|
||||||
|
@Schema(description = "Room identifier", example = "test-room")
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
@Schema(description = "Node identifier", example = "test-node")
|
||||||
|
private String nodeId;
|
||||||
|
|
||||||
|
@Schema(description = "Slots for users. -1 - unlimited slots", example = "25")
|
||||||
|
private int slots;
|
||||||
|
|
||||||
|
@Schema(description = "Does picking skip this room?")
|
||||||
|
private boolean locked;
|
||||||
|
|
||||||
|
@Schema(description = "Payload. Some data")
|
||||||
|
private String payload;
|
||||||
|
|
||||||
|
@Schema(description = "Additional data requested (Key-Value)")
|
||||||
|
private Map<RoomDetails, String> details;
|
||||||
|
|
||||||
|
public ResponseRoom() {}
|
||||||
|
|
||||||
|
public ResponseRoom(@NotNull String id, @NotNull String nodeId, int slots, boolean locked, @NotNull String payload) {
|
||||||
|
this.id = id;
|
||||||
|
this.nodeId = nodeId;
|
||||||
|
this.slots = slots;
|
||||||
|
this.locked = locked;
|
||||||
|
this.payload = payload;
|
||||||
|
details = new HashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull String getIdentifier() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull String getNodeIdentifier() {
|
||||||
|
return nodeId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMaxSlots() {
|
||||||
|
return slots;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isLocked() {
|
||||||
|
return locked;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable Boolean isPersist() {
|
||||||
|
var val = getDetail(RoomDetails.PERSIST);
|
||||||
|
return val == null? null : "true".equals(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable String getPayload() {
|
||||||
|
return payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transient
|
||||||
|
@Override
|
||||||
|
public boolean hasUnlimitedSlots() {
|
||||||
|
return IRoom.super.hasUnlimitedSlots();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable String getDetail(@NotNull RoomDetails detail) {
|
||||||
|
return details.get(detail);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void putDetail(@NotNull RoomDetails detail, @NotNull String value) {
|
||||||
|
details.put(detail, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return id.hashCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object object) {
|
||||||
|
if (object == this) return true;
|
||||||
|
if (object == null) return false;
|
||||||
|
if (object instanceof ResponseRoom other) {
|
||||||
|
return id.equals(other.id);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "[ResponseRoom id='%s' nodeId='%s' slots=%s payload.len=%s]".formatted(id, nodeId, slots, payload.length());
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,103 @@
|
|||||||
|
package ru.dragonestia.picker.api.model.room;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
import java.beans.Transient;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Schema(title = "Room (Short)")
|
||||||
|
public class ShortResponseRoom implements IRoom {
|
||||||
|
|
||||||
|
@Schema(description = "Room identifier", example = "test-room")
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
@Schema(description = "Node identifier", example = "test-node")
|
||||||
|
private String nodeId;
|
||||||
|
|
||||||
|
@Schema(description = "Slots for users. -1 - unlimited slots", example = "25")
|
||||||
|
private int slots;
|
||||||
|
|
||||||
|
@Schema(description = "Does picking skip this room?")
|
||||||
|
private boolean locked;
|
||||||
|
|
||||||
|
@Schema(description = "Additional data requested (Key-Value)")
|
||||||
|
private Map<RoomDetails, String> details;
|
||||||
|
|
||||||
|
public ShortResponseRoom() {}
|
||||||
|
|
||||||
|
public ShortResponseRoom(String id, String nodeId, int slots, boolean locked) {
|
||||||
|
this.id = id;
|
||||||
|
this.nodeId = nodeId;
|
||||||
|
this.slots = slots;
|
||||||
|
this.locked = locked;
|
||||||
|
this.details = new HashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull String getIdentifier() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull String getNodeIdentifier() {
|
||||||
|
return nodeId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMaxSlots() {
|
||||||
|
return slots;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isLocked() {
|
||||||
|
return locked;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable Boolean isPersist() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable String getPayload() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transient
|
||||||
|
@Override
|
||||||
|
public boolean hasUnlimitedSlots() {
|
||||||
|
return IRoom.super.hasUnlimitedSlots();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable String getDetail(@NotNull RoomDetails detail) {
|
||||||
|
return details.get(detail);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void putDetail(@NotNull RoomDetails detail, @NotNull String value) {
|
||||||
|
details.put(detail, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return id.hashCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object object) {
|
||||||
|
if (object == this) return true;
|
||||||
|
if (object == null) return false;
|
||||||
|
if (object instanceof ShortResponseRoom other) {
|
||||||
|
return id.equals(other.id);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "[ShortResponseRoom id='%s' nodeId='%s' slots=%s]".formatted(id, nodeId, slots);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -2,8 +2,9 @@ package ru.dragonestia.picker.api.repository;
|
|||||||
|
|
||||||
import ru.dragonestia.picker.api.exception.*;
|
import ru.dragonestia.picker.api.exception.*;
|
||||||
import ru.dragonestia.picker.api.model.node.ResponseNode;
|
import ru.dragonestia.picker.api.model.node.ResponseNode;
|
||||||
|
import ru.dragonestia.picker.api.model.room.ResponseRoom;
|
||||||
import ru.dragonestia.picker.api.model.room.RoomDetails;
|
import ru.dragonestia.picker.api.model.room.RoomDetails;
|
||||||
import ru.dragonestia.picker.api.repository.response.type.RRoom;
|
import ru.dragonestia.picker.api.model.room.ShortResponseRoom;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
@ -13,19 +14,19 @@ public interface RoomRepository {
|
|||||||
|
|
||||||
Set<RoomDetails> ALL_DETAILS = Set.of(RoomDetails.COUNT_USERS, RoomDetails.PERSIST);
|
Set<RoomDetails> ALL_DETAILS = Set.of(RoomDetails.COUNT_USERS, RoomDetails.PERSIST);
|
||||||
|
|
||||||
void register(RRoom room, boolean persist) throws NodeNotFoundException, InvalidRoomIdentifierException, RoomAlreadyExistException;
|
void register(ResponseRoom room, boolean persist) throws NodeNotFoundException, InvalidRoomIdentifierException, RoomAlreadyExistException;
|
||||||
|
|
||||||
void remove(RRoom room) throws NodeNotFoundException;
|
void remove(ResponseRoom room) throws NodeNotFoundException;
|
||||||
|
|
||||||
void remove(ResponseNode node, RRoom.Short room) throws NodeNotFoundException;
|
void remove(ResponseNode node, ShortResponseRoom room) throws NodeNotFoundException;
|
||||||
|
|
||||||
default List<RRoom.Short> all(ResponseNode node) throws NodeNotFoundException {
|
default List<ShortResponseRoom> all(ResponseNode node) throws NodeNotFoundException {
|
||||||
return all(node, Set.of());
|
return all(node, Set.of());
|
||||||
}
|
}
|
||||||
|
|
||||||
List<RRoom.Short> all(ResponseNode node, Set<RoomDetails> details) throws NodeNotFoundException;
|
List<ShortResponseRoom> all(ResponseNode node, Set<RoomDetails> details) throws NodeNotFoundException;
|
||||||
|
|
||||||
Optional<RRoom> find(ResponseNode node, String roomId) throws NodeNotFoundException;
|
Optional<ResponseRoom> find(ResponseNode node, String roomId) throws NodeNotFoundException;
|
||||||
|
|
||||||
void lock(RRoom room, boolean value) throws NodeNotFoundException, RoomNotFoundException;
|
void lock(ResponseRoom room, boolean value) throws NodeNotFoundException, RoomNotFoundException;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,9 +3,10 @@ package ru.dragonestia.picker.api.repository;
|
|||||||
import ru.dragonestia.picker.api.exception.NodeNotFoundException;
|
import ru.dragonestia.picker.api.exception.NodeNotFoundException;
|
||||||
import ru.dragonestia.picker.api.exception.RoomAreFullException;
|
import ru.dragonestia.picker.api.exception.RoomAreFullException;
|
||||||
import ru.dragonestia.picker.api.exception.RoomNotFoundException;
|
import ru.dragonestia.picker.api.exception.RoomNotFoundException;
|
||||||
|
import ru.dragonestia.picker.api.model.room.ResponseRoom;
|
||||||
import ru.dragonestia.picker.api.model.room.RoomDetails;
|
import ru.dragonestia.picker.api.model.room.RoomDetails;
|
||||||
|
import ru.dragonestia.picker.api.model.room.ShortResponseRoom;
|
||||||
import ru.dragonestia.picker.api.model.user.UserDetails;
|
import ru.dragonestia.picker.api.model.user.UserDetails;
|
||||||
import ru.dragonestia.picker.api.repository.response.type.RRoom;
|
|
||||||
import ru.dragonestia.picker.api.repository.response.type.RUser;
|
import ru.dragonestia.picker.api.repository.response.type.RUser;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@ -16,19 +17,19 @@ public interface UserRepository {
|
|||||||
|
|
||||||
Set<UserDetails> ALL_DETAILS = Set.of(UserDetails.COUNT_ROOMS);
|
Set<UserDetails> ALL_DETAILS = Set.of(UserDetails.COUNT_ROOMS);
|
||||||
|
|
||||||
void linkWithRoom(RRoom room, Collection<RUser> users, boolean force) throws NodeNotFoundException, RoomNotFoundException, RoomAreFullException;
|
void linkWithRoom(ResponseRoom room, Collection<RUser> users, boolean force) throws NodeNotFoundException, RoomNotFoundException, RoomAreFullException;
|
||||||
|
|
||||||
void unlinkFromRoom(RRoom room, Collection<RUser> users) throws NodeNotFoundException, RoomNotFoundException;
|
void unlinkFromRoom(ResponseRoom room, Collection<RUser> users) throws NodeNotFoundException, RoomNotFoundException;
|
||||||
|
|
||||||
default List<RUser> all(RRoom room) throws NodeNotFoundException, RoomNotFoundException {
|
default List<RUser> all(ResponseRoom room) throws NodeNotFoundException, RoomNotFoundException {
|
||||||
return all(room, Set.of());
|
return all(room, Set.of());
|
||||||
}
|
}
|
||||||
|
|
||||||
List<RUser> all(RRoom room, Set<UserDetails> details) throws NodeNotFoundException, RoomNotFoundException;
|
List<RUser> all(ResponseRoom room, Set<UserDetails> details) throws NodeNotFoundException, RoomNotFoundException;
|
||||||
|
|
||||||
List<RUser> search(String input, Set<UserDetails> details);
|
List<RUser> search(String input, Set<UserDetails> details);
|
||||||
|
|
||||||
RUser find(String userId, Set<UserDetails> details);
|
RUser find(String userId, Set<UserDetails> details);
|
||||||
|
|
||||||
List<RRoom.Short> getLinkedRoomsWithUsers(RUser user, Set<RoomDetails> roomDetails);
|
List<ShortResponseRoom> getLinkedRoomsWithUsers(RUser user, Set<RoomDetails> roomDetails);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
package ru.dragonestia.picker.api.repository.response;
|
package ru.dragonestia.picker.api.repository.response;
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import ru.dragonestia.picker.api.repository.response.type.RRoom;
|
import ru.dragonestia.picker.api.model.room.ShortResponseRoom;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Schema(title = "Linked rooms with user", hidden = true)
|
@Schema(title = "Linked rooms with user", hidden = true)
|
||||||
public record LinkedRoomsWithUserResponse(List<RRoom.Short> rooms) {}
|
public record LinkedRoomsWithUserResponse(List<ShortResponseRoom> rooms) {}
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
package ru.dragonestia.picker.api.repository.response;
|
package ru.dragonestia.picker.api.repository.response;
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import ru.dragonestia.picker.api.repository.response.type.RRoom;
|
import ru.dragonestia.picker.api.model.room.ResponseRoom;
|
||||||
|
|
||||||
@Schema(title = "Room info", hidden = true)
|
@Schema(title = "Room info", hidden = true)
|
||||||
public record RoomInfoResponse(RRoom room) {}
|
public record RoomInfoResponse(ResponseRoom room) {}
|
||||||
|
|||||||
@ -1,12 +1,12 @@
|
|||||||
package ru.dragonestia.picker.api.repository.response;
|
package ru.dragonestia.picker.api.repository.response;
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import ru.dragonestia.picker.api.repository.response.type.RRoom;
|
import ru.dragonestia.picker.api.model.room.ShortResponseRoom;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Schema(title = "Room list", hidden = true)
|
@Schema(title = "Room list", hidden = true)
|
||||||
public record RoomListResponse(
|
public record RoomListResponse(
|
||||||
@Schema(description = "Node identifier", example = "test-node") String node,
|
@Schema(description = "Node identifier", example = "test-node") String node,
|
||||||
List<RRoom.Short> rooms
|
List<ShortResponseRoom> rooms
|
||||||
) {}
|
) {}
|
||||||
|
|||||||
@ -1,112 +0,0 @@
|
|||||||
package ru.dragonestia.picker.api.repository.response.type;
|
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
|
||||||
import ru.dragonestia.picker.api.model.node.ResponseNode;
|
|
||||||
import ru.dragonestia.picker.api.model.room.RoomDetails;
|
|
||||||
|
|
||||||
import java.beans.Transient;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
@Schema(title = "Room")
|
|
||||||
public class RRoom {
|
|
||||||
|
|
||||||
public final static int INFINITE_SLOTS = -1;
|
|
||||||
|
|
||||||
@Schema(description = "Room identifier", example = "test-room")
|
|
||||||
private String id;
|
|
||||||
|
|
||||||
@Schema(description = "Node identifier", example = "test-node")
|
|
||||||
private String nodeId;
|
|
||||||
|
|
||||||
@Schema(description = "Slots for users. -1 - unlimited slots", example = "25")
|
|
||||||
private int slots;
|
|
||||||
|
|
||||||
@Schema(description = "Payload. Some data")
|
|
||||||
private String payload;
|
|
||||||
|
|
||||||
@Schema(description = "Does picking skip this room?")
|
|
||||||
private boolean locked = false;
|
|
||||||
|
|
||||||
@Schema(description = "Additional data requested (Key-Value)")
|
|
||||||
private Map<RoomDetails, String> details;
|
|
||||||
|
|
||||||
private RRoom() {}
|
|
||||||
|
|
||||||
public RRoom(String id, String nodeId, int slots, String payload) {
|
|
||||||
this.id = id;
|
|
||||||
this.nodeId = nodeId;
|
|
||||||
this.slots = slots;
|
|
||||||
this.payload = payload;
|
|
||||||
this.details = new HashMap<>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public RRoom(String id, ResponseNode node, int limit, String payload) {
|
|
||||||
this(id, node.getIdentifier(), limit, payload);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getNodeId() {
|
|
||||||
return nodeId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getSlots() {
|
|
||||||
return slots;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getPayload() {
|
|
||||||
return payload;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isLocked() {
|
|
||||||
return locked;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLocked(boolean value) {
|
|
||||||
locked = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transient
|
|
||||||
public boolean isUnlimited() {
|
|
||||||
return slots == INFINITE_SLOTS;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void putDetail(RoomDetails detail, String value) {
|
|
||||||
details.put(detail, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDetail(RoomDetails detail) {
|
|
||||||
return details.get(detail);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map<RoomDetails, String> getDetails() {
|
|
||||||
return details;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
return id.hashCode();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object object) {
|
|
||||||
if (object == this) return true;
|
|
||||||
if (object == null) return false;
|
|
||||||
if (object instanceof RRoom other) {
|
|
||||||
return id.equals(other.id);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Schema(title = "Room (Short)")
|
|
||||||
public record Short(
|
|
||||||
@Schema(description = "Room identifier", example = "test-room") String id,
|
|
||||||
@Schema(description = "Node identifier", example = "test-node") String nodeId,
|
|
||||||
@Schema(description = "Slots for users. -1 - unlimited slots", example = "25") int slots,
|
|
||||||
@Schema(description = "Does picking skip this room?") boolean locked,
|
|
||||||
@Schema(description = "Additional data requested (Key-Value)") Map<RoomDetails, String> details
|
|
||||||
) {}
|
|
||||||
}
|
|
||||||
Loading…
x
Reference in New Issue
Block a user