From 29fe50d7663bad4822f537c147f0b0ecc1d78c89 Mon Sep 17 00:00:00 2001 From: Hyun Date: Fri, 12 Apr 2024 15:31:37 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20userStorage=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../message/presentation/MessageController.java | 9 ++++----- .../message/presentation/MessageEventListener.java | 9 ++------- src/main/java/site/youtogether/room/Room.java | 13 +++++++++++-- .../youtogether/room/application/RoomService.java | 14 +++++++------- src/main/java/site/youtogether/user/User.java | 3 --- .../youtogether/user/application/UserService.java | 10 +--------- .../user/infrastructure/UserStorage.java | 9 --------- .../java/site/youtogether/util/Initializer.java | 3 --- .../room/application/RoomServiceTest.java | 12 +++--------- .../user/application/UserServiceTest.java | 11 ++--------- 10 files changed, 30 insertions(+), 63 deletions(-) delete mode 100644 src/main/java/site/youtogether/user/infrastructure/UserStorage.java diff --git a/src/main/java/site/youtogether/message/presentation/MessageController.java b/src/main/java/site/youtogether/message/presentation/MessageController.java index dfa9e13..9b842d1 100644 --- a/src/main/java/site/youtogether/message/presentation/MessageController.java +++ b/src/main/java/site/youtogether/message/presentation/MessageController.java @@ -7,24 +7,23 @@ import org.springframework.web.bind.annotation.RestController; import lombok.RequiredArgsConstructor; -import site.youtogether.exception.user.UserNoExistenceException; import site.youtogether.message.ChatMessage; import site.youtogether.message.application.RedisPublisher; +import site.youtogether.room.application.RoomService; import site.youtogether.user.User; -import site.youtogether.user.infrastructure.UserStorage; @RestController @RequiredArgsConstructor public class MessageController { - private final UserStorage userStorage; + private final RoomService roomService; private final RedisPublisher redisPublisher; @MessageMapping("/messages") public void handleMessage(ChatMessage chatMessage, SimpMessageHeaderAccessor headerAccessor) { + String roomCode = (String)headerAccessor.getSessionAttributes().get(ROOM_CODE); Long userId = (Long)headerAccessor.getSessionAttributes().get(USER_ID); - User user = userStorage.findById(userId) - .orElseThrow(UserNoExistenceException::new); + User user = roomService.findParticipant(roomCode, userId); chatMessage.setUserId(user.getUserId()); chatMessage.setNickname(user.getNickname()); diff --git a/src/main/java/site/youtogether/message/presentation/MessageEventListener.java b/src/main/java/site/youtogether/message/presentation/MessageEventListener.java index ab289fd..7ccda48 100644 --- a/src/main/java/site/youtogether/message/presentation/MessageEventListener.java +++ b/src/main/java/site/youtogether/message/presentation/MessageEventListener.java @@ -9,19 +9,16 @@ import org.springframework.web.socket.messaging.SessionSubscribeEvent; import lombok.RequiredArgsConstructor; -import site.youtogether.exception.user.UserNoExistenceException; import site.youtogether.message.ChatMessage; import site.youtogether.message.application.RedisPublisher; import site.youtogether.room.application.RoomService; import site.youtogether.user.User; -import site.youtogether.user.infrastructure.UserStorage; @Component @RequiredArgsConstructor public class MessageEventListener { private final RedisPublisher redisPublisher; - private final UserStorage userStorage; private final RoomService roomService; @EventListener @@ -33,8 +30,7 @@ public void handleWebSocketSubscriberListener(SessionSubscribeEvent event) { headerAccessor.getSessionAttributes().put(ROOM_CODE, roomCode); Long userId = (Long)headerAccessor.getSessionAttributes().get(USER_ID); - User user = userStorage.findById(userId) - .orElseThrow(UserNoExistenceException::new); + User user = roomService.findParticipant(roomCode, userId); redisPublisher.publishParticipantsInfo(roomCode); redisPublisher.publishChat(new ChatMessage(roomCode, null, "[알림]", user.getNickname() + "님이 입장하셨습니다.")); @@ -46,8 +42,7 @@ public void handleWebSocketDisconnectListener(SessionDisconnectEvent event) { String roomCode = (String)headerAccessor.getSessionAttributes().get(ROOM_CODE); Long userId = (Long)headerAccessor.getSessionAttributes().get(USER_ID); - User user = userStorage.findById(userId) - .orElseThrow(UserNoExistenceException::new); + User user = roomService.findParticipant(roomCode, userId); roomService.leave(roomCode, userId); redisPublisher.publishParticipantsInfo(roomCode); diff --git a/src/main/java/site/youtogether/room/Room.java b/src/main/java/site/youtogether/room/Room.java index 667f261..88badc9 100644 --- a/src/main/java/site/youtogether/room/Room.java +++ b/src/main/java/site/youtogether/room/Room.java @@ -5,6 +5,7 @@ import java.time.LocalDateTime; import java.util.HashMap; import java.util.Map; +import java.util.Optional; import org.springframework.data.annotation.Id; @@ -16,6 +17,7 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import site.youtogether.exception.user.UserNoExistenceException; import site.youtogether.user.User; import site.youtogether.util.RandomUtil; @@ -50,6 +52,11 @@ public Room(String title, int capacity, String password, LocalDateTime createdAt participants.put(host.getUserId(), host); } + public User findParticipantBy(Long userId) { + return Optional.ofNullable(participants.get(userId)) + .orElseThrow(UserNoExistenceException::new); + } + public boolean hasPassword() { return password != null; } @@ -62,13 +69,15 @@ public void leaveParticipant(Long userId) { participants.remove(userId); } - public void changeParticipantName(Long userId, String updateNickname) { - User user = participants.get(userId); + public User changeParticipantName(Long userId, String updateNickname) { + User user = findParticipantBy(userId); user.changeNickname(updateNickname); if (userId.equals(host.getUserId())) { host = user; } + + return user; } } diff --git a/src/main/java/site/youtogether/room/application/RoomService.java b/src/main/java/site/youtogether/room/application/RoomService.java index e23a943..f500e1f 100644 --- a/src/main/java/site/youtogether/room/application/RoomService.java +++ b/src/main/java/site/youtogether/room/application/RoomService.java @@ -15,7 +15,6 @@ import site.youtogether.room.infrastructure.RoomStorage; import site.youtogether.user.Role; import site.youtogether.user.User; -import site.youtogether.user.infrastructure.UserStorage; import site.youtogether.user.infrastructure.UserTrackingStorage; import site.youtogether.util.RandomUtil; @@ -24,7 +23,6 @@ public class RoomService { private final RoomStorage roomStorage; - private final UserStorage userStorage; private final UserTrackingStorage userTrackingStorage; public RoomDetail create(String cookieValue, RoomSettings roomSettings, LocalDateTime now) { @@ -44,9 +42,7 @@ public RoomDetail create(String cookieValue, RoomSettings roomSettings, LocalDat .host(host) .build(); - userStorage.save(host); roomStorage.save(room); - return new RoomDetail(room, host); } @@ -68,8 +64,6 @@ public RoomDetail enter(String cookieValue, String roomCode) { .orElseThrow(RoomNoExistenceException::new); room.enterParticipant(user); - - userStorage.save(user); roomStorage.save(room); return new RoomDetail(room, user); @@ -80,10 +74,16 @@ public void leave(String roomCode, Long userId) { .orElseThrow(RoomNoExistenceException::new); room.leaveParticipant(userId); - userStorage.deleteById(userId); userTrackingStorage.delete(userId); roomStorage.save(room); } + public User findParticipant(String roomCode, Long userId) { + Room room = roomStorage.findById(roomCode) + .orElseThrow(RoomNoExistenceException::new); + + return room.findParticipantBy(userId); + } + } diff --git a/src/main/java/site/youtogether/user/User.java b/src/main/java/site/youtogether/user/User.java index be49af3..7c0316d 100644 --- a/src/main/java/site/youtogether/user/User.java +++ b/src/main/java/site/youtogether/user/User.java @@ -2,12 +2,9 @@ import org.springframework.data.annotation.Id; -import com.redis.om.spring.annotations.Document; - import lombok.Builder; import lombok.Getter; -@Document(value = "user") @Getter public class User { diff --git a/src/main/java/site/youtogether/user/application/UserService.java b/src/main/java/site/youtogether/user/application/UserService.java index f8e5619..5b34934 100644 --- a/src/main/java/site/youtogether/user/application/UserService.java +++ b/src/main/java/site/youtogether/user/application/UserService.java @@ -4,31 +4,23 @@ import lombok.RequiredArgsConstructor; import site.youtogether.exception.room.RoomNoExistenceException; -import site.youtogether.exception.user.UserNoExistenceException; import site.youtogether.message.application.RedisSubscriber; import site.youtogether.room.Room; import site.youtogether.room.infrastructure.RoomStorage; import site.youtogether.user.User; import site.youtogether.user.dto.UserInfo; -import site.youtogether.user.infrastructure.UserStorage; @Service @RequiredArgsConstructor public class UserService { - private final UserStorage userStorage; private final RoomStorage roomStorage; private final RedisSubscriber redisSubscriber; public UserInfo updateUserNickname(Long userId, String updateNickname, String roomCode) { - User user = userStorage.findById(userId) - .orElseThrow(UserNoExistenceException::new); - user.changeNickname(updateNickname); - userStorage.save(user); - Room room = roomStorage.findById(roomCode) .orElseThrow(RoomNoExistenceException::new); - room.changeParticipantName(userId, updateNickname); + User user = room.changeParticipantName(userId, updateNickname); roomStorage.save(room); redisSubscriber.sendParticipantsInfo(roomCode); diff --git a/src/main/java/site/youtogether/user/infrastructure/UserStorage.java b/src/main/java/site/youtogether/user/infrastructure/UserStorage.java deleted file mode 100644 index 2ec40e0..0000000 --- a/src/main/java/site/youtogether/user/infrastructure/UserStorage.java +++ /dev/null @@ -1,9 +0,0 @@ -package site.youtogether.user.infrastructure; - -import com.redis.om.spring.repository.RedisDocumentRepository; - -import site.youtogether.user.User; - -public interface UserStorage extends RedisDocumentRepository { - -} diff --git a/src/main/java/site/youtogether/util/Initializer.java b/src/main/java/site/youtogether/util/Initializer.java index 84adda5..1d03d41 100644 --- a/src/main/java/site/youtogether/util/Initializer.java +++ b/src/main/java/site/youtogether/util/Initializer.java @@ -15,7 +15,6 @@ import site.youtogether.room.infrastructure.RoomStorage; import site.youtogether.user.Role; import site.youtogether.user.User; -import site.youtogether.user.infrastructure.UserStorage; @Profile("!test") @Component @@ -26,13 +25,11 @@ public class Initializer implements ApplicationRunner { private static final int PASSWORD_ROOM_COUNT = 55; private final RoomStorage roomStorage; - private final UserStorage userStorage; private final RedisTemplate redisTemplate; @Override public void run(ApplicationArguments args) throws Exception { roomStorage.deleteAll(); - userStorage.deleteAll(); redisTemplate.delete(redisTemplate.keys(USER_TRACKING_KEY_PREFIX + "*")); redisTemplate.delete(redisTemplate.keys(USER_ID_KEY_PREFIX + "*")); diff --git a/src/test/java/site/youtogether/room/application/RoomServiceTest.java b/src/test/java/site/youtogether/room/application/RoomServiceTest.java index bcf4fba..e029556 100644 --- a/src/test/java/site/youtogether/room/application/RoomServiceTest.java +++ b/src/test/java/site/youtogether/room/application/RoomServiceTest.java @@ -20,7 +20,6 @@ import site.youtogether.room.infrastructure.RoomStorage; import site.youtogether.user.Role; import site.youtogether.user.User; -import site.youtogether.user.infrastructure.UserStorage; import site.youtogether.user.infrastructure.UserTrackingStorage; class RoomServiceTest extends IntegrationTestSupport { @@ -31,9 +30,6 @@ class RoomServiceTest extends IntegrationTestSupport { @Autowired private RoomStorage roomStorage; - @Autowired - private UserStorage userStorage; - @Autowired private UserTrackingStorage userTrackingStorage; @@ -43,7 +39,6 @@ class RoomServiceTest extends IntegrationTestSupport { @AfterEach void clean() { roomStorage.deleteAll(); - userStorage.deleteAll(); redisTemplate.delete(redisTemplate.keys(USER_TRACKING_KEY_PREFIX + "*")); redisTemplate.delete(redisTemplate.keys(USER_ID_KEY_PREFIX + "*")); @@ -66,7 +61,7 @@ void createSuccess() { // then Room room = roomStorage.findById(createdRoomDetail.getRoomCode()).get(); Long userId = userTrackingStorage.findByCookieValue(cookieValue).get(); - User user = userStorage.findById(userId).get(); + User user = room.findParticipantBy(userId); assertThat(createdRoomDetail.getRoomCode()).hasSize(ROOM_CODE_LENGTH); assertThat(createdRoomDetail.getRoomCode()).isEqualTo(room.getCode()); @@ -130,8 +125,8 @@ void enterRoom() throws Exception { // then Long userId = userTrackingStorage.findByCookieValue(cookieValue).get(); - User enterUser = userStorage.findById(userId).get(); Room savedRoom = roomStorage.findById(room.getCode()).get(); + User enterUser = savedRoom.findParticipantBy(userId); assertThat(savedRoom.getParticipants()).containsKey(userId); assertThat(savedRoom.getParticipants().get(userId)).usingRecursiveComparison().isEqualTo(enterUser); @@ -156,12 +151,11 @@ void leaveRoom() throws Exception { // then Room savedRoom = roomStorage.findById(room.getCode()).get(); assertThat(savedRoom.getParticipants()).doesNotContainKey(user.getUserId()); - assertThat(userStorage.findById(user.getUserId())).isEmpty(); } private Room createRoom(LocalDateTime createTime, String title) { User user = User.builder() - .userId(1L) + .userId(100L) .build(); Room room = Room.builder() diff --git a/src/test/java/site/youtogether/user/application/UserServiceTest.java b/src/test/java/site/youtogether/user/application/UserServiceTest.java index 6e0a5bb..a60e79d 100644 --- a/src/test/java/site/youtogether/user/application/UserServiceTest.java +++ b/src/test/java/site/youtogether/user/application/UserServiceTest.java @@ -15,7 +15,6 @@ import site.youtogether.user.Role; import site.youtogether.user.User; import site.youtogether.user.dto.UserInfo; -import site.youtogether.user.infrastructure.UserStorage; class UserServiceTest extends IntegrationTestSupport { @@ -25,13 +24,9 @@ class UserServiceTest extends IntegrationTestSupport { @Autowired private RoomStorage roomStorage; - @Autowired - private UserStorage userStorage; - @AfterEach void clean() { roomStorage.deleteAll(); - userStorage.deleteAll(); } @Test @@ -47,7 +42,6 @@ void updateNickname() throws Exception { .build(); room.enterParticipant(user); roomStorage.save(room); - userStorage.save(user); String updateNickname = "연똥땡"; @@ -61,7 +55,7 @@ void updateNickname() throws Exception { User participant = savedRoom.getParticipants().get(user.getUserId()); assertThat(participant.getNickname()).isEqualTo(updateNickname); - User savedUser = userStorage.findById(user.getUserId()).get(); + User savedUser = savedRoom.findParticipantBy(user.getUserId()); assertThat(savedUser.getNickname()).isEqualTo(updateNickname); } @@ -85,7 +79,7 @@ void updateHostNickname() throws Exception { assertThat(participant.getNickname()).isEqualTo(updateNickname); assertThat(savedRoom.getHost().getNickname()).isEqualTo(updateNickname); - User savedUser = userStorage.findById(hostId).get(); + User savedUser = savedRoom.findParticipantBy(hostId); assertThat(savedUser.getNickname()).isEqualTo(updateNickname); } @@ -101,7 +95,6 @@ private Room createRoom(LocalDateTime createTime, String title, String hostNickn .createdAt(createTime) .build(); - userStorage.save(user); roomStorage.save(room); return room;