1. API 목록

2. 팀 이미지 관리

2.1. GET: 팀 포스터 이미지 조회

HTTP Request
GET /teams/1/image/posters HTTP/1.1
Host: localhost:8080
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: image/png;charset=UTF-8
Accept-Ranges: bytes
Content-Length: 18

test-image-content
Table 1. /teams/{teamId}/image/posters
Parameter Description

teamId

팀 ID

2.1.1. ⚠️ 실패 케이스

❌ Case 1: 등록되지 않은 이미지
GET /teams/1/image/posters HTTP/1.1
Host: localhost:8080
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 71

{
  "message" : "아이디와 일치하는 이미지가 없습니다"
}
❌ Case 2: 변환 중인 이미지
GET /teams/1/image/posters HTTP/1.1
Host: localhost:8080
HTTP/1.1 202 Accepted
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 49

{
  "message" : "이미지 변환중 입니다"
}

2.2. POST: 팀 포스터 이미지 등록

HTTP Request
POST /teams/1/image/posters HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: Bearer member.access.token
Host: localhost:8080

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=image; filename=poster.png
Content-Type: image/png

test-image-content
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
HTTP Response
HTTP/1.1 201 Created
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Table 2. /teams/{teamId}/image/posters
Parameter Description

teamId

팀 ID

Table 3. Request Headers
Name Description

Authorization

Bearer (teamLeader/admin/teamMember).access.token

Table 4. Request Parts
Part Description

image

등록할 포스터 이미지 (모든 이미지 형식 지원)

2.3. DELETE: 팀 포스터 이미지 삭제

HTTP Request
DELETE /teams/1/image/posters HTTP/1.1
Authorization: Bearer member.access.token
Host: localhost:8080
HTTP Response
HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Table 5. /teams/{teamId}/image/posters
Parameter Description

teamId

팀 ID

Table 6. Request Headers
Name Description

Authorization

Bearer (teamLeader/admin/teamMember).access.token

2.4. GET: 팀 썸네일 이미지 조회

팀 썸네일 조회 시 우선순위: [팀 전용 썸네일] > [분과 기본 썸네일] > [시스템 기본 썸네일] 순으로 조회됩니다. 따라서 별도로 등록한 팀 썸네일이 없더라도 기본 이미지가 반환됩니다.
HTTP Request
GET /teams/1/image/thumbnail HTTP/1.1
Host: localhost:8080
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: image/png;charset=UTF-8
Accept-Ranges: bytes
Content-Length: 18

test-image-content
Table 7. /teams/{teamId}/image/thumbnail
Parameter Description

teamId

팀 ID

2.4.1. ⚠️ 실패 케이스

❌ Case 1: 등록되지 않은 이미지
GET /teams/1/image/thumbnail HTTP/1.1
Host: localhost:8080
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 71

{
  "message" : "아이디와 일치하는 이미지가 없습니다"
}
❌ Case 2: 변환 중인 이미지
GET /teams/1/image/thumbnail HTTP/1.1
Host: localhost:8080
HTTP/1.1 202 Accepted
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 49

{
  "message" : "이미지 변환중 입니다"
}

2.5. POST: 팀 썸네일 이미지 등록

HTTP Request
POST /teams/1/image/thumbnail HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: Bearer member.access.token
Host: localhost:8080

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=image; filename=thumbnail.png
Content-Type: image/png

test-image-content
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
HTTP Response
HTTP/1.1 201 Created
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Table 8. /teams/{teamId}/image/thumbnail
Parameter Description

teamId

팀 ID

Table 9. Request Headers
Name Description

Authorization

Bearer (teamLeader/admin/teamMember).access.token

Table 10. Request Parts
Part Description

image

등록할 썸네일 이미지 (모든 이미지 형식 지원)

2.6. DELETE: 팀 썸네일 이미지 삭제

HTTP Request
DELETE /teams/1/image/thumbnail HTTP/1.1
Authorization: Bearer member.access.token
Host: localhost:8080
HTTP Response
HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Table 11. /teams/{teamId}/image/thumbnail
Parameter Description

teamId

팀 ID

Table 12. Request Headers
Name Description

