From f182ce3bf7be8ffcb6341e22952ebdc4afafda3e Mon Sep 17 00:00:00 2001 From: yooooonshine Date: Sun, 16 Nov 2025 19:09:26 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EB=B9=84=EB=8F=99=EA=B8=B0=EB=A1=9C=20?= =?UTF-8?q?=EC=9D=B8=ED=95=B4,=20ChatMessage=EA=B0=80=20=EB=91=90=20?= =?UTF-8?q?=EB=B2=88=20=EC=A0=80=EC=9E=A5=ED=95=98=EB=A0=A4=ED=95=98?= =?UTF-8?q?=EB=A9=B4=EC=84=9C=20=EB=9D=BD=20=EC=9E=A5=EC=95=A0=20=EB=B0=9C?= =?UTF-8?q?=EC=83=9D=ED=95=98=EB=8A=94=20=EC=98=A4=EB=A5=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../aiChat/service/AiChatMessageService.java | 29 +++++++------------ .../ai/aiServer/service/AiServerService.java | 16 ++++++++-- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/src/main/java/hanium/modic/backend/domain/ai/aiChat/service/AiChatMessageService.java b/src/main/java/hanium/modic/backend/domain/ai/aiChat/service/AiChatMessageService.java index 5c7474ca..e51fb2aa 100644 --- a/src/main/java/hanium/modic/backend/domain/ai/aiChat/service/AiChatMessageService.java +++ b/src/main/java/hanium/modic/backend/domain/ai/aiChat/service/AiChatMessageService.java @@ -3,8 +3,6 @@ import static hanium.modic.backend.common.error.ErrorCode.*; import static hanium.modic.backend.domain.ai.aiServer.enums.AiImageStatus.*; -import java.util.List; - import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; @@ -19,7 +17,6 @@ import hanium.modic.backend.domain.ai.aiChat.entity.AiChatRoomEntity; import hanium.modic.backend.domain.ai.aiChat.repository.AiChatMessageRepository; import hanium.modic.backend.domain.ai.aiChat.repository.AiChatRoomRepository; -import hanium.modic.backend.domain.ai.aiServer.entity.AiChatImageEntity; import hanium.modic.backend.domain.ai.aiServer.enums.SenderType; import hanium.modic.backend.domain.ai.aiServer.repository.AiChatImageRepository; import hanium.modic.backend.domain.ai.aiServer.service.AiServerService; @@ -58,6 +55,8 @@ public class AiChatMessageService { public ChatMessageResponse sendUserMessage(Long userId, Long postId, ChatMessageRequest request) { // 메시지랑 이미지 둘 다 비어있으면 에러 validateRequestMessageNotEmpty(request); + // 이미지가 다른 사람의 이미지면 에러 + validateAiChatImageOwnership(userId, request.aiChatImageId()); // 채팅방 조회 AiChatRoomEntity aiChatRoom = aiChatRoomRepository.findByUserIdAndPostId(userId, postId) @@ -85,18 +84,8 @@ public ChatMessageResponse sendUserMessage(Long userId, Long postId, ChatMessage .build(); aiChatMessageRepository.save(message); - // 이미지 조회 - List aiChatImages = List.of(); - if (request.aiChatImageId() != null) { - aiChatImages = aiChatImageRepository.findById(request.aiChatImageId()) - .map(List::of) - .orElse(List.of()); - // 이미지들이 자신의 것인지 확인 - validateAiChatImagesOwnership(userId, aiChatImages); - } - // Ai 요청 - aiServerService.processAiRequest(userId, message, aiChatImages); + aiServerService.processAiRequest(userId, message.getId(), request.aiChatImageId()); // 이미지 유무에 따른 응답 생성 return createChatMessageResponseByAiChatImageId(message); @@ -135,11 +124,13 @@ private void validateRequestMessageNotEmpty(ChatMessageRequest request) { } // 이미지들이 자신의 것인지 확인 - private void validateAiChatImagesOwnership(Long userId, List aiChatImages) { - for (AiChatImageEntity image : aiChatImages) { - if (!image.getUserId().equals(userId)) { - throw new AppException(ErrorCode.IMAGE_CAN_NOT_BE_STOLEN_EXCEPTION); - } + private void validateAiChatImageOwnership(Long userId, Long aiChatImageId) { + if (aiChatImageId == null) { + return; // 이미지 ID가 null인 경우 소유권 검증 불필요 + } + boolean hasUserImage = aiChatImageRepository.existsByIdAndUserId(aiChatImageId, userId); + if (!hasUserImage) { + throw new AppException(ErrorCode.IMAGE_CAN_NOT_BE_STOLEN_EXCEPTION); } } diff --git a/src/main/java/hanium/modic/backend/domain/ai/aiServer/service/AiServerService.java b/src/main/java/hanium/modic/backend/domain/ai/aiServer/service/AiServerService.java index 4b69b0a0..5acd4c6e 100644 --- a/src/main/java/hanium/modic/backend/domain/ai/aiServer/service/AiServerService.java +++ b/src/main/java/hanium/modic/backend/domain/ai/aiServer/service/AiServerService.java @@ -67,9 +67,21 @@ public class AiServerService { @Async("llmTaskExecutor") public void processAiRequest( final Long nowUserId, - AiChatMessageEntity chatMessage, - List aiChatImages // 없으면 빈 리스트 + final Long messageId, + final Long aiChatImageId // 없으면 null, null이 아니면 해당 이미지는 반드시 존재해야 함 ) { + // 비동기 통신이라 chatMessage를 외부에서 받아오지 않고 여기서 다시 조회 + AiChatMessageEntity chatMessage = aiChatMessageRepository.findById(messageId) + .orElseThrow(() -> new AppException(ErrorCode.AI_CHAT_MESSAGE_NOT_FOUND)); + + // 이미지가 있으면 해당 이미지 조회 + List aiChatImages = List.of(); + if (aiChatImageId != null) { + aiChatImages = aiChatImageRepository.findById(aiChatImageId) + .map(List::of) + .orElse(List.of()); + } + final Long postId = chatMessage.getPostId(); // 해당 Post에 대한 AI 이미지 생성 권한 검증