From 5ca6c02e54c8aa21462692da55d948e741a436c8 Mon Sep 17 00:00:00 2001 From: ScarletRedMan Date: Wed, 13 Mar 2024 12:02:10 +0700 Subject: [PATCH] Implemented UserRepository --- .../impl/repository/UserRepositoryImpl.java | 50 ++++++++++++++++--- 1 file changed, 44 insertions(+), 6 deletions(-) diff --git a/client-impl/src/main/java/ru/dragonestia/picker/api/impl/repository/UserRepositoryImpl.java b/client-impl/src/main/java/ru/dragonestia/picker/api/impl/repository/UserRepositoryImpl.java index 0256db3..7a04046 100644 --- a/client-impl/src/main/java/ru/dragonestia/picker/api/impl/repository/UserRepositoryImpl.java +++ b/client-impl/src/main/java/ru/dragonestia/picker/api/impl/repository/UserRepositoryImpl.java @@ -3,11 +3,17 @@ package ru.dragonestia.picker.api.impl.repository; import org.jetbrains.annotations.ApiStatus.Internal; import org.jetbrains.annotations.NotNull; import ru.dragonestia.picker.api.impl.RoomPickerClient; +import ru.dragonestia.picker.api.impl.util.EnumUtils; import ru.dragonestia.picker.api.impl.util.RestTemplate; +import ru.dragonestia.picker.api.impl.util.type.HttpMethod; import ru.dragonestia.picker.api.model.room.ShortResponseRoom; import ru.dragonestia.picker.api.model.user.ResponseUser; import ru.dragonestia.picker.api.repository.UserRepository; import ru.dragonestia.picker.api.repository.request.user.*; +import ru.dragonestia.picker.api.repository.response.LinkedRoomsWithUserResponse; +import ru.dragonestia.picker.api.repository.response.RoomUserListResponse; +import ru.dragonestia.picker.api.repository.response.SearchUserResponse; +import ru.dragonestia.picker.api.repository.response.UserDetailsResponse; import java.util.List; @@ -22,31 +28,63 @@ public class UserRepositoryImpl implements UserRepository { @Override public void linkUsersWithRoom(@NotNull LinkUsersWithRoom request) { - throw new UnsupportedOperationException("Not implemented"); + rest.query("/nodes/%s/rooms/%s/users".formatted(request.getNodeId(), request.getRoomId()), + HttpMethod.POST, + params -> { + params.put("userIds", String.join(",", request.getUsers())); + params.put("force", Boolean.toString(request.ignoreSlotLimitation())); + }); } @Override public void unlinkUsersFromRoom(@NotNull UnlinkUsersFromRoom request) { - throw new UnsupportedOperationException("Not implemented"); + rest.query("/nodes/%s/rooms/%s/users".formatted(request.getNodeId(), request.getRoomId()), + HttpMethod.DELETE, + params -> { + params.put("userIds", String.join(",", request.getUsers())); + }); } @Override public @NotNull List getAllUsersFormRoom(@NotNull GetAllUsersFromRoom request) { - throw new UnsupportedOperationException("Not implemented"); + return rest.query("/nodes/%s/rooms/%s/users".formatted(request.getNodeId(), request.getRoomId()), + HttpMethod.GET, + RoomUserListResponse.class, + params -> { + var detailsStr = String.join(",", EnumUtils.enumSetToString(request.getDetails())); + + params.put("requiredDetails", detailsStr); + }).users(); } @Override public @NotNull List searchUsers(@NotNull SearchUsers request) { - throw new UnsupportedOperationException("Not implemented"); + return rest.query("/users/search", + HttpMethod.GET, + SearchUserResponse.class, + params -> { + params.put("requiredDetails", EnumUtils.enumSetToString(request.getDetails())); + params.put("input", request.getSearchInput()); + }).users(); } @Override public @NotNull ResponseUser findUserById(@NotNull FindUserById request) { - throw new UnsupportedOperationException("Not implemented"); + return rest.query("/users/" + request.getUserId(), + HttpMethod.GET, + UserDetailsResponse.class, + params -> { + params.put("requiredDetails", EnumUtils.enumSetToString(request.getDetails())); + }).user(); } @Override public @NotNull List findRoomsLinkedWithUser(@NotNull FindRoomsLinkedWithUser request) { - throw new UnsupportedOperationException("Not implemented"); + return rest.query("/users/" + request.getUserId() + "/rooms", + HttpMethod.GET, + LinkedRoomsWithUserResponse.class, + params -> { + params.put("requiredDetails", EnumUtils.enumSetToString(request.getDetails())); + }).rooms(); } }