Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
  • Sign in
  • I intern-homework-was
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
    • Locked files
  • Issues 2
    • Issues 2
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 1
    • Merge requests 1
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Terraform modules
  • Monitor
    • Monitor
    • Metrics
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Code review
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • mingyeong.cha
  • intern-homework-was
  • Issues
  • #4
Closed
Open
Issue created Sep 15, 2026 by mingyeong.cha@mingyeong.chaOwner

[feat] 팀 생성, 멤버 추가/삭제, 소유권 위임

name: Feature Request
labels: 'Type : Feature'

기능 요약

팀, 멤버십 API(생성, 상세, 멤버 추가/제거, 소유권 위임)와 ErrorCode 기반 공통 오류 응답을 추가한다.

상세 설명

팀, 멤버십 API

  • 팀 생성 POST /api/teams
    • 인증된 사용자 누구나 만들 수 있고, 생성자가 자동으로 OWNER가 됨
    • 팀 이름은 중복, 빈 값, 100자 초과는 400
  • 팀 상세 GET /api/teams/{teamId}
    • 팀 정보와 멤버 목록(userId, email, displayName, role) 반환
    • 팀이 없거나 소속되지 않은 팀은 404 (존재 여부를 알리지 않음)
  • 멤버 추가 POST /api/teams/{teamId}/members
    • 해당 팀 OWNER만 가능 (아니면 403). 이메일로 추가
    • 이미 멤버면 400, 없는 이메일이면 404
  • 멤버 제거 DELETE /api/teams/{teamId}/members/{userId}
    • 해당 팀 OWNER만 가능 (아니면 403)
    • 마지막 OWNER는 제거 불가 (400, 먼저 위임 필요)
    • 대상이 팀 멤버가 아니면 404
  • 소유권 위임 PATCH /api/teams/{teamId}/owner
    • 해당 팀 OWNER만 가능 (아니면 403). 위임 후 대상은 OWNER, 본인은 MEMBER
    • 같은 팀 멤버에게만 가능 (아니면 404), 자기 자신에게 위임하면 400
  • 역할은 Spring Security 역할이 아니라 팀별 데이터(team_members.role)로 판정

공통 오류 응답

  • ErrorCode enum을 단일 출처로 두고, 응답에 code와 traceId를 포함
    • 프론트는 detail 문구가 아니라 code로 분기
  • Spring 기본 400 응답(형식 오류, 검증 실패)의 영어 메시지를 INVALID_INPUT으로 통일
  • 형식은 RFC 9457 Problem Details(application/problem+json)

Swagger

  • teams 태그: 각 API의 규칙 설명과 성공 응답 설명
  • @ApiErrorCodes로 ErrorCode에서 오류 응답을 생성 (상태별 묶음 + 코드별 예시)
  • role enum(OWNER/MEMBER) 설명은 TeamRole에 정의
  • {userId} 파라미터 설명 ({teamId}도 추가 예정)
  • 401은 인증 확인용 GET /api/me에만 표시

참고 자료

  • ApiResponse
  • 공통 응답 객체 설계
  • RFC 9457 Problem Details
Edited Sep 22, 2026 by mingyeong.cha
Assignee
Assign to
Time tracking