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.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);
}
}

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.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)));
}
}

View File

@ -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);
}
}

View File

@ -124,8 +124,8 @@ public class UserRepositoryImpl implements UserRepository {
public List<User> 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();
}
}

View File

@ -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())
);
}

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.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<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.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;
}