From 2ea88ab7197d426649b7ea01465dabcb68f3ce92 Mon Sep 17 00:00:00 2001 From: dh1010a Date: Wed, 26 Feb 2025 18:57:00 +0900 Subject: [PATCH 1/4] =?UTF-8?q?fix:=20time=20=EA=B2=80=EC=82=AC=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/bbebig/commonmodule/kafka/dto/ChatMessageDto.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/backend/common-module/src/main/java/com/bbebig/commonmodule/kafka/dto/ChatMessageDto.java b/src/backend/common-module/src/main/java/com/bbebig/commonmodule/kafka/dto/ChatMessageDto.java index c3fe055c..8b0fb318 100644 --- a/src/backend/common-module/src/main/java/com/bbebig/commonmodule/kafka/dto/ChatMessageDto.java +++ b/src/backend/common-module/src/main/java/com/bbebig/commonmodule/kafka/dto/ChatMessageDto.java @@ -49,11 +49,9 @@ public class ChatMessageDto { private List targetMemberIds; // 메시지 대상자 목록 (DM일 경우) // CREATE 시 필요 - @PastOrPresent(message = "생성 시간은 현재 시간 이전이어야 합니다.") private LocalDateTime createdAt; // UPDATE 시 필요 - @PastOrPresent(message = "수정 시간은 현재 시간 이전이어야 합니다.") private LocalDateTime updatedAt; // @JsonCreator와 @JsonProperty를 사용한 생성자 From e794f627fcc1ef5d96eab84c16b051266eb5848d Mon Sep 17 00:00:00 2001 From: dh1010a Date: Thu, 27 Feb 2025 14:11:37 +0900 Subject: [PATCH 2/4] =?UTF-8?q?fix:=20=EC=9D=B4=EB=AF=B8=20=EC=A1=B4?= =?UTF-8?q?=EC=9E=AC=ED=95=98=EB=8A=94=20=EC=84=B8=EC=85=98=EC=9D=B8=20?= =?UTF-8?q?=EA=B2=BD=EC=9A=B0=20=EC=A4=91=EB=B3=B5=20=EC=A0=80=EC=9E=A5=20?= =?UTF-8?q?=EB=B0=A9=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../redis/domain/MemberPresenceStatus.java | 9 ++++++ .../ConnectionEventConsumerService.java | 28 ++++++++++--------- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/src/backend/common-module/src/main/java/com/bbebig/commonmodule/redis/domain/MemberPresenceStatus.java b/src/backend/common-module/src/main/java/com/bbebig/commonmodule/redis/domain/MemberPresenceStatus.java index b969b8ad..60681f2e 100644 --- a/src/backend/common-module/src/main/java/com/bbebig/commonmodule/redis/domain/MemberPresenceStatus.java +++ b/src/backend/common-module/src/main/java/com/bbebig/commonmodule/redis/domain/MemberPresenceStatus.java @@ -35,6 +35,15 @@ public void updateActualStatus(PresenceType actualStatus) { calculateGlobalStatus(); } + public boolean existsDevice(String sessionId) { + for (DeviceInfo deviceInfo : devices) { + if (deviceInfo.getSocketSessionId().equals(sessionId)) { + return true; + } + } + return false; + } + public void updateCustomStatus(PresenceType customStatus) { this.customStatus = customStatus; calculateGlobalStatus(); diff --git a/src/backend/state-server/src/main/java/com/bbebig/stateserver/service/ConnectionEventConsumerService.java b/src/backend/state-server/src/main/java/com/bbebig/stateserver/service/ConnectionEventConsumerService.java index 70adf273..06f54d88 100644 --- a/src/backend/state-server/src/main/java/com/bbebig/stateserver/service/ConnectionEventConsumerService.java +++ b/src/backend/state-server/src/main/java/com/bbebig/stateserver/service/ConnectionEventConsumerService.java @@ -98,20 +98,22 @@ private MemberPresenceStatus handleConnectionEvent(ConnectionEventDto connection memberPresenceStatus.updateLastActivityTime(LocalDateTime.now()); } - DeviceInfo deviceInfo = DeviceInfo.builder() - .platform(connectionEventDto.getPlatform()) - .socketSessionId(connectionEventDto.getSocketSessionId()) - .connectedServerIp(connectionEventDto.getConnectedServerIp()) - .lastActiveTime(LocalDateTime.now()) - .build(); - - // 안드로이드 기기인 경우, 로컬에 있던 정보가 있다면 현재 채널 정보를 업데이트 - if (deviceInfo.getPlatform().equals("ANDROID") && connectionEventDto.getCurrentChannelType() != null) { - deviceInfo.updateCurrent(connectionEventDto.getCurrentChannelType(), - connectionEventDto.getCurrentChannelId(), connectionEventDto.getCurrentServerId()); - } + if (memberPresenceStatus.existsDevice(connectionEventDto.getSocketSessionId())) { + DeviceInfo deviceInfo = DeviceInfo.builder() + .platform(connectionEventDto.getPlatform()) + .socketSessionId(connectionEventDto.getSocketSessionId()) + .connectedServerIp(connectionEventDto.getConnectedServerIp()) + .lastActiveTime(LocalDateTime.now()) + .build(); - memberPresenceStatus.getDevices().add(deviceInfo); + // 안드로이드 기기인 경우, 로컬에 있던 정보가 있다면 현재 채널 정보를 업데이트 + if (deviceInfo.getPlatform().equals("ANDROID") && connectionEventDto.getCurrentChannelType() != null) { + deviceInfo.updateCurrent(connectionEventDto.getCurrentChannelType(), + connectionEventDto.getCurrentChannelId(), connectionEventDto.getCurrentServerId()); + } + + memberPresenceStatus.getDevices().add(deviceInfo); + } memberRedisRepositoryImpl.saveMemberPresenceStatus(connectionEventDto.getMemberId(), memberPresenceStatus); From b2110be92520c2a7e8c50aef1046265b625d82b8 Mon Sep 17 00:00:00 2001 From: dh1010a Date: Thu, 27 Feb 2025 14:16:34 +0900 Subject: [PATCH 3/4] =?UTF-8?q?fix:=20=EC=9D=B4=EB=AF=B8=20=EC=A1=B4?= =?UTF-8?q?=EC=9E=AC=ED=95=98=EB=8A=94=20=EC=84=B8=EC=85=98=EC=9D=B8=20?= =?UTF-8?q?=EA=B2=BD=EC=9A=B0=20=EC=A4=91=EB=B3=B5=20=EC=A0=80=EC=9E=A5=20?= =?UTF-8?q?=EB=B0=A9=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../stateserver/service/ConnectionEventConsumerService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/state-server/src/main/java/com/bbebig/stateserver/service/ConnectionEventConsumerService.java b/src/backend/state-server/src/main/java/com/bbebig/stateserver/service/ConnectionEventConsumerService.java index 06f54d88..04e2daa8 100644 --- a/src/backend/state-server/src/main/java/com/bbebig/stateserver/service/ConnectionEventConsumerService.java +++ b/src/backend/state-server/src/main/java/com/bbebig/stateserver/service/ConnectionEventConsumerService.java @@ -98,7 +98,7 @@ private MemberPresenceStatus handleConnectionEvent(ConnectionEventDto connection memberPresenceStatus.updateLastActivityTime(LocalDateTime.now()); } - if (memberPresenceStatus.existsDevice(connectionEventDto.getSocketSessionId())) { + if (!memberPresenceStatus.existsDevice(connectionEventDto.getSocketSessionId())) { DeviceInfo deviceInfo = DeviceInfo.builder() .platform(connectionEventDto.getPlatform()) .socketSessionId(connectionEventDto.getSocketSessionId()) From 2bdbc4ce8a179332f95a35d82f9492ea718a3305 Mon Sep 17 00:00:00 2001 From: dh1010a Date: Thu, 27 Feb 2025 14:21:48 +0900 Subject: [PATCH 4/4] =?UTF-8?q?fix:=20=EC=83=81=ED=83=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=EC=8B=9C=20=EA=B3=84=EC=82=B0=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bbebig/commonmodule/redis/domain/MemberPresenceStatus.java | 2 +- .../stateserver/service/ConnectionEventConsumerService.java | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/backend/common-module/src/main/java/com/bbebig/commonmodule/redis/domain/MemberPresenceStatus.java b/src/backend/common-module/src/main/java/com/bbebig/commonmodule/redis/domain/MemberPresenceStatus.java index 60681f2e..8d81aad1 100644 --- a/src/backend/common-module/src/main/java/com/bbebig/commonmodule/redis/domain/MemberPresenceStatus.java +++ b/src/backend/common-module/src/main/java/com/bbebig/commonmodule/redis/domain/MemberPresenceStatus.java @@ -57,7 +57,7 @@ public void deleteDevice(String sessionId) { calculateGlobalStatus(); } - private void calculateGlobalStatus() { + public void calculateGlobalStatus() { if (devices == null || devices.isEmpty() || actualStatus == PresenceType.OFFLINE) { actualStatus = PresenceType.OFFLINE; globalStatus = PresenceType.OFFLINE; diff --git a/src/backend/state-server/src/main/java/com/bbebig/stateserver/service/ConnectionEventConsumerService.java b/src/backend/state-server/src/main/java/com/bbebig/stateserver/service/ConnectionEventConsumerService.java index 04e2daa8..42445169 100644 --- a/src/backend/state-server/src/main/java/com/bbebig/stateserver/service/ConnectionEventConsumerService.java +++ b/src/backend/state-server/src/main/java/com/bbebig/stateserver/service/ConnectionEventConsumerService.java @@ -115,6 +115,8 @@ private MemberPresenceStatus handleConnectionEvent(ConnectionEventDto connection memberPresenceStatus.getDevices().add(deviceInfo); } + memberPresenceStatus.calculateGlobalStatus(); + memberRedisRepositoryImpl.saveMemberPresenceStatus(connectionEventDto.getMemberId(), memberPresenceStatus); return memberPresenceStatus; @@ -137,6 +139,7 @@ private MemberPresenceStatus handleDisconnectionEvent(ConnectionEventDto connect memberRedisRepositoryImpl.saveMemberPresenceStatus(connectionEventDto.getMemberId(), memberPresenceStatus); } + memberPresenceStatus.calculateGlobalStatus(); memberRedisRepositoryImpl.saveMemberPresenceStatus(connectionEventDto.getMemberId(), memberPresenceStatus); return memberPresenceStatus; }