Skip to content

[FIX] 비동기로 인해 기존 내역이 커밋되기 전, 메세지를 조회하여 NotFound 뜨는 에러 해결#264

Merged
yooooonshine merged 2 commits intodevelopfrom
feature/261-fix-ai-chat
Nov 16, 2025
Merged

[FIX] 비동기로 인해 기존 내역이 커밋되기 전, 메세지를 조회하여 NotFound 뜨는 에러 해결#264
yooooonshine merged 2 commits intodevelopfrom
feature/261-fix-ai-chat

Conversation

@yooooonshine
Copy link
Contributor

@yooooonshine yooooonshine commented Nov 16, 2025

개요

작업사항

  • 비동기로 인해 기존 내역이 커밋되기 전, 메세지를 조회하여 NotFound 뜨는 에러 해결
  • 이미지 생성권이 없는 유저는 채팅 또한 못보내도록 수정

Summary by CodeRabbit

릴리스 노트

  • 개선 사항

    • AI 이미지 생성 요청 시 사용 가능한 생성 횟수에 대한 사전 검증 로직 추가
    • API 오류 처리 및 문서화 방식 개선
  • 버그 수정

    • 메시지 전송 시 권한 검증 절차 강화로 안정성 향상

@yooooonshine yooooonshine merged commit a0a5c4c into develop Nov 16, 2025
1 of 2 checks passed
@coderabbitai
Copy link

coderabbitai bot commented Nov 16, 2025

Caution

Review failed

The pull request is closed.

Walkthrough

AI 채팅 메시지 서비스에서 @Transactional 어노테이션을 제거하고 남은 이미지 생성 횟수 검증을 추가했습니다. AiServerService는 권한 검증 로직을 삭제하고 요청 분류 시 hasImage 플래그를 포함하도록 변경했습니다. 컨트롤러의 sendUserMessage 메서드는 UserEntity 파라미터를 추가받습니다.

Changes

Cohort / File(s) Change Summary
AI 채팅 메시지 서비스 - 거래 처리 및 검증 로직
src/main/java/hanium/modic/backend/domain/ai/aiChat/service/AiChatMessageService.java
sendUserMessage 메서드에서 @Transactional 제거 및 validateRemainingGenerationsEnough 사전 검증 로직 추가; 메시지 지속 전 남은 생성 횟수 확인; MQ 처리 순서 이슈 설명 주석 추가
AI 서버 서비스 - 권한 검증 및 요청 분류 개선
src/main/java/hanium/modic/backend/domain/ai/aiServer/service/AiServerService.java
사전 권한 검증(validateAiRequestPermission) 로직 제거; classifyRequestCategory 호출 시 hasImage 플래그 포함; 이미지 생성 실패 시 DLQ 기반 복구 관련 주석 업데이트; 임포트 재정리
AI 채팅 컨트롤러 - 메서드 서명 및 문서화 개선
src/main/java/hanium/modic/backend/web/ai/aiChat/controller/AiChatController.java
sendUserMessage 메서드에 @CurrentUser UserEntity user 파라미터 추가; 개별 ApiResponse 어노테이션을 ApiErrorMapping으로 통합; 사용하지 않는 ApiResponse 임포트 제거

Sequence Diagram(s)

sequenceDiagram
    participant Client
    participant Controller as AiChatController
    participant MessageService as AiChatMessageService
    participant ServerService as AiServerService
    
    Client->>Controller: sendUserMessage(postId, request, user)
    activate Controller
    Controller->>MessageService: sendUserMessage(user, postId, request)
    activate MessageService
    
    MessageService->>MessageService: validateOwnership()
    MessageService->>MessageService: validateRemainingGenerationsEnough(userId, postId)
    Note over MessageService: 사전 검증 추가<br/>남은 생성 횟수 확인
    
    MessageService->>MessageService: validateImageExists()
    MessageService->>MessageService: persistMessage()
    MessageService->>ServerService: processAiRequest(hasImage)
    activate ServerService
    
    ServerService->>ServerService: classifyRequestCategory(hasImage)
    Note over ServerService: hasImage 플래그 포함<br/>권한 검증 제거
    
    alt IMAGE_GENERATION
        ServerService->>ServerService: handleImageGeneration()
    else CHAT_GENERATION
        ServerService->>ServerService: handleChatGeneration()
    end
    
    deactivate ServerService
    deactivate MessageService
    Controller-->>Client: ResponseEntity(ChatMessageResponse)
    deactivate Controller
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

검토 시 주의사항:

  • AiChatMessageService: @Transactional 제거 및 validateRemainingGenerationsEnough 추가된 사전 검증 로직이 메시지 지속 이전에 올바르게 실행되는지, 그리고 MQ 처리 순서 문제가 해결되었는지 확인 필요
  • AiServerService: 권한 검증 로직 완전 제거에 따른 보안 영향 검토 및 hasImage 플래그가 이미지/채팅 생성 분류에 정확하게 반영되는지 검증
  • AiChatController: 새로운 UserEntity user 파라미터가 서비스 계층에서 올바르게 활용되고, ApiErrorMapping 통합이 기존 에러 처리를 정확하게 대체하는지 확인

Possibly related PRs

Poem

🐰 거래를 빼고 검증을 더하니
남은 생성 횟수 확인하는 마법
hasImage 플래그 춤을 추고
권한 검증은 사라지고
AI 채팅, 이제 더 똑똑해져라!

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/261-fix-ai-chat

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between daf65f5 and ae8461d.

📒 Files selected for processing (3)
  • src/main/java/hanium/modic/backend/domain/ai/aiChat/service/AiChatMessageService.java (2 hunks)
  • src/main/java/hanium/modic/backend/domain/ai/aiServer/service/AiServerService.java (5 hunks)
  • src/main/java/hanium/modic/backend/web/ai/aiChat/controller/AiChatController.java (1 hunks)

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant