diff --git a/server/src/main/java/ru/dragonestia/picker/config/TestConfig.java b/server/src/main/java/ru/dragonestia/picker/config/TestConfig.java index af1e16c..b6af4be 100644 --- a/server/src/main/java/ru/dragonestia/picker/config/TestConfig.java +++ b/server/src/main/java/ru/dragonestia/picker/config/TestConfig.java @@ -14,6 +14,7 @@ import ru.dragonestia.picker.api.model.node.PickingMethod; import ru.dragonestia.picker.api.model.room.IRoom; import ru.dragonestia.picker.api.repository.type.NodeIdentifier; import ru.dragonestia.picker.api.repository.type.RoomIdentifier; +import ru.dragonestia.picker.api.repository.type.UserIdentifier; import ru.dragonestia.picker.interceptor.DebugInterceptor; import ru.dragonestia.picker.model.Room; import ru.dragonestia.picker.model.Node; @@ -61,7 +62,7 @@ public class TestConfig implements WebMvcConfigurer { roomRepository.create(room); for (int j = 0, n = rand.nextInt(slots + 1); j < n; j++) { - var user = new User("test-user-" + rand.nextInt(20)); + var user = new User(UserIdentifier.of("test-user-" + rand.nextInt(20))); userRepository.linkWithRoom(room, List.of(user), false); } } diff --git a/server/src/main/java/ru/dragonestia/picker/controller/UserController.java b/server/src/main/java/ru/dragonestia/picker/controller/UserController.java index 1afe677..5714aba 100644 --- a/server/src/main/java/ru/dragonestia/picker/controller/UserController.java +++ b/server/src/main/java/ru/dragonestia/picker/controller/UserController.java @@ -9,6 +9,7 @@ import ru.dragonestia.picker.api.model.user.ResponseUser; import ru.dragonestia.picker.api.repository.response.LinkedRoomsWithUserResponse; import ru.dragonestia.picker.api.repository.response.SearchUserResponse; import ru.dragonestia.picker.api.repository.response.UserDetailsResponse; +import ru.dragonestia.picker.api.repository.type.UserIdentifier; import ru.dragonestia.picker.model.User; import ru.dragonestia.picker.service.UserService; import ru.dragonestia.picker.util.DetailsParser; @@ -62,6 +63,6 @@ public class UserController { return new LinkedRoomsWithUserResponse(List.of()); } - return new LinkedRoomsWithUserResponse(userService.getUserRoomsWithDetails(new User(userId), detailsParser.parseRoomDetails(detailsSeq))); + return new LinkedRoomsWithUserResponse(userService.getUserRoomsWithDetails(new User(UserIdentifier.of(userId)), detailsParser.parseRoomDetails(detailsSeq))); } } diff --git a/server/src/main/java/ru/dragonestia/picker/model/User.java b/server/src/main/java/ru/dragonestia/picker/model/User.java index f28f5c7..1af895b 100644 --- a/server/src/main/java/ru/dragonestia/picker/model/User.java +++ b/server/src/main/java/ru/dragonestia/picker/model/User.java @@ -1,13 +1,37 @@ package ru.dragonestia.picker.model; -import lombok.NonNull; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import ru.dragonestia.picker.api.model.user.IUser; import ru.dragonestia.picker.api.model.user.ResponseUser; +import ru.dragonestia.picker.api.model.user.UserDetails; +import ru.dragonestia.picker.api.repository.type.UserIdentifier; -public record User(@NonNull String id) { +public class User implements IUser { + + private final String identifier; + + public User(@NotNull UserIdentifier identifier) { + this.identifier = identifier.getValue(); + } + + @Override + public @NotNull String getIdentifier() { + return identifier; + } + + @Override + public @Nullable String getDetail(@NotNull UserDetails detail) { + throw new UnsupportedOperationException(); + } + + public @NotNull ResponseUser toResponseObject() { + return new ResponseUser(identifier); + } @Override public int hashCode() { - return id.hashCode(); + return identifier.hashCode(); } @Override @@ -15,12 +39,8 @@ public record User(@NonNull String id) { if (object == this) return true; if (object == null) return false; if (object instanceof User other) { - return id.equals(other.id); + return identifier.equals(other.identifier); } return false; } - - public ResponseUser toResponseObject() { - return new ResponseUser(id); - } } diff --git a/server/src/main/java/ru/dragonestia/picker/repository/impl/UserRepositoryImpl.java b/server/src/main/java/ru/dragonestia/picker/repository/impl/UserRepositoryImpl.java index 269a0c6..73b8d62 100644 --- a/server/src/main/java/ru/dragonestia/picker/repository/impl/UserRepositoryImpl.java +++ b/server/src/main/java/ru/dragonestia/picker/repository/impl/UserRepositoryImpl.java @@ -124,8 +124,8 @@ public class UserRepositoryImpl implements UserRepository { public List search(String input) { synchronized (usersMap) { return usersMap.keySet().stream() - .filter(user -> user.id().startsWith(input)) - .sorted(Comparator.comparing(User::id)) + .filter(user -> user.getIdentifier().startsWith(input)) + .sorted(Comparator.comparing(User::getIdentifier)) .toList(); } } 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 5c08f10..af05a0f 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 @@ -90,7 +90,7 @@ public class RoomServiceImpl implements RoomService { room.getMaxSlots(), roomUsers.size(), room.isLocked(), - roomUsers.stream().map(User::id).collect(Collectors.toSet()) + roomUsers.stream().map(User::getIdentifier).collect(Collectors.toSet()) ); } diff --git a/server/src/main/java/ru/dragonestia/picker/service/impl/UserServiceImpl.java b/server/src/main/java/ru/dragonestia/picker/service/impl/UserServiceImpl.java index ad9c1cb..1b68dbe 100644 --- a/server/src/main/java/ru/dragonestia/picker/service/impl/UserServiceImpl.java +++ b/server/src/main/java/ru/dragonestia/picker/service/impl/UserServiceImpl.java @@ -6,6 +6,7 @@ import ru.dragonestia.picker.api.model.room.RoomDetails; import ru.dragonestia.picker.api.model.room.ShortResponseRoom; import ru.dragonestia.picker.api.model.user.ResponseUser; import ru.dragonestia.picker.api.model.user.UserDetails; +import ru.dragonestia.picker.api.repository.type.UserIdentifier; import ru.dragonestia.picker.model.Room; import ru.dragonestia.picker.model.User; import ru.dragonestia.picker.repository.UserRepository; @@ -67,6 +68,6 @@ public class UserServiceImpl implements UserService { @Override public ResponseUser getUserDetails(String userId, Set details) { - return detailsExtractor.extract(new User(userId), details); + return detailsExtractor.extract(new User(UserIdentifier.of(userId)), details); } } diff --git a/server/src/main/java/ru/dragonestia/picker/util/NamingValidator.java b/server/src/main/java/ru/dragonestia/picker/util/NamingValidator.java index 9ed1238..d49c263 100644 --- a/server/src/main/java/ru/dragonestia/picker/util/NamingValidator.java +++ b/server/src/main/java/ru/dragonestia/picker/util/NamingValidator.java @@ -4,6 +4,7 @@ import org.springframework.stereotype.Component; import ru.dragonestia.picker.api.exception.InvalidNodeIdentifierException; import ru.dragonestia.picker.api.exception.InvalidRoomIdentifierException; import ru.dragonestia.picker.api.exception.InvalidUsernamesException; +import ru.dragonestia.picker.api.repository.type.UserIdentifier; import ru.dragonestia.picker.api.util.IdentifierValidator; import ru.dragonestia.picker.model.User; @@ -35,7 +36,7 @@ public class NamingValidator { for (var username: input) { if (validateUserId(username)) { - users.add(new User(username)); + users.add(new User(UserIdentifier.of(username))); continue; }