Skip to content

feat: 초대 수락시 프로젝트 역할 선택 및 프로젝트 API 인증 전환 구현 - #40

Merged
chazy-d merged 9 commits into
developfrom
feature/project-invitation-role-auth
Jul 22, 2026
Merged

feat: 초대 수락시 프로젝트 역할 선택 및 프로젝트 API 인증 전환 구현#40
chazy-d merged 9 commits into
developfrom
feature/project-invitation-role-auth

Conversation

@chazy-d

@chazy-d chazy-d commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

🔗 관련 이슈 (Related Issue)


✅ 작업 내용

프로젝트 관련 API에서 임시 X-USER-ID 헤더 사용을 제거하고, JWT 인증으로 주입되는 현재 사용자 ID를 사용하도록 변경했습니다.
추가로 초대 링크 수락 시 사용자가 프로젝트 내 역할을 선택할 수 있도록 roleNames 저장 흐름을 반영했습니다!

주요 검토 파일

  • src/main/java/com/slatto/domain/project/controller/ProjectController.java
  • src/main/java/com/slatto/domain/project/controller/ProjectMemberController.java
  • src/main/java/com/slatto/domain/project/controller/ProjectNoticeController.java
  • src/main/java/com/slatto/domain/project/controller/ProjectInvitationController.java
  • src/main/java/com/slatto/domain/project/service/ProjectInvitationService.java
  • src/main/java/com/slatto/domain/project/service/ProjectMemberService.java
  • src/main/java/com/slatto/global/config/SecurityConfig.java

1. 프로젝트 API 인증 방식 전환

프로젝트 관련 API에서 임시로 사용하던 X-USER-ID 헤더를 제거하고, 인증 필터에서 주입되는 @AuthenticationPrincipal Long userId를 사용하도록 변경했습니다.

  • 프로젝트 생성, 목록, 상세, 수정, 삭제
  • 프로젝트 멤버 목록, 상세, 역할 수정, 삭제, 나가기
  • 프로젝트 공지 목록, 등록, 수정, 삭제
  • 프로젝트 초대 링크 생성, 수락

2. 초대 링크 조회 비로그인 접근 허용

초대 링크 진입 화면에서 로그인 전에도 초대 정보를 확인할 수 있도록 조회 API만 비로그인 접근을 허용했습니다.

GET /api/v1/project-invitations/{token}

초대 수락 API는 프로젝트 멤버 추가가 발생하는 기능이므로 기존처럼 인증이 필요합니다.


3. 초대 수락 시 역할 선택 반영

초대 링크 수락 요청에 roleNames를 추가했습니다.

{
  "roleNames": [
    "DIRECTOR",
    "EDITOR"
  ]
}

수락 시 선택한 역할은 ProjectUserRole로 저장되며, 중복 역할은 제거한 뒤 저장하도록 처리했습니다.
응답에도 저장된 역할 목록을 포함했습니다.


4. 프로젝트 멤버 역할 수정 권한 변경

프로젝트 멤버 역할 수정 권한을 다음 기준으로 변경했습니다.

  • 프로젝트 ADMIN
  • 수정 대상 멤버 본인

피그마에 존재하듯 사용자가 초대 수락 후에도 자신의 프로젝트 역할을 직접 수정할 수 있도록 했습니다.


✅ PR 체크리스트

  • PR 제목은 커밋 컨벤션을 따랐습니다.
  • 관련 이슈를 연결했습니다.
  • 변경 사항에 대한 테스트를 진행했습니다.

💬 To Reviewers

다음 부분을 중심으로 확인 부탁드립니다!

  • 프로젝트 API에서 @AuthenticationPrincipal Long userId를 사용하는 방식이 인증 구조와 맞는지

Summary by CodeRabbit

  • 새 기능

    • 프로젝트 초대 수락 시 원하는 역할을 선택할 수 있습니다.
    • 초대 수락 결과에 부여된 역할 정보가 포함됩니다.
    • 초대 링크를 로그인 전에도 확인할 수 있습니다.
  • 개선 사항

    • 프로젝트·멤버·공지 기능이 로그인 계정 정보를 기반으로 안전하게 처리됩니다.
    • 프로젝트 멤버는 본인의 역할을 직접 변경할 수 있으며, 관리자는 다른 멤버의 역할도 변경할 수 있습니다.

@chazy-d chazy-d self-assigned this Jul 22, 2026
@chazy-d chazy-d added the feature 새로운 기능 추가 label Jul 22, 2026
@coderabbitai

