Skip to content

Feature/#91 스터디 상세 조회 필드 추가 - #91

Merged
Anna0626 merged 1 commit into
mainfrom
feature/#27-study
Aug 12, 2026
Merged

Feature/#91 스터디 상세 조회 필드 추가 #91
Anna0626 merged 1 commit into
mainfrom
feature/#27-study

Conversation

@Anna0626

@Anna0626 Anna0626 commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

스터디 상세 조회에 반환 필드 추가

LocalDate startDate,
List<String> members

Summary by CodeRabbit

  • 새로운 기능
    • 스터디 상세 정보에 스터디 시작일이 표시됩니다.
    • 스터디 상세 정보에서 참여자 이름 목록을 확인할 수 있습니다.

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

스터디 상세 응답에 시작일과 참여자 이름 목록을 추가했습니다. 서비스는 스터디 ID로 참여자를 조회하고, 변환기는 해당 데이터를 GetStudyDetail 응답에 포함합니다.

Changes

스터디 상세 응답

Layer / File(s) Summary
스터디 상세 응답 계약 확장
src/main/java/com/stology/be/domain/study/dto/StudyResDTO.java, src/main/java/com/stology/be/domain/study/converter/StudyConverter.java
GetStudyDetailstartDatemembers 필드를 추가했습니다. StudyConverter는 스터디 시작일을 LocalDate로 변환하고 멤버 목록을 응답에 포함합니다.
참여자 조회 및 변환기 연결
src/main/java/com/stology/be/domain/study/repository/MemberStudyRepository.java, src/main/java/com/stology/be/domain/study/service/StudyService.java
findByStudyId를 추가했습니다. getStudyDetail은 참여자 이름을 수집하여 변환기에 전달합니다.

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested reviewers: chunny-k

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목은 스터디 상세 조회 응답에 필드를 추가하는 주요 변경 사항을 명확하게 설명합니다.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

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.

@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.

Actionable comments posted: 2

🤖 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.

Inline comments:
In
`@src/main/java/com/stology/be/domain/study/repository/MemberStudyRepository.java`:
- Around line 75-76: StudyService의 참여자 이름 조회 흐름에서 MemberStudy 엔티티의 지연 로딩으로 발생하는
N+1 조회를 제거하세요. 해당 흐름은 MemberStudyRepository의 findByStudyId 대신 기존
findMemberNamesByStudyId를 사용해 이름을 한 번에 조회하도록 변경하고, findByStudyId에 다른 사용처가 없다면 해당
메서드와 불필요한 관련 코드를 제거하세요.

In `@src/main/java/com/stology/be/domain/study/service/StudyService.java`:
- Around line 274-278: getStudyDetail에서 참여자 이름을 조회하기 전에
MemberStudyRepository.existsByStudyIdAndMemberId(studyId, member.getId())로 현재
사용자의 참여 여부를 확인하세요. 참여하지 않은 요청은 거부하고, 참여가 확인된 경우에만 기존 members 조회와
StudyConverter.toGetStudyDetail 호출을 수행하도록 수정하세요.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 9be3f023-3423-4bae-8b56-d3b5f171a8a5

📥 Commits

Reviewing files that changed from the base of the PR and between 21ae52c and fe4de2b.

📒 Files selected for processing (4)
  • src/main/java/com/stology/be/domain/study/converter/StudyConverter.java
  • src/main/java/com/stology/be/domain/study/dto/StudyResDTO.java
  • src/main/java/com/stology/be/domain/study/repository/MemberStudyRepository.java
  • src/main/java/com/stology/be/domain/study/service/StudyService.java

Comment on lines +75 to +76

List<MemberStudy> findByStudyId(Long studyId);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🚀 Performance & Scalability | 🟠 Major | ⚡ Quick win

findByStudyId로 인한 N+1 조회를 제거하세요.

MemberStudy.memberFetchType.LAZY입니다. StudyService.java Lines 274-277은 각 MemberStudy에서 getMember().getName()을 호출하므로 참여자마다 Member 조회가 추가될 수 있습니다. 같은 리포지토리의 findMemberNamesByStudyId Lines 73-74는 member.name을 한 번에 조회합니다. 서비스에서 기존 메서드를 사용하세요. 다른 사용처가 없다면 새 메서드도 제거하세요.