Authorization

Bearer (teamLeader/admin/teamMember).access.token

2.7. GET: 팀 프리뷰 이미지 조회

HTTP Request
GET /teams/1/image/100 HTTP/1.1
Host: localhost:8080
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: image/png;charset=UTF-8
Accept-Ranges: bytes
Content-Length: 18

test-image-content
Table 13. /teams/{teamId}/image/{imageId}
Parameter Description

teamId

팀 ID

imageId

프리뷰 이미지 ID

2.7.1. ⚠️ 실패 케이스

❌ Case 1: 존재하지 않는 이미지
GET /teams/1/image/999 HTTP/1.1
Host: localhost:8080
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 82

{
  "message" : "존재하지 않는 팀 프리뷰 ID 를 요청하였습니다"
}
❌ Case 2: 변환 중인 이미지
GET /teams/1/image/100 HTTP/1.1
Host: localhost:8080
HTTP/1.1 202 Accepted
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 49

{
  "message" : "이미지 변환중 입니다"
}
❌ Case 3: 물리적 파일이 존재하지 않음
GET /teams/1/image/100 HTTP/1.1
Host: localhost:8080
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 65

{
  "message" : "물리적 파일이 존재하지 않습니다"
}

2.8. POST: 팀 프리뷰 이미지 등록

HTTP Request
POST /teams/1/image HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: Bearer member.access.token
Host: localhost:8080

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=images; filename=preview1.png
Content-Type: image/png

test-image-content
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=images; filename=preview2.png
Content-Type: image/png

test-image-content
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
HTTP Response
HTTP/1.1 201 Created
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Table 14. /teams/{teamId}/image
Parameter Description

teamId

팀 ID

Table 15. Request Headers
Name Description

Authorization

Bearer (teamLeader/admin/teamMember).access.token

Table 16. Request Parts
Part Description

images

등록할 프리뷰 이미지 목록 (리스트)

2.8.1. ⚠️ 실패 케이스

❌ Case 1: 이미지 개수 초과 (5개 초과)
POST /teams/1/image HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: Bearer member.access.token
Host: localhost:8080

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=images; filename=preview1.png
Content-Type: image/png

test-image-content
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 63

{
  "message" : "프리뷰 이미지는 6장 이하입니다"
}

2.9. DELETE: 팀 프리뷰 이미지 삭제

HTTP Request
DELETE /teams/1/image HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer member.access.token
Content-Length: 31
Host: localhost:8080

{
  "imageIds" : [ 100, 101 ]
}
HTTP Response
HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Table 17. /teams/{teamId}/image
Parameter Description

teamId

팀 ID

Table 18. Request Headers
Name Description

Authorization

Bearer (teamLeader/admin/teamMember).access.token

Table 19. Request Fields
Path Type Description

imageIds

Array

삭제할 프리뷰 이미지 ID 리스트

3. 팀 정보 관리

3.1. POST: 팀 등록

HTTP Request
POST /teams HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer admin.access.token
Content-Length: 333
Host: localhost:8080

{
  "contestId" : 1,
  "trackId" : 10,
  "projectName" : "프로젝트명",
  "teamName" : "팀 이름",
  "professorName" : "이도훈",
  "githubPath" : "https://github.com/team1/project",
  "youTubePath" : "https://youtube.com/watch?v=demo1",
  "productionPath" : "https://ditto.pnu.app",
  "overview" : "team1 project overview"
}
HTTP Response
HTTP/1.1 201 Created
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 18

{
  "teamId" : 1
}
Table 20. Request Headers
Name Description

Authorization

Bearer admin.access.token

Table 21. Request Fields
Path Type Description

contestId

Number

대회 ID

trackId

Number

분과 ID (선택)

projectName

String

프로젝트명 (선택)

teamName

String

팀명 (선택)

professorName

String

지도 교수 이름 (선택)

githubPath

String

GitHub 링크 (선택)

youTubePath

String

YouTube 링크 (선택)

productionPath

String

배포 주소 링크 (선택)

overview

String

프로젝트 설명 (선택)

Table 22. Response Fields
Path Type Description

teamId

Number

