diff --git a/src/main/java/com/backend/allreva/chatting/message/domain/value/Content.java b/src/main/java/com/backend/allreva/chatting/message/domain/value/Content.java index 025c6c9f..571ae57d 100644 --- a/src/main/java/com/backend/allreva/chatting/message/domain/value/Content.java +++ b/src/main/java/com/backend/allreva/chatting/message/domain/value/Content.java @@ -1,23 +1,14 @@ package com.backend.allreva.chatting.message.domain.value; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import lombok.*; @Setter @Getter -@NoArgsConstructor(access = AccessLevel.PROTECTED) +@NoArgsConstructor +@AllArgsConstructor public class Content { private ContentType contentType; private String payload; - public Content( - final ContentType contentType, - final String payload - ) { - this.contentType = contentType; - this.payload = payload; - } } diff --git a/src/main/java/com/backend/allreva/chatting/message/ui/MessageCommandController.java b/src/main/java/com/backend/allreva/chatting/message/ui/MessageCommandController.java index a6862854..ce5cf4c4 100644 --- a/src/main/java/com/backend/allreva/chatting/message/ui/MessageCommandController.java +++ b/src/main/java/com/backend/allreva/chatting/message/ui/MessageCommandController.java @@ -1,6 +1,7 @@ package com.backend.allreva.chatting.message.ui; import com.backend.allreva.auth.security.AuthMember; +import com.backend.allreva.auth.security.PrincipalDetails; import com.backend.allreva.chatting.chat.integration.model.value.ChatType; import com.backend.allreva.chatting.chat.integration.model.value.PreviewMessage; import com.backend.allreva.chatting.chat.integration.application.ChatParticipantService; @@ -9,14 +10,25 @@ import com.backend.allreva.chatting.message.domain.SingleMessage; import com.backend.allreva.chatting.message.domain.value.Content; import com.backend.allreva.chatting.notification.MessageSseService; +import com.backend.allreva.common.exception.NotFoundException; import com.backend.allreva.member.command.domain.Member; +import com.backend.allreva.member.command.domain.MemberRepository; +import com.backend.allreva.member.exception.MemberNotFoundException; +import com.backend.allreva.member.query.application.MemberQueryService; import lombok.RequiredArgsConstructor; +import org.bouncycastle.asn1.x500.style.RFC4519Style; import org.springframework.messaging.handler.annotation.DestinationVariable; import org.springframework.messaging.handler.annotation.MessageMapping; import org.springframework.messaging.handler.annotation.Payload; +import org.springframework.messaging.simp.SimpMessageHeaderAccessor; import org.springframework.messaging.simp.SimpMessagingTemplate; +import org.springframework.security.core.Authentication; import org.springframework.stereotype.Controller; +import java.security.Principal; + +import static org.bouncycastle.asn1.x500.style.RFC4519Style.member; + @RequiredArgsConstructor @Controller public class MessageCommandController { @@ -28,6 +40,7 @@ public class MessageCommandController { private final MessageSseService messageSseService; private final ChatParticipantService chatParticipantService; + private final MemberRepository memberRepository; private final SimpMessagingTemplate messagingTemplate; @@ -35,9 +48,11 @@ public class MessageCommandController { @MessageMapping("/single/connection/{singleChatId}") public void sendSingleMessage( @DestinationVariable final Long singleChatId, - @AuthMember final Member member, - @Payload final Content content + @Payload final Content content, + final SimpMessageHeaderAccessor accessor ) { + Member member = getMemberFromAccessor(accessor); + String destination = SUB_PERSONAL_DESTINATION + singleChatId; SingleMessage singleMessage = messageCommandService .saveSingleMessage(singleChatId, content, member); @@ -67,9 +82,11 @@ public void sendSingleMessage( @MessageMapping("/group/connection/{groupChatId}") public void sendGroupMessage( @DestinationVariable final Long groupChatId, - @AuthMember final Member member, - @Payload final Content content + @Payload final Content content, + final SimpMessageHeaderAccessor accessor ) { + Member member = getMemberFromAccessor(accessor); + String destination = SUB_GROUP_DESTINATION + groupChatId; GroupMessage groupMessage = messageCommandService .saveGroupMessage(groupChatId, content, member); @@ -96,4 +113,15 @@ public void sendGroupMessage( } + private Member getMemberFromAccessor(SimpMessageHeaderAccessor accessor) { + Authentication authentication = (Authentication) accessor.getUser(); + if (authentication == null) { + throw new MemberNotFoundException(); + } + PrincipalDetails principalDetails = (PrincipalDetails) authentication.getPrincipal(); + if (principalDetails == null) { + throw new MemberNotFoundException(); + } + return principalDetails.getMember(); + } }