[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)로 판정
공통 오류 응답
-
ErrorCodeenum을 단일 출처로 두고, 응답에code와traceId를 포함- 프론트는
detail문구가 아니라code로 분기
- 프론트는
- Spring 기본 400 응답(형식 오류, 검증 실패)의 영어 메시지를
INVALID_INPUT으로 통일 - 형식은 RFC 9457 Problem Details(
application/problem+json)
Swagger
-
teams태그: 각 API의 규칙 설명과 성공 응답 설명 -
@ApiErrorCodes로ErrorCode에서 오류 응답을 생성 (상태별 묶음 + 코드별 예시) -
roleenum(OWNER/MEMBER) 설명은TeamRole에 정의 -
{userId}파라미터 설명 ({teamId}도 추가 예정) - 401은 인증 확인용
GET /api/me에만 표시