coderabbitai Bot commented Jul 22, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: d48492a4-cad1-41fd-96e4-0cd4e432d7e2

📥 Commits

Reviewing files that changed from the base of the PR and between fa44cba and 933d2f1.

📒 Files selected for processing (9)
  • src/main/java/com/slatto/domain/project/controller/ProjectController.java
  • src/main/java/com/slatto/domain/project/controller/ProjectInvitationController.java
  • src/main/java/com/slatto/domain/project/controller/ProjectMemberController.java
  • src/main/java/com/slatto/domain/project/controller/ProjectNoticeController.java
  • src/main/java/com/slatto/domain/project/dto/ProjectInvitationAcceptRequest.java
  • src/main/java/com/slatto/domain/project/dto/ProjectInvitationAcceptResponse.java
  • src/main/java/com/slatto/domain/project/service/ProjectInvitationService.java
  • src/main/java/com/slatto/domain/project/service/ProjectMemberService.java
  • src/main/java/com/slatto/global/config/SecurityConfig.java

📝 Walkthrough

Walkthrough

프로젝트 관련 API의 사용자 식별을 X-USER-ID 헤더에서 @AuthenticationPrincipal로 전환했습니다. 초대 수락 시 역할 선택·저장과 응답 역할 목록을 추가했고, 멤버 역할 수정 권한을 관리자 또는 본인으로 변경했습니다. 초대 정보 조회 GET 경로도 인증 없이 허용했습니다.

Changes

프로젝트 인증 및 초대 역할 처리

Layer / File(s) Summary
프로젝트 API 인증 주입 전환
src/main/java/com/slatto/domain/project/controller/ProjectController.java, src/main/java/com/slatto/domain/project/controller/ProjectMemberController.java, src/main/java/com/slatto/domain/project/controller/ProjectNoticeController.java
프로젝트, 멤버, 공지 엔드포인트의 currentUserId 주입을 @RequestHeader에서 @AuthenticationPrincipal로 변경했습니다.
초대 수락 역할 선택 및 저장
src/main/java/com/slatto/domain/project/controller/ProjectInvitationController.java, src/main/java/com/slatto/domain/project/dto/ProjectInvitationAcceptRequest.java, src/main/java/com/slatto/domain/project/dto/ProjectInvitationAcceptResponse.java, src/main/java/com/slatto/domain/project/service/ProjectInvitationService.java, src/main/java/com/slatto/global/config/SecurityConfig.java
초대 수락 요청에 검증된 roleNames를 추가하고, 역할을 중복 제거해 저장하며 응답에 포함했습니다. 초대 정보 조회 GET 경로를 permitAll로 설정했습니다.
멤버 역할 수정 권한 변경
src/main/java/com/slatto/domain/project/service/ProjectMemberService.java
프로젝트 관리자 또는 수정 대상 본인만 멤버 역할을 수정할 수 있도록 권한 검증을 변경했습니다.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Possibly related PRs

  • SLAT-TO/SLAT-TO-BE#19: ProjectMemberController의 사용자 ID 주입 방식 변경과 직접 연결됩니다.
  • SLAT-TO/SLAT-TO-BE#22: 멤버 역할 수정 엔드포인트와 권한 검증 흐름을 이어받습니다.
  • SLAT-TO/SLAT-TO-BE#33: 초대 컨트롤러의 기존 헤더 기반 구현과 직접 연결됩니다.

Suggested labels: refactor

Suggested reviewers: guingguing, kohseoyoung, sangwon02, young0206

🚥 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
Title check ✅ Passed 제목이 초대 수락 역할 선택과 프로젝트 API 인증 전환이라는 변경 핵심을 잘 요약합니다.
Description check ✅ Passed 관련 이슈, 작업 내용, 체크리스트가 템플릿 구조를 거의 모두 충족합니다.
Linked Issues check ✅ Passed 핵심 요구사항인 X-USER-ID 제거, AuthenticationPrincipal 적용, 비로그인 조회, 역할 저장/응답, 권한 변경이 반영되었습니다.
Out of Scope Changes check ✅ Passed 인증 전환, 초대 수락 역할 추가, 권한 변경과 무관한 변경은 보이지 않습니다.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

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

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

Labels

feature 새로운 기능 추가

Projects

None yet

Development

Successfully merging this pull request may close these issues.

FEAT: 초대 수락 역할 선택 및 프로젝트 API 인증 전환

3 participants