제안하는 변경
-        List<String> members = memberStudyRepository.findByStudyId(study.getId())
-                .stream()
-                .map(memberStudy -> memberStudy.getMember().getName())
-                .toList();
+        List<String> members =
+                memberStudyRepository.findMemberNamesByStudyId(study.getId());
🤖 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/main/java/com/stology/be/domain/study/repository/MemberStudyRepository.java`
around lines 75 - 76, StudyService의 참여자 이름 조회 흐름에서 MemberStudy 엔티티의 지연 로딩으로 발생하는
N+1 조회를 제거하세요. 해당 흐름은 MemberStudyRepository의 findByStudyId 대신 기존
findMemberNamesByStudyId를 사용해 이름을 한 번에 조회하도록 변경하고, findByStudyId에 다른 사용처가 없다면 해당
메서드와 불필요한 관련 코드를 제거하세요.

Comment on lines +274 to +278
List<String> members = memberStudyRepository.findByStudyId(study.getId())
.stream()
.map(memberStudy -> memberStudy.getMember().getName())
.toList();
return StudyConverter.toGetStudyDetail(study, currentWeek, isLeader, members);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

# 상세 조회의 인증 및 참여 권한 검사를 확인합니다.
rg -n -C 6 \
  'getStudyDetail|existsByStudyIdAndMemberId|`@PreAuthorize`|requestMatchers|authenticated' \
  --glob '*.{java,yml,yaml}' .

Repository: Stology/BE

Length of output: 9855


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

printf '%s\n' '--- StudyService ---'
sed -n '1,90p;265,285p' src/main/java/com/stology/be/domain/study/service/StudyService.java

printf '%s\n' '--- StudyController ---'
sed -n '1,45p;132,141p' src/main/java/com/stology/be/domain/study/controller/StudyController.java

printf '%s\n' '--- SecurityConfig ---'
sed -n '35,55p' src/main/java/com/stology/be/global/security/config/SecurityConfig.java

printf '%s\n' '--- Study detail authorization references ---'
rg -n -C 3 'requireStudyMember|getStudyDetail|STUDY_MEMBER_FORBIDDEN' src/main/java src/test || true

printf '%s\n' '--- Static behavior probe ---'
python3 - <<'PY'
from pathlib import Path

service = Path("src/main/java/com/stology/be/domain/study/service/StudyService.java").read_text()
method = service[service.index("public StudyResDTO.GetStudyDetail getStudyDetail"):
               service.index("\n    }", service.index("public StudyResDTO.GetStudyDetail getStudyDetail")) + 6]

print("detail_method_calls_membership_check=" +
      str("existsByStudyIdAndMemberId" in method or "requireStudyMember" in method))
print("detail_method_returns_member_names=" +
      str("getMember().getName()" in method))
print("detail_method_uses_member_for_leader_only=" +
      str("member.getId()" in method and "existsByStudyIdAndMemberId" not in method))
PY

Repository: Stology/BE

Length of output: 15834


스터디 참여 권한을 확인하세요.

SecurityConfig는 인증만 요구하고 getStudyDetail은 참여 여부를 확인하지 않습니다. 인증된 비참여 사용자가 studyId를 변경하여 다른 스터디의 참여자 이름을 조회할 수 있습니다. MemberStudyRepository.existsByStudyIdAndMemberId(studyId, member.getId()) 검사 후 비참여 요청을 거부하세요.

🤖 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/main/java/com/stology/be/domain/study/service/StudyService.java` around
lines 274 - 278, getStudyDetail에서 참여자 이름을 조회하기 전에
MemberStudyRepository.existsByStudyIdAndMemberId(studyId, member.getId())로 현재
사용자의 참여 여부를 확인하세요. 참여하지 않은 요청은 거부하고, 참여가 확인된 경우에만 기존 members 조회와
StudyConverter.toGetStudyDetail 호출을 수행하도록 수정하세요.

@Anna0626
Anna0626 merged commit a6a4e3e into main Aug 12, 2026
2 checks passed
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