Skip to content

Commit

Permalink
[Feat/#262] Update lastAccessTime each time a chatroom message is rec…
Browse files Browse the repository at this point in the history
…eived
  • Loading branch information
ahnsugyeong committed Jun 4, 2024
1 parent 190b05f commit 31e1b37
Showing 1 changed file with 24 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
package com.example.waggle.global.config.websocket;

import static org.springframework.messaging.simp.stomp.StompCommand.CONNECT;
import static org.springframework.messaging.simp.stomp.StompCommand.SEND;
import static org.springframework.messaging.simp.stomp.StompCommand.SUBSCRIBE;

import com.example.waggle.domain.chat.application.room.ChatRoomCommandService;
import com.example.waggle.domain.member.application.MemberQueryService;
import com.example.waggle.domain.member.persistence.entity.Member;
import com.example.waggle.exception.object.handler.MemberHandler;
import com.example.waggle.exception.payload.code.ErrorStatus;
import com.example.waggle.security.jwt.service.TokenService;
import java.time.LocalDateTime;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.Ordered;
Expand All @@ -16,8 +22,6 @@
import org.springframework.messaging.support.MessageHeaderAccessor;
import org.springframework.stereotype.Component;

import static org.springframework.messaging.simp.stomp.StompCommand.*;

@Order(Ordered.HIGHEST_PRECEDENCE + 99) // 우선 순위를 높게 설정해서 SecurityFilter들 보다 앞서 실행되게 해준다.
@Component
@RequiredArgsConstructor
Expand All @@ -26,13 +30,19 @@ public class StompHandler implements ChannelInterceptor {

private final TokenService tokenService;
private final MemberQueryService memberQueryService;
private final ChatRoomCommandService chatRoomCommandService;

@Override
public Message<?> preSend(Message<?> message, MessageChannel channel) {
StompHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);
if (accessor.getCommand() == CONNECT || accessor.getCommand() == SEND || accessor.getCommand() == SUBSCRIBE) {
Member member = getMemberByAccessToken(getAccessToken(accessor));
accessor.setUser(() -> member.getUsername());

Long chatRoomId = getChatRoomId(accessor);
if (chatRoomId != null) {
chatRoomCommandService.updateLastAccessTime(member, chatRoomId, LocalDateTime.now());
}
}
return message;
}
Expand All @@ -52,4 +62,16 @@ private Member getMemberByAccessToken(String accessToken) {
String username = tokenService.getAuthentication(accessToken).getName();
return memberQueryService.getMemberByUsername(username);
}

private Long getChatRoomId(StompHeaderAccessor accessor) {
String chatRoomIdStr = accessor.getFirstNativeHeader("chatRoomId");
if (chatRoomIdStr != null) {
try {
return Long.valueOf(chatRoomIdStr);
} catch (NumberFormatException e) {
log.error("Invalid chatRoomId format: {}", chatRoomIdStr, e);
}
}
return null;
}
}

0 comments on commit 31e1b37

Please sign in to comment.