생성된 팀 ID

3.1.1. ⚠️ 실패 케이스

❌ Case 1: 요청 바디 오류
POST /teams HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer admin.access.token
Content-Length: 210
Host: localhost:8080

{
  "contestId" : null,
  "trackId" : null,
  "projectName" : null,
  "teamName" : null,
  "professorName" : null,
  "githubPath" : null,
  "youTubePath" : null,
  "productionPath" : null,
  "overview" : null
}
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
❌ Case 2: 존재하지 않는 대회 ID
POST /teams HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer admin.access.token
Content-Length: 209
Host: localhost:8080

{
  "contestId" : 999,
  "trackId" : null,
  "projectName" : null,
  "teamName" : null,
  "professorName" : null,
  "githubPath" : null,
  "youTubePath" : null,
  "productionPath" : null,
  "overview" : null
}
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 56

{
  "message" : "존재하지 않는 대회입니다."
}
❌ Case 3: 존재하지 않는 분과 ID
POST /teams HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer admin.access.token
Content-Length: 206
Host: localhost:8080

{
  "contestId" : 1,
  "trackId" : 999,
  "projectName" : null,
  "teamName" : null,
  "professorName" : null,
  "githubPath" : null,
  "youTubePath" : null,
  "productionPath" : null,
  "overview" : null
}
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 56

{
  "message" : "존재하지 않는 분과입니다."
}
❌ Case 4: 해당 대회에 속하지 않은 분과 ID
POST /teams HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer admin.access.token
Content-Length: 204
Host: localhost:8080

{
  "contestId" : 1,
  "trackId" : 2,
  "projectName" : null,
  "teamName" : null,
  "professorName" : null,
  "githubPath" : null,
  "youTubePath" : null,
  "productionPath" : null,
  "overview" : null
}
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 70

{
  "message" : "해당 대회에 속하지 않는 분과입니다."
}

3.2. PATCH: 팀 수정

팀의 상세 정보를 수정합니다. 관리자, 팀장, 팀원이 수정할 수 있습니다. 입력 필드의 필수 여부는 대회의 팀 상세 템플릿 설정(boolean) 에 따라 결정됩니다.

📌 권한별 수정 규칙

  1. 관리자

    • 일부 필드만 수정하는 부분 수정 가능

    • 템플릿에서 Required=true 인 필드를 모두 입력하지 않아도 저장 가능

    • contestId, trackId 변경 가능

  2. 해당 팀의 팀장 / 팀원

    • 템플릿에서 Required=true 인 모든 필드를 반드시 포함해야 저장 가능

    • contestId, trackId 변경 불가

HTTP Request
PATCH /teams/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer member.access.token
Content-Length: 345
Host: localhost:8080

{
  "contestId" : 1,
  "trackId" : 10,
  "projectName" : "AI 기반 추천 시스템",
  "teamName" : "Team A",
  "professorName" : "이도훈",
  "githubPath" : "https://github.com/teamA/project",
  "youTubePath" : "https://youtube.com/watch?v=demo1",
  "productionPath" : "https://teamA-demo.app",
  "overview" : "프로젝트 설명 수정"
}
HTTP Response
HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Table 23. /teams/{teamId}
Parameter Description

teamId

팀 ID

Table 24. Request Headers
Name Description

Authorization

Bearer (teamLeader/admin/teamMember).access.token

Table 25. Request Fields
Path Type Description

contestId

Number

대회 ID (관리자만 변경 가능, 멤버는 변경 불가)

trackId

Number

분과 ID (관리자만 변경 가능, 멤버는 변경 불가)

projectName

String

프로젝트명

teamName

String

팀명

professorName

String

지도 교수 이름

githubPath

String

GitHub 링크

youTubePath

String

YouTube 링크

productionPath

String

배포 링크

overview

String

프로젝트 설명

3.2.1. ⚠️ 실패 케이스

❌ Case 1: 팀장/팀원 권한으로 필수 필드 누락
PATCH /teams/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer member.access.token
Content-Length: 326
Host: localhost:8080

