Skip to content

[WTH-520] public용 포지션 목록 조회 api 구현 - #116

Merged
woneeeee merged 5 commits into
devfrom
feat/WTH-520-public용-포지션-목록-조회-api-구현
Sep 22, 2026

Hidden character warning

The head ref may contain hidden characters: "feat/WTH-520-public\uc6a9-\ud3ec\uc9c0\uc158-\ubaa9\ub85d-\uc870\ud68c-api-\uad6c\ud604"
Merged

woneeeee merged 5 commits into
devfrom
feat/WTH-520-public용-포지션-목록-조회-api-구현

Conversation

@woneeeee

@woneeeee woneeeee commented Sep 22, 2026

Copy link
Copy Markdown
Member

📌 Summary

어떤 작업인지 한 줄 요약해 주세요.

멤버용 포지션 옵션 목록 조회 API를 추가하고, 포지션 옵션 저장 시 멤버 배정이 불필요하게 초기화되던 문제를 수정합니다.

📝 Changes

변경사항을 what, why, how로 구분해 작성해 주세요.

What

  1. GET /api/v4/clubs/{clubId}/positions 추가 — 활성 멤버라면 관리자가 아니어도 포지션 옵션 목록 (id/name/color/displayOrder)을 조회할 수 있습니다.
  2. PUT /api/v4/admin/clubs/{clubId}/positions(포지션 옵션 전체 저장) 호출 시, 요청에 이름이 그대로 남아있는 옵션은 기존 엔티티를 재사용하도록 수정했습니다. 이름이 사라진 옵션만 삭제되고, 그 옵션을 참조하던 멤버만 포지션이 초기화됩니다.

Why

  1. 멤버 목록 화면에 positionOptionId 필터가 이미 있는데, 정작 멤버가 어떤 포지션 옵션이 있는지 조회할 방법이 없었습니다 (관리자 전용 조회만 존재).
  2. 기존 save()는 옵션 목록을 항상 hard delete 후 재생성하는 방식이라, 옵션 하나만 추가/이름 변경해도 6개 옵션 전체가 새 id를 받고, 그 옵션들을 참조하던 모든 멤버의 포지션 배정이 null로 초기화되는 부작용이 있었습니다.

How

  1. GetClubPositionOptionQueryService.findAllForMember() 추가 — ClubMemberPolicy.getActiveMember로 활성 멤버만 검증 (관리자용 findAll()requireAdmin 그대로 유지), ClubMemberController에 엔드포인트 연결, 신규 성공 코드 POSITION_OPTIONS_FIND_PUBLIC_SUCCESS(11131) 추가.
  2. PUT /positions 요청 계약을 id 기반으로 재설계:
    • ClubPositionOptionRequestid: Long? 추가 — id가 있으면 해당 id의 기존 옵션을 재사용해 update()(멤버 배정 보존), 없으면 신규 생성.
    • SaveClubPositionOptionsRequestdeletedPositionIds: List<Long> 추가 — FE가 폼의 삭제 버튼으로 지운 옵션 id를 명시적으로 전달하면, 그 옵션을 참조하던 멤버만 정리(clear) 후 삭제.
    • id가 options(수정)와 deletedPositionIds(삭제)에 동시에 있으면 신규 에러코드 POSITION_OPTION_UPDATE_DELETE_CONFLICT(21123)로 막음.
    • name을 식별자로 삼아 암묵적으로 삭제를 추론하던 이전 방식은 리뷰 피드백에 따라 제거 (이름 변경과 삭제를 구분 못 하는 등 엣지 케이스 우려).

📸 Screenshots / Logs

필요시 스크린샷 or 로그를 첨부해주세요.

💡 Reviewer 참고사항

리뷰에 참고할 내용을 작성해주세요.

✅ Checklist

  • PR 제목 설정 완료 (WTH-123 인증 필터 설정)
  • 테스트 구현 완료
  • 리뷰어 등록 완료
  • 자체 코드 리뷰 완료

@woneeeee woneeeee self-assigned this Sep 22, 2026
@woneeeee woneeeee added the 📬 API 서버 API 통신 label Sep 22, 2026
@coderabbitai

coderabbitai Bot commented Sep 22, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 1237f3c9-9314-4ca0-b737-10c5b534489c


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.

@woneeeee
woneeeee requested review from hyxklee and soo0711 September 22, 2026 03:47
@woneeeee
woneeeee merged commit 2a0f132 into dev Sep 22, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

📬 API 서버 API 통신

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants