Skip to content

[fix] 오픈채팅방 접속 문제 - #268

Open
YangDaJin0104 wants to merge 1 commit into
devfrom
fix/active-chat-room-link
Open

[fix] 오픈채팅방 접속 문제#268
YangDaJin0104 wants to merge 1 commit into
devfrom
fix/active-chat-room-link

Conversation

@YangDaJin0104

@YangDaJin0104 YangDaJin0104 commented Jun 13, 2026

Copy link
Copy Markdown
Contributor

📌 이슈 번호


closed #267


✅ 어떻게 이슈를 해결했나요?


V3 매칭 요청 수락 흐름에서 매칭이 성사되었음에도 오픈채팅방이 배정되지 않아, 일부 활성 매칭에서 채팅방 입장하기 클릭 시 존재하지 않는 채팅방입니다 메시지가 노출될 수 있는 문제를 수정했습니다.

이번 작업에서는 V3 요청 수락 처리 흐름인 GroupRequestService에 채팅방 배정 로직을 추가했습니다.

주요 수정 내용은 다음과 같습니다.

  • V3 매칭 수락 후 매칭이 COMPLETED 상태가 되는 시점에 오픈채팅방 배정 처리 추가
  • 다이렉트 매칭 성사 시점에 채팅방 배정
  • 그룹 매칭 정원 충족 시점에 채팅방 배정
  • 정원 미달 상태에서는 채팅방을 배정하지 않도록 처리
  • 이미 채팅방이 배정된 그룹은 재배정하지 않도록 방어 로직 추가
  • 기존 V2 채팅방 배정 정책인 ChattingV2Service.assignChatting()GroupRepository.assignChattingToGroup() 재사용
  • 동시 수락 시 같은 그룹에 대한 경쟁을 막기 위해 그룹 조회를 findGroupWithLock(PESSIMISTIC_WRITE) 기준으로 변경
  • Controller / DTO / Entity / DB schema 변경 없이 기존 응답 구조 유지

채팅방 중복 배정 방지는 아래 기준으로 처리했습니다.

  • 이미 group.getChatting()이 존재하면 새 채팅방을 배정하지 않음
  • 이미 완료된 그룹은 기존 검증 로직에서 ALREADY_COMPLETED_GROUP으로 차단
  • 채팅방 선점은 기존 assignChatting()PESSIMISTIC_WRITE 락 기반 조회를 사용
  • assignChattingToGroupWHERE chatting_id IS NULL 조건과 기존 유니크 제약으로 중복 연결 방지

사용 가능한 채팅방이 없는 경우에는 기존 예외인 BusinessException(BusinessErrorCode.CHATTING_NOT_FOUND)를 그대로 사용합니다. 이 경우 수락 트랜잭션은 롤백되며, 별도 응답 구조 변경은 없습니다.

변경 파일은 다음과 같습니다.

  • src/main/java/at/mateball/domain/groupRequest/GroupRequestService.java
  • src/test/java/at/mateball/domain/groupRequest/GroupRequestServiceTest.java

테스트는 아래 단위 테스트 기준으로 확인했습니다.

  • 다이렉트 매칭 수락 시 채팅방 신규 배정
  • 이미 채팅방이 배정된 매칭은 재배정하지 않음
  • 사용 가능한 채팅방이 없을 때 CHATTING_NOT_FOUND 전파
  • 그룹 정원 미달 시 채팅방 미배정
  • 그룹 정원 충족 시 채팅방 배정

테스트 결과:

./gradlew test --tests "*GroupRequestServiceTest"
BUILD SUCCESSFUL

❤️ To 다진 / To 헤음


  • V3 매칭 요청 수락 후 match_group.chatting_id가 정상적으로 채워지는지..
  • 이후 채팅방 입장하기에서 유효한 카카오 오픈채팅 URL이 반환되는지....
  • 기존에 이미 COMPLETED 상태인데 chatting_id가 없는 매칭은 이번 코드 변경만으로 자동 복구 안되가지고 이거 해결해보겠삼

Summary by CodeRabbit

릴리스 노트

  • 새로운 기능

    • 그룹 매칭 승인 시 채팅방이 자동으로 할당됩니다. 그룹에 채팅방이 없으면 새로 생성되어 연결됩니다.
  • 개선 사항

    • 매칭 요청 처리 흐름이 개선되어 더 일관된 상태 관리가 이루어집니다.
  • 테스트

    • 매칭 승인 시나리오에 대한 포괄적인 단위 테스트가 추가되었습니다.

@coderabbitai

coderabbitai Bot commented Jun 13, 2026

Copy link
Copy Markdown

Review Change Stack

Walkthrough

그룹 매칭 요청 수락 시 사용 가능한 채팅방을 자동으로 배정하는 기능을 GroupRequestService에 추가했습니다. ChattingV2Service를 주입받아 매칭이 완료될 때 채팅이 없으면 할당하고, 그룹에 연결합니다. 관련 단위 테스트 4개 이상의 시나리오를 포함합니다.

Changes

그룹 매칭 승인 시 채팅방 할당 기능

