Refactored model User

This commit is contained in:
Andrey Terentev 2024-03-13 16:09:24 +07:00 committed by Andrey Terentev
parent dfd6dbaf17
commit 8a9da6c534
7 changed files with 39 additions and 15 deletions

View File

@ -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.model.room.IRoom;
import ru.dragonestia.picker.api.repository.type.NodeIdentifier; import ru.dragonestia.picker.api.repository.type.NodeIdentifier;
import ru.dragonestia.picker.api.repository.type.RoomIdentifier; 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.interceptor.DebugInterceptor;
import ru.dragonestia.picker.model.Room; import ru.dragonestia.picker.model.Room;
import ru.dragonestia.picker.model.Node; import ru.dragonestia.picker.model.Node;
@ -61,7 +62,7 @@ public class TestConfig implements WebMvcConfigurer {
roomRepository.create(room); roomRepository.create(room);
for (int j = 0, n = rand.nextInt(slots + 1); j < n; j++) { 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); userRepository.linkWithRoom(room, List.of(user), false);
} }
} }

View File

@ -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.LinkedRoomsWithUserResponse;
import ru.dragonestia.picker.api.repository.response.SearchUserResponse; import ru.dragonestia.picker.api.repository.response.SearchUserResponse;
import ru.dragonestia.picker.api.repository.response.UserDetailsResponse; 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.model.User;
import ru.dragonestia.picker.service.UserService; import ru.dragonestia.picker.service.UserService;
import ru.dragonestia.picker.util.DetailsParser; import ru.dragonestia.picker.util.DetailsParser;
@ -62,6 +63,6 @@ public class UserController {
return new LinkedRoomsWithUserResponse(List.of()); 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)));
} }
} }

View File

@ -1,13 +1,37 @@
package ru.dragonestia.picker.model; 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.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 @Override
public int hashCode() { public int hashCode() {
return id.hashCode(); return identifier.hashCode();
} }
@Override @Override
@ -15,12 +39,8 @@ public record User(@NonNull String id) {
if (object == this) return true; if (object == this) return true;
if (object == null) return false; if (object == null) return false;
if (object instanceof User other) { if (object instanceof User other) {
return id.equals(other.id); return identifier.equals(other.identifier);
} }
return false; return false;
} }
public ResponseUser toResponseObject() {
return new ResponseUser(id);
}
} }

View File

@ -124,8 +124,8 @@ public class UserRepositoryImpl implements UserRepository {
public List<User> search(String input) { public List<User> search(String input) {
synchronized (usersMap) { synchronized (usersMap) {
return usersMap.keySet().stream() return usersMap.keySet().stream()
.filter(user -> user.id().startsWith(input)) .filter(user -> user.getIdentifier().startsWith(input))
.sorted(Comparator.comparing(User::id)) .sorted(Comparator.comparing(User::getIdentifier))
.toList(); .toList();
} }
} }

View File

@ -90,7 +90,7 @@ public class RoomServiceImpl implements RoomService {
room.getMaxSlots(), room.getMaxSlots(),
roomUsers.size(), roomUsers.size(),
room.isLocked(), room.isLocked(),
roomUsers.stream().map(User::id).collect(Collectors.toSet()) roomUsers.stream().map(User::getIdentifier).collect(Collectors.toSet())
); );
} }

View File

@ -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.room.ShortResponseRoom;
import ru.dragonestia.picker.api.model.user.ResponseUser; import ru.dragonestia.picker.api.model.user.ResponseUser;
import ru.dragonestia.picker.api.model.user.UserDetails; 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.Room;
import ru.dragonestia.picker.model.User; import ru.dragonestia.picker.model.User;
import ru.dragonestia.picker.repository.UserRepository; import ru.dragonestia.picker.repository.UserRepository;
@ -67,6 +68,6 @@ public class UserServiceImpl implements UserService {
@Override @Override
public ResponseUser getUserDetails(String userId, Set<UserDetails> details) { public ResponseUser getUserDetails(String userId, Set<UserDetails> details) {
return detailsExtractor.extract(new User(userId), details); return detailsExtractor.extract(new User(UserIdentifier.of(userId)), details);
} }
} }

View File

@ -4,6 +4,7 @@ import org.springframework.stereotype.Component;
import ru.dragonestia.picker.api.exception.InvalidNodeIdentifierException; import ru.dragonestia.picker.api.exception.InvalidNodeIdentifierException;
import ru.dragonestia.picker.api.exception.InvalidRoomIdentifierException; import ru.dragonestia.picker.api.exception.InvalidRoomIdentifierException;
import ru.dragonestia.picker.api.exception.InvalidUsernamesException; 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.api.util.IdentifierValidator;
import ru.dragonestia.picker.model.User; import ru.dragonestia.picker.model.User;
@ -35,7 +36,7 @@ public class NamingValidator {
for (var username: input) { for (var username: input) {
if (validateUserId(username)) { if (validateUserId(username)) {
users.add(new User(username)); users.add(new User(UserIdentifier.of(username)));
continue; continue;
} }