Skip to content

hotfix: pre-member 조회, 삭제 API 추가#244

Merged
dh2906 merged 16 commits intodevelopfrom
hotfix/pre-member-manage
Feb 17, 2026
Merged

hotfix: pre-member 조회, 삭제 API 추가#244
dh2906 merged 16 commits intodevelopfrom
hotfix/pre-member-manage

Conversation

@dh2906
Copy link
Contributor

@dh2906 dh2906 commented Feb 17, 2026

🔍 개요

  • close #이슈번호

🚀 주요 변경 내용

  • 추가한 사전 멤버에 대해 조회 및 삭제 API를 추가했습니다.

  • 동아리 인원 관리는 운영진부터 가능해야 하므로 접근 권한을 수정했습니다.


💬 참고 사항


✅ Checklist (완료 조건)

  • 코드 스타일 가이드 준수
  • 테스트 코드 포함됨
  • Reviewers / Assignees / Labels 지정 완료
  • 보안 및 민감 정보 검증 (API 키, 환경 변수, 개인정보 등)

Summary by CodeRabbit

  • New Features
    • Retrieve a club's pending (pre-)members list (manager+ access).
    • Remove a pending member from a club (manager+ access).
  • Chores
    • Added explicit "pre-member not found" error for clearer feedback.

JanooGwan and others added 15 commits February 14, 2026 03:07
fix: 어드민 채팅방 메시지 전송 403 에러 재수정
refactor: 동아리 상세 정보 Response 수정
refactor: 모든 사용자가 동아리 회비 정보에 접근할 수 있도록 변경
* feat: flyway 추가

* feat: 애플 리프레쉬 토큰 관련 로직 추가

* feat: 애플 revoke 로직 추가
# Conflicts:
#	src/main/resources/application.yml
fix: 어드민 채팅방 리스트 조회 시 상대방 이름이 출력되지 않는 오류 해결
@dh2906 dh2906 requested a review from Copilot February 17, 2026 05:37
@dh2906 dh2906 self-assigned this Feb 17, 2026
@dh2906 dh2906 added the Hotfix 운영 환경에서 발생한 우선 순위가 높은 심각한 오류에 대한 이슈입니다. label Feb 17, 2026
@coderabbitai
Copy link

coderabbitai bot commented Feb 17, 2026

Caution

Review failed

The pull request is closed.

📝 Walkthrough

Walkthrough

Adds pre-member management: two new API endpoints to list and remove club pre-members, service methods enforcing manager access, repository queries and deletion, a DTO for responses, and a new NOT_FOUND error code.

Changes

Cohort / File(s) Summary
API Layer
src/main/java/gg/agit/konect/domain/club/controller/ClubMemberApi.java, src/main/java/gg/agit/konect/domain/club/controller/ClubMemberController.java
Added getPreMembers (GET /{clubId}/pre-members) and removePreMember (DELETE /{clubId}/pre-members/{preMemberId}) endpoints; controller methods delegate to service.
DTO
src/main/java/gg/agit/konect/domain/club/dto/ClubPreMembersResponse.java
New ClubPreMembersResponse record with nested InnerClubPreMember and mapping factories from domain ClubPreMember.
Service Layer
src/main/java/gg/agit/konect/domain/club/service/ClubMemberManagementService.java
Added getPreMembers(clubId, requesterId) and removePreMember(clubId, preMemberId, requesterId) with manager-access validation; switched addPreMember to validateManagerAccess.
Repository Layer
src/main/java/gg/agit/konect/domain/club/repository/ClubPreMemberRepository.java
Added findAllByClubId, findByIdAndClubId, convenience getByIdAndClubId (throws NOT_FOUND_CLUB_PRE_MEMBER), and a public delete(ClubPreMember) method.
Error Codes
src/main/java/gg/agit/konect/global/code/ApiResponseCode.java
Added NOT_FOUND_CLUB_PRE_MEMBER(HttpStatus.NOT_FOUND, "사전 등록 회원을 찾을 수 없습니다.").

Sequence Diagram(s)

sequenceDiagram
    participant Client
    participant Controller as ClubMemberController
    participant Service as ClubMemberManagementService
    participant Repo as ClubPreMemberRepository
    participant DB as Database

    Client->>Controller: GET /{clubId}/pre-members (userId)
    Controller->>Service: getPreMembers(clubId, userId)
    Service->>Service: validateManagerAccess(clubId, userId)
    Service->>Repo: findAllByClubId(clubId)
    Repo->>DB: SELECT pre-members WHERE club_id=...
    DB-->>Repo: List<ClubPreMember>
    Repo-->>Service: List<ClubPreMember>
    Service->>Service: ClubPreMembersResponse.from(list)
    Service-->>Controller: ClubPreMembersResponse
    Controller-->>Client: 200 OK + response
Loading
sequenceDiagram
    participant Client
    participant Controller as ClubMemberController
    participant Service as ClubMemberManagementService
    participant Repo as ClubPreMemberRepository
    participant DB as Database

    Client->>Controller: DELETE /{clubId}/pre-members/{preMemberId} (requesterId)
    Controller->>Service: removePreMember(clubId, preMemberId, requesterId)
    Service->>Service: validateManagerAccess(clubId, requesterId)
    Service->>Repo: getByIdAndClubId(preMemberId, clubId)
    Repo->>DB: SELECT pre-member WHERE id=... AND club_id=...
    DB-->>Repo: ClubPreMember or empty
    Repo-->>Service: ClubPreMember (or exception)
    Service->>Repo: delete(preMember)
    Repo->>DB: DELETE pre-member
    DB-->>Repo: deletion confirmed
    Repo-->>Service: complete
    Service-->>Controller: void
    Controller-->>Client: 204 No Content
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🐇 I hopped through code and found a door,
Pre-members lined up, ready for more.
GETs bring names, DELETEs clear the way,
I nibbled some carrots and celebrated the day! 🥕