{
  "contestId" : null,
  "trackId" : null,
  "projectName" : null,
  "teamName" : "Team A",
  "professorName" : "이도훈",
  "githubPath" : "https://github.com/teamA/project",
  "youTubePath" : "https://youtube.com/watch?v=demo1",
  "productionPath" : "https://teamA-demo.app",
  "overview" : "프로젝트 설명 수정"
}
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 79

{
  "message" : "팀 상세보기의 필수 항목이 누락되었습니다."
}
❌ Case 2: 팀장/팀원 권한으로 contestId/trackId 변경 시도
PATCH /teams/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer member.access.token
Content-Length: 207
Host: localhost:8080

{
  "contestId" : 2,
  "trackId" : null,
  "projectName" : null,
  "teamName" : null,
  "professorName" : null,
  "githubPath" : null,
  "youTubePath" : null,
  "productionPath" : null,
  "overview" : null
}
HTTP/1.1 403 Forbidden
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 71

{
  "message" : "대회 또는 분과는 변경할 수 없습니다."
}
❌ Case 3: 해당 팀에 대한 수정 권한 없음 (관리자 또는 해당 팀의 팀장/팀원만 수정 가능)
PATCH /teams/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer member.access.token
Content-Length: 231
Host: localhost:8080

{
  "contestId" : null,
  "trackId" : null,
  "projectName" : "프로젝트",
  "teamName" : "팀명",
  "professorName" : "교수명",
  "githubPath" : null,
  "youTubePath" : null,
  "productionPath" : null,
  "overview" : null
}
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 57

{
  "message" : "해당 팀의 팀원이 아닙니다."
}

3.3. DELETE: 팀 삭제

HTTP Request
DELETE /teams/1 HTTP/1.1
Authorization: Bearer admin.access.token
Host: localhost:8080
HTTP Response
HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Table 26. /teams/{teamId}
Parameter Description

teamId

팀 ID

Table 27. Request Headers
Name Description

Authorization

Bearer admin.access.token

3.3.1. ⚠️ 실패 케이스

❌ Case 1: 존재하지 않는 팀
DELETE /teams/999 HTTP/1.1
Authorization: Bearer admin.access.token
Host: localhost:8080
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 53

{
  "message" : "팀이 존재하지 않습니다."
}

3.4. GET: 팀 상세 조회 (비회원용)

해당 팀의 상세 정보를 조회합니다. 비회원 전용 상세 조회 API입니다. 비회원은 좋아요 및 투표 정보를 확인할 수 없기 때문에:

  • isLiked: 항상 false

  • isVoted: 항상 false

또한, 상세 이미지 조회를 위한 previewIds 배열을 함께 반환합니다.

  • 반환된 previewIds로 /teams/{teamId}/image/{imageId} 호출

  • posters 조회는 /teams/{teamId}/image/posters

HTTP Request
GET /teams/1/public HTTP/1.1
Host: localhost:8080
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 818

{
  "contestId" : 1,
  "contestName" : "제6회 PNU 창의융합 SW 해커톤",
  "trackId" : 10,
  "trackName" : "해커톤",
  "teamId" : 1,
  "teamName" : "team1",
  "projectName" : "team1 Project",
  "teamMembers" : [ {
    "memberId" : 1,
    "teamMemberName" : "이지민",
    "roleType" : "ROLE_팀장"
  }, {
    "memberId" : 2,
    "teamMemberName" : "김철수",
    "roleType" : "ROLE_팀원"
  } ],
  "professorName" : "이도훈",
  "githubPath" : "https://github.com/team1/project",
  "youTubePath" : "https://youtube.com/watch?v=demo1",
  "productionPath" : "https://ditto.pnu.app",
  "overview" : "team1 project overview",
  "previewIds" : [ 101, 102, 103 ],
  "isLiked" : false,
  "isVoted" : false,
  "awards" : [ {
    "awardId" : 1,
    "awardName" : "대상",
    "awardColor" : "#FF0000"
  } ]
}
Table 28. /teams/{teamId}/public
Parameter Description

teamId

팀 ID

Table 29. Response Fields
Path Type Description

contestId

Number

대회 ID

contestName

String

대회명

trackId

Number

분과 ID

trackName

