diff --git a/src/main/java/com/assu/server/domain/chat/converter/ChatConverter.java b/src/main/java/com/assu/server/domain/chat/converter/ChatConverter.java index 1a8a35a9..1d38eae3 100644 --- a/src/main/java/com/assu/server/domain/chat/converter/ChatConverter.java +++ b/src/main/java/com/assu/server/domain/chat/converter/ChatConverter.java @@ -1,6 +1,7 @@ package com.assu.server.domain.chat.converter; import com.assu.server.domain.admin.entity.Admin; +import com.assu.server.domain.chat.entity.enums.MessageType; import com.assu.server.domain.member.entity.Member; import com.assu.server.domain.chat.dto.ChatMessageDTO; import com.assu.server.domain.chat.dto.ChatRequestDTO; @@ -69,6 +70,18 @@ public static Message toMessageEntity(ChatRequestDTO.ChatMessageRequestDTO reque .receiver(receiver) .message(request.getMessage()) .unreadCount(request.getUnreadCountForSender()) + .type(MessageType.TEXT) + .build(); + } + + public static Message toGuideMessageEntity(ChatRequestDTO.ChatMessageRequestDTO request, ChattingRoom room, Member sender, Member receiver) { + return Message.builder() + .chattingRoom(room) + .sender(sender) + .receiver(receiver) + .message(request.getMessage()) + .unreadCount(0) + .type(MessageType.GUIDE) .build(); } diff --git a/src/main/java/com/assu/server/domain/chat/dto/ChatRequestDTO.java b/src/main/java/com/assu/server/domain/chat/dto/ChatRequestDTO.java index 575c46b9..c5180559 100644 --- a/src/main/java/com/assu/server/domain/chat/dto/ChatRequestDTO.java +++ b/src/main/java/com/assu/server/domain/chat/dto/ChatRequestDTO.java @@ -1,6 +1,9 @@ package com.assu.server.domain.chat.dto; +import com.assu.server.domain.chat.entity.enums.MessageType; +import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; public class ChatRequestDTO { @@ -12,6 +15,8 @@ public static class CreateChatRoomRequestDTO { @Getter @Setter + @AllArgsConstructor + @NoArgsConstructor public static class ChatMessageRequestDTO { private Long roomId; private Long senderId; diff --git a/src/main/java/com/assu/server/domain/chat/entity/enums/MessageType.java b/src/main/java/com/assu/server/domain/chat/entity/enums/MessageType.java index a3255d2f..94c6c4b6 100644 --- a/src/main/java/com/assu/server/domain/chat/entity/enums/MessageType.java +++ b/src/main/java/com/assu/server/domain/chat/entity/enums/MessageType.java @@ -1,5 +1,5 @@ package com.assu.server.domain.chat.entity.enums; public enum MessageType { - TEXT, PROPOSAL, SYSTEM + TEXT, PROPOSAL, SYSTEM, GUIDE } diff --git a/src/main/java/com/assu/server/domain/chat/service/ChatService.java b/src/main/java/com/assu/server/domain/chat/service/ChatService.java index e11b3c13..de2e4769 100644 --- a/src/main/java/com/assu/server/domain/chat/service/ChatService.java +++ b/src/main/java/com/assu/server/domain/chat/service/ChatService.java @@ -12,4 +12,5 @@ public interface ChatService { ChatResponseDTO.ReadMessageResponseDTO readMessage(Long roomId, Long memberId); ChatResponseDTO.ChatHistoryResponseDTO readHistory(Long roomId, Long memberId); ChatResponseDTO.LeaveChattingRoomResponseDTO leaveChattingRoom(Long roomId, Long memberId); + ChatResponseDTO.SendMessageResponseDTO sendGuideMessage(ChatRequestDTO.ChatMessageRequestDTO request); } diff --git a/src/main/java/com/assu/server/domain/chat/service/ChatServiceImpl.java b/src/main/java/com/assu/server/domain/chat/service/ChatServiceImpl.java index 17ce4e8c..3c50bdfb 100644 --- a/src/main/java/com/assu/server/domain/chat/service/ChatServiceImpl.java +++ b/src/main/java/com/assu/server/domain/chat/service/ChatServiceImpl.java @@ -9,7 +9,6 @@ import com.assu.server.domain.chat.dto.ChatRoomListResultDTO; import com.assu.server.domain.chat.entity.ChattingRoom; import com.assu.server.domain.chat.entity.Message; -import com.assu.server.domain.chat.repository.BlockRepository; import com.assu.server.domain.chat.repository.ChatRepository; import com.assu.server.domain.chat.repository.MessageRepository; import com.assu.server.domain.member.entity.Member; @@ -24,6 +23,7 @@ import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.messaging.simp.SimpMessagingTemplate; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -39,7 +39,7 @@ public class ChatServiceImpl implements ChatService { private final AdminRepository adminRepository; private final MessageRepository messageRepository; private final StoreRepository storeRepository; - private final BlockRepository blockRepository; + private final SimpMessagingTemplate simpMessagingTemplate; @Override @@ -109,6 +109,27 @@ public ChatResponseDTO.SendMessageResponseDTO handleMessage(ChatRequestDTO.ChatM return ChatConverter.toSendMessageDTO(saved); } + + @Override + @Transactional + public ChatResponseDTO.SendMessageResponseDTO sendGuideMessage(ChatRequestDTO.ChatMessageRequestDTO request) { + // 유효성 검사 + ChattingRoom room = chatRepository.findById(request.getRoomId()) + .orElseThrow(() -> new DatabaseException(ErrorStatus.NO_SUCH_ROOM)); + Member sender = memberRepository.findById(request.getSenderId()) + .orElseThrow(() -> new DatabaseException(ErrorStatus.NO_SUCH_MEMBER)); + Member receiver = memberRepository.findById(request.getReceiverId()) + .orElseThrow(() -> new DatabaseException(ErrorStatus.NO_SUCH_MEMBER)); + + Message message = ChatConverter.toGuideMessageEntity(request, room, sender, receiver); + Message saved = messageRepository.saveAndFlush(message); + + ChatResponseDTO.SendMessageResponseDTO responseDTO = ChatConverter.toSendMessageDTO(saved); + simpMessagingTemplate.convertAndSend("/sub/chat/" + request.getRoomId(), responseDTO); + + return responseDTO; + } + @Transactional @Override public ChatResponseDTO.ReadMessageResponseDTO readMessage(Long roomId, Long memberId) { diff --git a/src/main/java/com/assu/server/domain/partnership/service/PartnershipServiceImpl.java b/src/main/java/com/assu/server/domain/partnership/service/PartnershipServiceImpl.java index 312f4f0f..fe4be31b 100644 --- a/src/main/java/com/assu/server/domain/partnership/service/PartnershipServiceImpl.java +++ b/src/main/java/com/assu/server/domain/partnership/service/PartnershipServiceImpl.java @@ -4,7 +4,10 @@ import java.util.Collections; import java.util.List; import java.util.Optional; - +import com.assu.server.domain.chat.dto.ChatRequestDTO; +import com.assu.server.domain.chat.entity.ChattingRoom; +import com.assu.server.domain.chat.repository.ChatRepository; +import com.assu.server.domain.chat.service.ChatService; import org.springframework.stereotype.Service; import com.assu.server.domain.member.entity.Member; @@ -54,6 +57,8 @@ public class PartnershipServiceImpl implements PartnershipService { private final StudentRepository studentRepository; private final PaperContentRepository contentRepository; private final NotificationCommandService notificationService; + private final ChatService chatService; + private final ChatRepository chatRepository; @Override @@ -403,6 +408,20 @@ public PartnershipResponseDTO.CreateDraftResponseDTO createDraftPartnership(Part notificationService.sendPartnerProposal(partner.getId(), draftPaper.getId(), admin.getName()); + ChattingRoom chattingRoom = chatRepository.findChattingRoomByAdminIdAndPartnerId(admin.getId(), partner.getId()); + + String guideMessage = admin.getName() + "님이 제휴 제안서 초안을 전송했어요! 확인 후 제휴 제안서를 작성해 주세요"; + ChatRequestDTO.ChatMessageRequestDTO guideMessageRequest = new ChatRequestDTO.ChatMessageRequestDTO( + chattingRoom.getId(), + admin.getId(), + partner.getId(), + guideMessage, + 0 + ); + + // 5. 완성된 DTO를 사용해서 안내 메시지를 전송합니다. + chatService.sendGuideMessage(guideMessageRequest); + return PartnershipConverter.toCreateDraftResponseDTO(draftPaper); }