Layer / File(s) Summary
ChattingV2Service 의존성 주입 및 초기화
src/main/java/at/mateball/domain/groupRequest/GroupRequestService.java
ChattingV2Service 임포트를 추가하고 생성자 주입을 통해 채팅 할당 기능에 접근할 수 있도록 준비합니다.
매칭 승인 흐름 및 채팅 할당 호출
src/main/java/at/mateball/domain/groupRequest/GroupRequestService.java
permitRequest에서 검증된 그룹을 기반으로 isGroup 조건에 따라 직접 매칭 또는 그룹 매칭 처리로 분기합니다. 각 처리 메서드 내부에서 완료 상태 업데이트 후 assignChattingIfAbsent를 호출하여 채팅을 할당하고, 그룹에 연결합니다. 그룹 매칭이 정원(4명)을 충족할 때만 완료 처리 및 채팅 할당을 수행합니다.
매칭 승인 시나리오별 테스트
src/test/java/at/mateball/domain/groupRequest/GroupRequestServiceTest.java
permitRequest의 채팅 할당 동작을 검증하는 단위 테스트 클래스를 추가합니다. 채팅이 아직 할당되지 않은 경우 새로 할당하는 경로, 이미 할당된 경우 스킵하는 경로, 채팅 할당 실패 시 예외 전파 및 미연결 상태, 정원 미달 시 할당 미수행, 정원 충족(4명) 시 할당 및 연결을 각각 검증합니다.

Sequence Diagram

sequenceDiagram
  participant Controller
  participant GroupRequestService
  participant ChattingV2Service
  participant GroupRepository
  
  Controller->>GroupRequestService: permitRequest(leaderId, groupId)
  GroupRequestService->>GroupRequestService: getValidatedGroup(groupId)
  alt isGroup = true
    GroupRequestService->>GroupRequestService: processGroupMatch(group)
    Note over GroupRequestService: 그룹이 full인 경우
    GroupRequestService->>GroupRequestService: group.setStatus(COMPLETED)
    GroupRequestService->>GroupRequestService: assignChattingIfAbsent(group)
  else
    GroupRequestService->>GroupRequestService: processDirectMatch(group)
    GroupRequestService->>GroupRequestService: assignChattingIfAbsent(group)
  end
  
  GroupRequestService->>GroupRequestService: group.chatting이 null?
  alt chatting == null
    GroupRequestService->>ChattingV2Service: assignChatting()
    ChattingV2Service-->>GroupRequestService: chattingId
    GroupRequestService->>GroupRepository: assignChattingToGroup(group, chattingId)
  else
    Note over GroupRequestService: 기존 채팅 유지
  end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • MATEBALL/MATEBALL-SERVER#151: ChattingV2ServiceGroupRepository.assignChattingToGroup을 통한 그룹 채팅 연결 로직이 기존에 구현되었으며, 본 PR은 매칭 승인 시점에 해당 로직을 호출하도록 통합합니다.

Suggested reviewers

  • hyeeum
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목이 문제 상황(오픈채팅방 접속 문제)을 명확히 반영하지만, 구체적인 변경사항(채팅방 배정 로직 추가)을 표현하지 못해 제목만으로는 실제 구현 내용을 파악하기 어렵습니다.
Linked Issues check ✅ Passed PR이 #267의 모든 주요 요구사항을 충족합니다: V3 매칭 수락 시점에 채팅방 배정 처리, 중복 배정 방지, 기존 응답 구조 유지, PESSIMISTIC_WRITE 잠금으로 동시성 제어, ChattingV2Service 활용, 단위 테스트로 시나리오별 검증.
Out of Scope Changes check ✅ Passed 모든 변경사항(GroupRequestService 채팅방 배정 로직, 유닛 테스트)이 #267의 V3 매칭 수락 흐름에서 채팅방 배정 누락 해결이라는 명확한 범위 내에 있습니다.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/active-chat-room-link

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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
src/test/java/at/mateball/domain/groupRequest/GroupRequestServiceTest.java (1)

31-32: 💤 Low value

테스트 strictness를 STRICT_STUBS로 변경 검토

현재 Strictness.LENIENT를 사용하고 있어 불필요한 스텁이 숨겨질 수 있습니다. 의존성이 많아 실용적인 선택일 수 있으나, 가능하다면 Strictness.STRICT_STUBS로 변경하여 테스트 품질을 높이는 것을 권장합니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/test/java/at/mateball/domain/groupRequest/GroupRequestServiceTest.java`
around lines 31 - 32, Change the Mockito strictness in the
GroupRequestServiceTest class from LENIENT to STRICT_STUBS: replace the
annotation line `@MockitoSettings`(strictness = Strictness.LENIENT) with
`@MockitoSettings`(strictness = Strictness.STRICT_STUBS) (keeping
`@ExtendWith`(MockitoExtension.class) unchanged) so tests use
Strictness.STRICT_STUBS and catch unnecessary or unused stubs.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@src/test/java/at/mateball/domain/groupRequest/GroupRequestServiceTest.java`:
- Around line 31-32: Change the Mockito strictness in the
GroupRequestServiceTest class from LENIENT to STRICT_STUBS: replace the
annotation line `@MockitoSettings`(strictness = Strictness.LENIENT) with
`@MockitoSettings`(strictness = Strictness.STRICT_STUBS) (keeping
`@ExtendWith`(MockitoExtension.class) unchanged) so tests use
Strictness.STRICT_STUBS and catch unnecessary or unused stubs.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 168ec5ce-a3ff-4e1d-88f8-f6f08ac4b570

📥 Commits

Reviewing files that changed from the base of the PR and between e530324 and dd33cb6.

📒 Files selected for processing (2)
  • src/main/java/at/mateball/domain/groupRequest/GroupRequestService.java
  • src/test/java/at/mateball/domain/groupRequest/GroupRequestServiceTest.java

@hyeeum

hyeeum commented Jun 13, 2026

Copy link
Copy Markdown
Collaborator

[memo]
기획 측에 다시 테스트 요청 후 로직 재검수

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[fix] 오픈채팅방 접속 문제

2 participants