String

분과 이름

teamId

Number

팀 ID

teamName

String

팀명

projectName

String

프로젝트명

teamMembers

Array

팀원 목록

teamMembers[].memberId

Number

팀원 ID

teamMembers[].teamMemberName

String

팀원 이름

teamMembers[].roleType

String

팀원 권한 (ROLE_팀장, ROLE_팀원)

professorName

String

지도 교수 이름

githubPath

String

GitHub 링크

youTubePath

String

YouTube 링크

productionPath

String

배포 링크

overview

String

프로젝트 소개

previewIds

Array

상세 이미지 ID 목록

isLiked

Boolean

좋아요 여부 (항상 false)

isVoted

Boolean

투표 여부 (항상 false)

awards

Array

수상 목록

awards[].awardId

Number

수상 ID

awards[].awardName

String

수상명

awards[].awardColor

String

수상 색상

3.5. GET: 팀 상세 조회 (회원용)

해당 팀의 상세 정보를 조회합니다. 회원 전용 상세 조회 API입니다. 현재 시간(투표 기간 여부)에 따라 isLiked, isVoted 값이 달라집니다.

  • 현재가 투표 기간인 경우

  • isVoted: 로그인한 사용자의 투표 여부

  • isLiked: false

  • 현재가 투표 기간이 아닌 경우

  • isVoted: false

  • isLiked: 로그인한 사용자의 좋아요 여부

또한, 상세 이미지 조회를 위한 previewIds 배열을 함께 반환합니다.

  • 반환된 previewIds로 /teams/{teamId}/image/{imageId} 호출

  • posters 조회는 /teams/{teamId}/image/posters

HTTP Request
GET /teams/1 HTTP/1.1
Authorization: Bearer member.access.token
Host: localhost:8080
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 817

{
  "contestId" : 1,
  "contestName" : "제6회 PNU 창의융합 SW 해커톤",
  "trackId" : 10,
  "trackName" : "해커톤",
  "teamId" : 1,
  "teamName" : "team1",
  "projectName" : "team1 Project",
  "teamMembers" : [ {
    "memberId" : 1,
    "teamMemberName" : "이지민",
    "roleType" : "ROLE_팀장"
  }, {
    "memberId" : 2,
    "teamMemberName" : "김철수",
    "roleType" : "ROLE_팀원"
  } ],
  "professorName" : "이도훈",
  "githubPath" : "https://github.com/team1/project",
  "youTubePath" : "https://youtube.com/watch?v=demo1",
  "productionPath" : "https://ditto.pnu.app",
  "overview" : "team1 project overview",
  "previewIds" : [ 101, 102, 103 ],
  "isLiked" : false,
  "isVoted" : true,
  "awards" : [ {
    "awardId" : 1,
    "awardName" : "대상",
    "awardColor" : "#FF0000"
  } ]
}
Table 30. /teams/{teamId}
Parameter Description

teamId

팀 ID

Table 31. Request Headers
Name Description

Authorization

Bearer %s.access.token

Table 32. Response Fields
Path Type Description

contestId

Number

대회 ID

contestName

String

대회명

trackId

Number

분과 ID

trackName

String

분과 이름

teamId

Number

팀 ID

teamName

String

팀명

projectName

String

프로젝트명

teamMembers

Array

팀원 목록

teamMembers[].memberId

Number

팀원 ID

teamMembers[].teamMemberName

String

팀원 이름

teamMembers[].roleType

String

팀원 권한 (ROLE_팀장, ROLE_팀원)

professorName

String

지도 교수 이름

githubPath

String

GitHub 링크

youTubePath

String

YouTube 링크

productionPath

String

배포 링크

overview

String

프로젝트 소개

previewIds

Array

상세 이미지 ID 목록

isLiked

Boolean

좋아요 여부 (투표 기간 아닐 때만 유효, 투표 기간엔 false)

isVoted

Boolean

투표 여부 (투표 기간일 때만 유효, 투표 기간 아닐 땐 false)

awards

Array

수상 목록

awards[].awardId

Number

수상 ID

awards[].awardName

String

수상명

awards[].awardColor

String

수상 색상