Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: userStorage 제거 #36

Merged
merged 1 commit into from
Apr 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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() + "님이 입장하셨습니다."));
Expand All @@ -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);
Expand Down
13 changes: 11 additions & 2 deletions src/main/java/site/youtogether/room/Room.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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;

Expand Down Expand Up @@ -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;
}
Expand All @@ -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;
}

}
14 changes: 7 additions & 7 deletions src/main/java/site/youtogether/room/application/RoomService.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;

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

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

}
3 changes: 0 additions & 3 deletions src/main/java/site/youtogether/user/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -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 {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

This file was deleted.

3 changes: 0 additions & 3 deletions src/main/java/site/youtogether/util/Initializer.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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<String, String> 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 + "*"));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -31,9 +30,6 @@ class RoomServiceTest extends IntegrationTestSupport {
@Autowired
private RoomStorage roomStorage;

@Autowired
private UserStorage userStorage;

@Autowired
private UserTrackingStorage userTrackingStorage;

Expand All @@ -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 + "*"));
Expand All @@ -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());
Expand Down Expand Up @@ -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);
Expand All @@ -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()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {

Expand All @@ -25,13 +24,9 @@ class UserServiceTest extends IntegrationTestSupport {
@Autowired
private RoomStorage roomStorage;

@Autowired
private UserStorage userStorage;

@AfterEach
void clean() {
roomStorage.deleteAll();
userStorage.deleteAll();
}

@Test
Expand All @@ -47,7 +42,6 @@ void updateNickname() throws Exception {
.build();
room.enterParticipant(user);
roomStorage.save(room);
userStorage.save(user);

String updateNickname = "연똥땡";

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

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

Expand All @@ -101,7 +95,6 @@ private Room createRoom(LocalDateTime createTime, String title, String hostNickn
.createdAt(createTime)
.build();

userStorage.save(user);
roomStorage.save(room);

return room;
Expand Down
Loading