🚥 Pre-merge checks | ✅ 2 | ❌ 2

❌ Failed checks (2 warnings)

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.
Merge Conflict Detection ⚠️ Warning ❌ Merge conflicts detected (15 files):

⚔️ src/main/java/gg/agit/konect/domain/club/controller/ClubMemberApi.java (content)
⚔️ src/main/java/gg/agit/konect/domain/club/controller/ClubMemberController.java (content)
⚔️ src/main/java/gg/agit/konect/domain/club/controller/ClubRecruitmentApi.java (content)
⚔️ src/main/java/gg/agit/konect/domain/club/dto/ClubFeeInfoReplaceRequest.java (content)
⚔️ src/main/java/gg/agit/konect/domain/club/dto/ClubFeeInfoResponse.java (content)
⚔️ src/main/java/gg/agit/konect/domain/club/dto/ClubRecruitmentResponse.java (content)
⚔️ src/main/java/gg/agit/konect/domain/club/dto/ClubRecruitmentUpsertRequest.java (content)
⚔️ src/main/java/gg/agit/konect/domain/club/model/Club.java (content)
⚔️ src/main/java/gg/agit/konect/domain/club/model/ClubRecruitment.java (content)
⚔️ src/main/java/gg/agit/konect/domain/club/repository/ClubPreMemberRepository.java (content)
⚔️ src/main/java/gg/agit/konect/domain/club/service/ClubApplicationService.java (content)
⚔️ src/main/java/gg/agit/konect/domain/club/service/ClubMemberManagementService.java (content)
⚔️ src/main/java/gg/agit/konect/domain/club/service/ClubRecruitmentService.java (content)
⚔️ src/main/java/gg/agit/konect/domain/user/service/UserService.java (content)
⚔️ src/main/java/gg/agit/konect/global/code/ApiResponseCode.java (content)

These conflicts must be resolved before merging into develop.
Resolve conflicts locally and push changes to this branch.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly describes the main changes: adding APIs for retrieving and deleting pre-members, which aligns with the substantial changes across multiple files implementing this functionality.

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

✨ 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 hotfix/pre-member-manage

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

Copy link

@coderabbitai coderabbitai bot left a comment

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 the current code and only fix it if needed.

Inline comments:
In `@src/main/java/gg/agit/konect/domain/club/controller/ClubMemberApi.java`:
- Around line 123-130: The OpenAPI `@Operation` description on the delete endpoint
in ClubMemberApi incorrectly states only president/vice-president can delete
pre-registered members; update the annotation for the delete operation (the
`@Operation` on the delete pre-member endpoint in class ClubMemberApi) to state
that club managers (manager-level access) are allowed in addition to
president/vice-president, and adjust the error list if needed so it matches
actual access rules (e.g., mention FORBIDDEN_CLUB_MANAGER_ACCESS only when
appropriate).
- Around line 110-125: Update the API docs to reflect that managers (운영진/매니저)
are allowed: change the description text for the getPreMembers operation (method
getPreMembers) and the corresponding "사전 등록 회원을 삭제한다." operation to say "동아리 회장,
부회장 또는 운영진(매니저)만 사전 등록 회원을 조회/삭제할 수 있습니다." and ensure any error bullets
referencing FORBIDDEN_CLUB_MANAGER_ACCESS are reworded or removed so they no
longer contradict manager-level access (adjust the human-readable error text
accordingly).

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

이 PR은 동아리 사전 멤버(pre-member) 관리 기능을 개선합니다. 사전 등록된 회원을 조회하고 삭제하는 API를 추가하고, 동아리 인원 관리 권한을 운영진(MANAGER) 이상으로 확대했습니다.

Changes:

  • 사전 등록 회원 리스트 조회 API 추가 (GET /clubs/{clubId}/pre-members)
  • 사전 등록 회원 삭제 API 추가 (DELETE /clubs/{clubId}/pre-members/{preMemberId})
  • 사전 멤버 추가 API의 접근 권한을 회장/부회장에서 운영진 이상으로 확대 (validateLeaderAccessvalidateManagerAccess)

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
ApiResponseCode.java NOT_FOUND_CLUB_PRE_MEMBER 에러 코드 추가
ClubMemberManagementService.java getPreMembers, removePreMember 메서드 추가 및 addPreMember의 권한 검증을 validateManagerAccess로 변경
ClubPreMemberRepository.java findAllByClubId, findByIdAndClubId, getByIdAndClubId, delete 메서드 추가
ClubPreMembersResponse.java 사전 회원 리스트 응답 DTO 추가
ClubMemberController.java getPreMembers, removePreMember 엔드포인트 구현
ClubMemberApi.java 새로운 API 엔드포인트에 대한 Swagger 문서 추가

@dh2906 dh2906 merged commit 1833af2 into develop Feb 17, 2026
1 of 2 checks passed
@dh2906 dh2906 deleted the hotfix/pre-member-manage branch February 17, 2026 14:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Hotfix 운영 환경에서 발생한 우선 순위가 높은 심각한 오류에 대한 이슈입니다.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants