1. 유저

1.1. 유저가 신청한 모든 행사 조회

Request

GET /api/v1/users/events?page=1&size=10&sort=id%2Casc HTTP/1.1
Authorization: access token
Host: localhost:8080
Request Header
Name Description Optional

Authorization

액세스 토큰

false

Query Parameter
Name Description Optional

page

페이지

true

size

페이지 내 개수

true

sort

정렬 방법(ex. id,desc)

true

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 413

{
  "data" : [ {
    "id" : 1,
    "title" : "제목",
    "location" : "위치",
    "clubName" : "클럽1 이름",
    "posterImageUrl" : "null포스터 파일명",
    "startDate" : "2023-09-21",
    "participationStatus" : "PENDING",
    "ticketCount" : 0
  } ],
  "pageData" : {
    "first" : true,
    "last" : true,
    "pageNumber" : 0,
    "size" : 10,
    "totalPages" : 1,
    "totalElements" : 1
  }
}
Response Body
Path Type Description

data

Array

페이지 내 이벤트 정보

data[].id

Number

이벤트 아이디

data[].title

String

이벤트 제목

data[].location

String

이벤트 위치

data[].clubName

String

이벤트 주최자

data[].posterImageUrl

String

포스터 URL

data[].startDate

String

이벤트 시작일

data[].participationStatus

String

이벤트 신청 상태

data[].ticketCount

Number

신청한 티켓 수

pageData

Object

페이지 정보

pageData.first

Boolean

첫 페이지 여부

pageData.last

Boolean

마지막 페이지 여부

pageData.pageNumber

Number

현재 페이지 번호

pageData.size

Number

페이지 내 개수

pageData.totalPages

Number

총 페이지 개수

pageData.totalElements

Number

총 이벤트 개수

1.2. 유저의 클럽 목록 조회

Request

GET /api/v1/users/clubs HTTP/1.1
Authorization: access token
Host: localhost:8080
Request Header
Name Description Optional

Authorization

액세스 토큰

true

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 186

[ {
  "id" : 1,
  "logoImageUrl" : "null클럽 이미지 URL",
  "name" : "클럽1 이름"
}, {
  "id" : 2,
  "logoImageUrl" : "null클럽 이미지 URL",
  "name" : "클럽2 이름"
} ]
Response Body
Path Type Description

[]

Array

클럽

[].id

Number

클럽 아이디

[].logoImageUrl

String

클럽 이미지 Url

[].name

String

클럽 이름

1.3. 카카오 로그인으로 회원가입한 유저 - 신규 유저일 경우

Request

POST /api/v1/users/oauths?_csrf=EpRJBjKcUxPQNrwx-_f-QWUbt1ShfV25tFJYzPEmTsWQ9h7lK6YvYASrZCv9BIsDn9rKI1UqmjaRRT6U1zFh9MFAKKahxy3W HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 26
Host: localhost:8080

{
  "code" : "123456789"
}
Request Body
필드명 타입 필수 값 Description

code

String

true

카카오 로그인 코드

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 63

{
  "userId" : 1,
  "accessToken" : "",
  "refreshToken" : ""
}
Response Body
Path Type Description

userId

Number

유저 ID

accessToken

String

access token

refreshToken

String

refresh token

1.4. 카카오 로그인으로 회원가입한 유저 - 기존 유저일 경우

Request

POST /api/v1/users/oauths?_csrf=vxrPVbfGAqZJkDPoFp3dHcb6eBTFzlH5cAqoRyHPICrf0NGbjSv2bdL_YJFk8grYcrDpeKeZVXb9-GjUEzzJJUf3FUzo5rD- HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 26
Host: localhost:8080

{
  "code" : "123456789"
}
Request Body
필드명 타입 필수 값 Description

code

String

true

카카오 로그인 코드

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 88

{
  "userId" : 1,
  "accessToken" : "access token",
  "refreshToken" : "refresh token"
}
Response Body
Path Type Description

userId

Number

유저 ID

accessToken

String

access token

refreshToken

String

refresh token

1.5. 신규 유저일 경우 필수 정보 작성

Request

POST /api/v1/users?_csrf=MjAy_mxZy-rAuvUosVqrNr_qZ_HXfhjmOZthc1asYp7F87EAV1YAzFVor9rtjcFMgnefAtzcSsjvHHnLCf1WEjOcVa6hkdJh HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 102
Host: localhost:8080

{
  "userId" : 2,
  "name" : "name",
  "phoneNumber" : "010-1234-5678",
  "email" : "abcd@gmail.com"
}
Request Body
필드명 타입 필수 값 Description

userId

Number

true

유저 ID

name

String

true

유저 이름

phoneNumber

String

true

유저 핸드폰 번호

email

String

유저 이메일

Response

HTTP/1.1 201 Created
Location: /api/v1/users/1
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 88

{
  "userId" : 1,
  "accessToken" : "access token",
  "refreshToken" : "refresh token"
}
Response Body
Path Type Description

userId

Number

유저 ID

accessToken

String

access token

refreshToken

String

refresh token

1.6. 유저 탈퇴

Request

DELETE /api/v1/users HTTP/1.1
Authorization: Access Token
Content-Type: application/x-www-form-urlencoded
Host: localhost:8080
Content-Length: 102

_csrf=R8pQQ8wSb3B9748dQNCyEuDQKXE9mScd-4EMY4rJ1ALYbpXYdf0zdvx0XhZQi-4qdf2GK9PpBEkKqUEwneQ1UOyr52G6D6bv
Request Header
Name Description Optional

Authorization

액세스 토큰

false

Response Body
HTTP/1.1 204 No Content
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

1.7. 유저 프로필 페이지 확인

Request

GET /api/v1/me/profile HTTP/1.1
Authorization: access token
Host: localhost:8080
Request Header
Name Description Optional

Authorization

access token

false

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 134

{
  "username" : "멤버명",
  "phoneNumber" : "010-1234-5678",
  "email" : "www.image.com",
  "profileImageUrl" : "abcd@gmail.com"
}
Response Body
Path Type Description

username

String

유저 이름

phoneNumber

String

유저 전화번호

email

String

유저 이메일

profileImageUrl

String

유저 프로필 이미지 URL

1.8. 유저 필수 정보 변경 (닉네임, 휴대폰 번호)

Request

PUT /api/v1/me/profile?_csrf=dNj6c-bXO-dukwj5EoRwSVIkoWQ-GUcfWmOcbWGNx71-5Nh5ROqfQtK1X9RDoW7IdKlEfzZAjAVdeCUyYwH5CVHu8o9L3bpJ HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: access token
Content-Length: 92
Host: localhost:8080

{
  "name" : "멤버명1",
  "phoneNumber" : "010-1234-6789",
  "email" : "abcd@gmail.com"
}
Request Header
Name Description Optional

Authorization

access token

false

Request Body
필드명 타입 필수 값 Description

name

String

true

유저 이름

phoneNumber

String

true

유저 전화번호

email

String

유저 이메일

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 88

{
  "userId" : 1,
  "accessToken" : "access token",
  "refreshToken" : "refresh token"
}
Response Body
Path Type Description

userId

Number

유저 ID

accessToken

String

액세스 토큰

refreshToken

String

리프레시 토큰

1.9. 유저 프로필 이미지 변경

Request

PATCH /api/v1/me/profile HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: Access Token
Host: localhost:8080
Request Header
Name Description Optional

Authorization

액세스 토큰

false

Content-Type

multipart/form-data

false

Request Part
Part Description Optional

userImage

유저 프로필 이미지

false

Response Body
HTTP/1.1 204 No Content
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

1.10. 유저 프로필 이미지 제거(기본 이미지로 변경)

Request

DELETE /api/v1/me/profile/images HTTP/1.1
Authorization: Access Token
Content-Type: application/x-www-form-urlencoded
Host: localhost:8080
Content-Length: 102

_csrf=7TCd_ZXNpxm544PL77HmkYFxFk0diaN1Ic-NAh8pRlS_X0v5i1Ovn6CokyGU2rP73ZzS9ONFOy8uuMJYQ_brNSlNJDWHa3ia
Request Header
Name Description Optional

Authorization

액세스 토큰

false

Response Body
HTTP/1.1 204 No Content
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

1.11. 유저 이메일 수신 상태 변경

Request

PATCH /api/v1/me/profile/email/consent?_csrf=w6HYCscjNs9Oq_23_CrTS_-ZXw_HF7oma9Y32N6ZDTKi65Kd-pnhOvQVVf9jmJ7SmAfnLs2tcm2jJ4oLU7BV4OqgOFSQ06Ct HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token
Content-Length: 27
Host: localhost:8080

{
  "emailConsent" : true
}
Request Header
Name Description Optional

Authorization

액세스 토큰

false

Request Fields
필드명 타입 필수 값 Description

emailConsent

Boolean

true

이메일 수신 동의 여부

Response Body
HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

1.12. 유저가 북마크한 행사 확인

Request

GET /api/v1/me/events/bookmark?page=1&size=10&sort=id%2Casc HTTP/1.1
Authorization: access token
Host: localhost:8080
Request Header
Name Description Optional

Authorization

액세스 토큰

false

Query Parameter
Name Description Optional

page

페이지

true

size

페이지 내 개수

true

sort

정렬 방법(ex. id,desc)

true

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 795

{
  "data" : [ {
    "id" : 1,
    "title" : "제목",
    "location" : "위치",
    "clubName" : "클럽1 이름",
    "posterImageUrl" : "null포스터 파일명",
    "startDate" : "2023-09-21",
    "bookmark" : true
  }, {
    "id" : 2,
    "title" : "제목",
    "location" : "위치",
    "clubName" : "클럽1 이름",
    "posterImageUrl" : "null포스터 파일명",
    "startDate" : "2023-09-21",
    "bookmark" : true
  }, {
    "id" : 3,
    "title" : "제목",
    "location" : "위치",
    "clubName" : "클럽1 이름",
    "posterImageUrl" : "null포스터 파일명",
    "startDate" : "2023-09-21",
    "bookmark" : true
  } ],
  "pageData" : {
    "first" : true,
    "last" : true,
    "pageNumber" : 0,
    "size" : 3,
    "totalPages" : 1,
    "totalElements" : 3
  }
}
Response Body
Path Type Description

data

Array

페이지 내 이벤트 정보

data[].id

Number

이벤트 아이디

data[].title

String

이벤트 제목

data[].location

String

이벤트 위치

data[].clubName

String

이벤트 주최자

data[].posterImageUrl

String

포스터 URL

data[].startDate

String

이벤트 시작일

data[].bookmark

Boolean

북마크 상태

pageData

Object

페이지 정보

pageData.first

Boolean

첫 페이지 여부

pageData.last

Boolean

마지막 페이지 여부

pageData.pageNumber

Number

현재 페이지 번호

pageData.size

Number

페이지 내 개수

pageData.totalPages

Number

총 페이지 개수

pageData.totalElements

Number

총 이벤트 개수

1.13. 행사 북마크 상태 변경

Request

PATCH /api/v1/me/events/1?_csrf=grVf2-dtCxs15o2IRH0SPFnKV9Qs90NqmLkyzagKzAhvzAqE4Y0-7tFbaH4Y0bS_J1AmCG_6erUcw3tH_IoH-p84-z9f9DK1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token
Content-Length: 23
Host: localhost:8080

{
  "bookmark" : true
}
Path Parameter
Table 1. /api/v1/me/events/{eventId}
Parameter Description

eventId

행사 아이디

Request Header
Name Description Optional

Authorization

액세스 토큰

false

Request Body

필드명 타입 필수 값 Description

bookmark

Boolean

true

북마크 상태

Response Body
HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

1.14. 유저의 행사 북마크 여부 확인

Request

GET /api/v1/me/events/1 HTTP/1.1
Authorization: Access Token
Host: localhost:8080
Path Parameter
Table 2. /api/v1/me/events/{eventId}
Parameter Description

eventId

이벤트 ID

Request Header
Name Description Optional

Authorization

유저 액세스 토큰

false

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 4

true
Response Body

Unresolved directive in user/bookmark-api.adoc - include::../../../build/generated-snippets/user/isBookmarked/response-body.adoc[] :sectnums:

2. 클럽

2.1. 클럽 개설

Request

POST /api/v1/clubs HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: token
Accept: application/json
Host: localhost:8080

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=request
Content-Type: application/json

{"name":"연사모","info":"연어를 사랑하는 모임"}
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=logoImage; filename=logoImage.jpg
Content-Type: image/jpeg

<<jpeg data>>
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
Request Header
Name Description Optional

Authorization

유저 액세스 토큰

false

Multipart Form Data
Part Description Optional

request

클럽 생성 요청 DTO

false

logoImage

클럽 썸네일 이미지

false

Request Form Data
Path Type Description

name

String

클럽 이름

info

String

클럽 소개

Response

HTTP/1.1 201 Created
Location: /api/v1/clubs/1
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Response Header
Name Description

Location

생성된 클럽의 URI

2.2. 클럽 삭제

Request

DELETE /api/v1/clubs/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: access token
Host: localhost:8080
Path Parameter
Table 3. /api/v1/clubs/{clubId}
Parameter Description

clubId

클럽 ID

Request Header
Name Description Optional

Authorization

유저 액세스 토큰

false

Response

HTTP/1.1 204 No Content
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

2.3. 클럽 행사 조회

Request

GET /api/v1/clubs/1/events?page=1&size=3&sort=id%2Casc HTTP/1.1
Authorization: access token
Host: localhost:8080
Request Header
Name Description Optional

Authorization

유저 액세스 토큰

false

Path Parameter
Table 4. /api/v1/clubs/{clubId}/events
Parameter Description

clubId

클럽 아이디

Query Parameter
Name Description Optional

page

페이지

true

size

페이지 내 개수

true

sort

정렬 방법(ex. id,desc)

true

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 1783

{
  "data" : [ {
    "id" : 1,
    "eventInfo" : {
      "title" : "제목",
      "posterImageUrl" : "null포스터 파일명",
      "location" : "위치",
      "startDate" : "2023-09-21",
      "startTime" : "12:30:30",
      "endDate" : "2024-09-21",
      "endTime" : "12:30:30",
      "openStatus" : "ALL",
      "isEnded" : false
    },
    "clubInfo" : {
      "name" : "클럽1 이름",
      "logoImageUrl" : "null클럽 이미지 URL"
    },
    "managerInfo" : {
      "name" : "박씨",
      "profileImageUrl" : "abcd@gmail.com"
    }
  }, {
    "id" : 2,
    "eventInfo" : {
      "title" : "제목",
      "posterImageUrl" : "null포스터 파일명",
      "location" : "위치",
      "startDate" : "2023-09-21",
      "startTime" : "12:30:30",
      "endDate" : "2024-09-21",
      "endTime" : "12:30:30",
      "openStatus" : "ALL",
      "isEnded" : false
    },
    "clubInfo" : {
      "name" : "클럽1 이름",
      "logoImageUrl" : "null클럽 이미지 URL"
    },
    "managerInfo" : {
      "name" : "박씨",
      "profileImageUrl" : "abcd@gmail.com"
    }
  }, {
    "id" : 3,
    "eventInfo" : {
      "title" : "제목",
      "posterImageUrl" : "null포스터 파일명",
      "location" : "위치",
      "startDate" : "2023-09-21",
      "startTime" : "12:30:30",
      "endDate" : "2024-09-21",
      "endTime" : "12:30:30",
      "openStatus" : "CLUB",
      "isEnded" : false
    },
    "clubInfo" : {
      "name" : "클럽1 이름",
      "logoImageUrl" : "null클럽 이미지 URL"
    },
    "managerInfo" : {
      "name" : "박씨",
      "profileImageUrl" : "abcd@gmail.com"
    }
  } ],
  "pageData" : {
    "first" : true,
    "last" : true,
    "pageNumber" : 0,
    "size" : 3,
    "totalPages" : 1,
    "totalElements" : 3
  }
}
Response Body
Path Type Description

data

Array

페이지 내 행사 정보

data[].id

Number

행사 id

data[].eventInfo

Object

행사 정보

data[].eventInfo.title

String

행사 제목

data[].eventInfo.posterImageUrl

String

포스터 URL

data[].eventInfo.location

String

행사 위치

data[].eventInfo.startDate

String

행사 시작 날짜

data[].eventInfo.startTime

String

행사 시작 시간

data[].eventInfo.endDate

String

행사 종료 날짜

data[].eventInfo.endTime

String

행사 종료 시간

data[].eventInfo.openStatus

String

행사 공개 여부

data[].eventInfo.isEnded

Boolean

행사 종료 여부

data[].clubInfo

Object

클럽 정보

data[].clubInfo.name

String

클럽 명

data[].clubInfo.logoImageUrl

String

클럽 이미지 Url

data[].managerInfo

Object

담당자 정보

data[].managerInfo.name

String

담당자 이름

data[].managerInfo.profileImageUrl

String

담당자 이미지 Url

pageData

Object

페이지 정보

pageData.first

Boolean

첫 페이지 여부

pageData.last

Boolean

마지막 페이지 여부

pageData.pageNumber

Number

현재 페이지 번호

pageData.size

Number

페이지 내 개수

pageData.totalPages

Number

총 페이지 개수

pageData.totalElements

Number

총 행사 개수

2.4. 클럽 멤버 조회

Request

GET /api/v1/clubs/1/members HTTP/1.1
Authorization: access token
Host: localhost:8080
Request Header
Name Description Optional

Authorization

유저 액세스 토큰

false

Path Parameter
Table 5. /api/v1/clubs/{clubId}/members
Parameter Description

clubId

클럽 아이디

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 204

[ {
  "id" : 1,
  "name" : "멤버명",
  "profileImageUrl" : "www.image.com",
  "role" : "MANAGER"
}, {
  "id" : 2,
  "name" : "멤버명",
  "profileImageUrl" : "www.image.com",
  "role" : "MANAGER"
} ]
Response Body
Path Type Description

[]

Array

멤버 리스트

[].id

Number

멤버의 유저 id

[].name

String

멤버 이름

[].profileImageUrl

String

멤버 이미지 Url

[].role

String

멤버 권한

2.5. 클럽 멤버 권한 변경

Request

PATCH /api/v1/clubs/1/members/1?_csrf=uBjS_5XcVB64G3LitHb-_HwYqJrxfaNZ_QHsGZgpO5eSQ-R2gXnmz6DrMHqVeETTjVvKxRgghfjAT8V0nmWNePsaXfanIYZC HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: access token
Content-Length: 24
Host: localhost:8080

{
  "role" : "MANAGER"
}
Request Header
Name Description Optional

Authorization

유저 액세스 토큰

false

Request Body
{
  "role" : "MANAGER"
}
필드명 타입 필수 값 Description

role

String

true

멤버 권한

Path Parameter
Table 6. /api/v1/clubs/{clubId}/members/{memberId}
Parameter Description

clubId

클럽 아이디

memberId

멤버의 유저 id

Response

HTTP/1.1 204 No Content
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

2.6. 클럽 멤버 추방

Request

DELETE /api/v1/clubs/1/members/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: access token
Host: localhost:8080
Request Header
Name Description Optional

Authorization

유저 액세스 토큰

false

Path Parameter
Table 7. /api/v1/clubs/{clubId}/members/{memberId}
Parameter Description

clubId

클럽 아이디

memberId

멤버의 유저 id

Response

HTTP/1.1 204 No Content
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

2.7. 클럽 조회

Request

GET /api/v1/clubs/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: access token
Host: localhost:8080
Request Header
Name Description Optional

Authorization

유저의 액세스 토큰

false

Path Parameter
Table 8. /api/v1/clubs/{clubId}
Parameter Description

clubId

클럽 아이디

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 182

{
  "name" : "클럽1 이름",
  "logoImageUrl" : "null클럽 이미지 URL",
  "info" : "클럽 정보",
  "memberCount" : 0,
  "coverImageUrl" : "null클럽 커버 이미지 URL"
}
Response Body
Path Type Description

name

String

클럽 이름

logoImageUrl

String

클럽 이미지 Url

info

String

클럽 소개

memberCount

Number

클럽 멤버 수

coverImageUrl

String

클럽 커버 이미지 Url

2.8. 클럽 수정

Request

PATCH /api/v1/clubs/1 HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: token
Accept: application/json
Host: localhost:8080
Path Parameter
Table 9. /api/v1/clubs/{clubId}
Parameter Description

clubId

클럽 ID

Request Header
Name Description Optional

Authorization

유저 액세스 토큰

false

Multipart Form Data
Part Description Optional

request

클럽 수정 요청 DTO

true

logoImage

새로운 클럽 로고 이미지

true

coverImage

새로운 클럽 배경 이미지

true

Request Form Data
Path Type Description

name

String

클럽 이름

info

String

클럽 소개

Response

HTTP/1.1 204 No Content
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

2.9. 클럽 공지사항 작성

Request

POST /api/v1/clubs/1/notices?_csrf=T_bJ08qjDwrDPeIhHIPru3ydiEYi_g95FABawaVCdcTk4-cWf5f_5fqXbTLuWNQQfq7f2BqppSdAmzdULTZi98BxEKfd0dAk HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: access token
Content-Length: 25
Host: localhost:8080

{
  "notice" : "notice"
}
Path Parameter
Table 10. /api/v1/clubs/{clubId}/notices
Parameter Description

clubId

클럽 아이디

Request Header
Name Description Optional

Authorization

유저 액세스 토큰

false

Response

HTTP/1.1 204 No Content
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

2.10. 클럽 공지사항 조회

Request

GET /api/v1/clubs/1/notices?_csrf=u9hJ8_t4oDfYyiV0Cksj3bYXFtQMQBZjAuRLK3n4ZQoLhR7yjb0oxsoZmFP1rkRGaWYXvIQiO7U1JSJOYIZ-T0nIVDs_5H-U HTTP/1.1
Authorization: access token
Host: localhost:8080
Path Parameter
Table 11. /api/v1/clubs/{clubId}/notices
Parameter Description

clubId

클럽 아이디

Request Header
Name Description Optional

Authorization

유저 액세스 토큰

false

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 114

{
  "notices" : [ {
    "id" : 1,
    "notice" : "notice 1"
  }, {
    "id" : 2,
    "notice" : "notice 2"
  } ]
}
Response Body
Path Type Description

notices

Array

공지 사항 리스트

notices.[].id

Number

공지 사항 항목 ID

notices.[].notice

String

공지 사항 내용

2.11. 클럽 공지사항 수정

Request

PATCH /api/v1/clubs/1/notices/1?_csrf=DQhR9DHdI9i_IK2hMdjX6v_AizgSe7xRPa6qO1hD9M-gsCiLPG5lkQK4RrqSRcjDCPXjiM_5pgAgTY18BZmTXTx6kPaR0ky6 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: access token
Content-Length: 41
Host: localhost:8080

{
  "notice" : "새로운 공지사항"
}
Path Parameter
Table 12. /api/v1/clubs/{clubId}/notices/{noticeId}
Parameter Description

clubId

클럽 아이디

noticeId

공지사항 아이디

Request Header
Name Description Optional

Authorization

유저 액세스 토큰

false

Request Body
필드명 타입 필수 값 Description

notice

String

true

새로운 공지사항

Response

HTTP/1.1 204 No Content
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

2.12. 클럽 공지사항 삭제

Request

DELETE /api/v1/clubs/1/notices/1 HTTP/1.1
Authorization: access token
Content-Type: application/x-www-form-urlencoded
Host: localhost:8080
Content-Length: 102

_csrf=XactjGjBNR1knQEMGabZVy6y40nkSxJ3cAT6gdwBdjd5CqIxb8IVuFz1VHtJ_jM5KYvtb0rXznDVfnZaQjLCsL1kEARKb5FU
Path Parameter
Table 13. /api/v1/clubs/{clubId}/notices/{noticeId}
Parameter Description

clubId

클럽 아이디

noticeId

공지사항 아이디

Request Header
Name Description Optional

Authorization

유저 액세스 토큰

false

Response

HTTP/1.1 204 No Content
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

2.13. 클럽 유저 권한 조회

Request

GET /api/v1/clubs/1/users HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token
Host: localhost:8080
Request Header
Name Description Optional

Authorization

Access Token

false

Path Parameter
Table 14. /api/v1/clubs/{clubId}/users
Parameter Description

clubId

클럽 아이디

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 24

{
  "role" : "MANAGER"
}
Response Body
Path Type Description

role

String

유저 권한

2.14. 클럽 탈퇴

Request

DELETE /api/v1/clubs/1/users HTTP/1.1
Authorization: access token
Content-Type: application/x-www-form-urlencoded
Host: localhost:8080
Content-Length: 102

_csrf=HiwdQRkZ82A1QAlWOrBVt5vm89-O9xAxOPWSLWVn9w34B6tWKkl_In8vwwIYcD43DZ1hhq6C3ue5w3McCpPwFVZXljnKZJww
Request Header
Name Description Optional

Authorization

유저 액세스 토큰

false

Path Parameter
Table 15. /api/v1/clubs/{clubId}/users
Parameter Description

clubId

클럽 아이디

Response

HTTP/1.1 204 No Content
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

3. 클럽 초대 링크

3.1. 클럽 초대 링크 생성

Request

POST /api/v1/clubs/1/invite HTTP/1.1
Authorization: token
Content-Type: application/x-www-form-urlencoded
Host: localhost:8080
Content-Length: 102

_csrf=qcb2hJ3Ir5JxTfR6pM8KI-wrAy1EriMqMdRkeYXmBzYMRgmoy6LB5auqlqdcLpFMleI-EdkbLhUhzxIHVbUFSbeFY1U7cz-e
Path Parameter
Table 16. /api/v1/clubs/{clubId}/invite
Parameter Description

clubId

클럽 ID

Request Header
Name Description Optional

Authorization

유저 액세스 토큰

false

Response

HTTP/1.1 201 Created
Location: /api/v1/clubs/1/invite/650d2d91-a8cf-45e7-8a43-a0c798173ecb
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Response Header
Name Description

Location

클럽 초대 링크

3.2. 클럽 초대 링크 조회

Request

GET /api/v1/clubs/1/invite HTTP/1.1
Authorization: Access Token
Host: localhost:8080
Path Parameter
Table 17. /api/v1/clubs/{clubId}/invite
Parameter Description

clubId

클럽 ID

Request Header
Name Description Optional

Authorization

유저 액세스 토큰

false

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 126

{
  "inviteLink" : "https://space-club.site/api/v1/clubs/invite/7e211fdc-04db-42a1-af0f-4ec01df677c7",
  "isExpired" : false
}
Response Body
Path Type Description

inviteLink

String

유저 초대 링크

isExpired

Boolean

초대 링크 만료 여부

3.3. 초대 링크를 통한 클럽 가입

Request

POST /api/v1/clubs/invites/2dc6292c-a7eb-45d7-a614-d3f3c18e5edb HTTP/1.1
Authorization: token
Content-Type: application/x-www-form-urlencoded
Host: localhost:8080
Content-Length: 102

_csrf=30erydCqwL9VyEM62keypV-E8LR7ic7Uouz8REVlON1T7DkHvnPK_uXJ9Nl4riYKuWqGlT293dYY7Pj5x9zIIXFVXuQwiV0x
Path Parameter
Table 18. /api/v1/clubs/invites/{code}
Parameter Description

code

클럽 초대 링크 식별자

Request Header
Name Description Optional

Authorization

유저 액세스 토큰

false

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 18

{
  "clubId" : 0
}
Response Body
Path Type Description

clubId

Number

클럽 ID

3.4. 초대 링크를 통한 클럽 가입 전 의사 확인

Request

GET /api/v1/clubs/invites/abe218c2-09b5-4ca5-ad76-f39a77fe3446 HTTP/1.1
Host: localhost:8080
Path Parameter
Table 19. /api/v1/clubs/invites/{code}
Parameter Description

code

클럽 초대 링크 식별자

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 143

{
  "clubId" : 1,
  "name" : "클럽1 이름",
  "info" : "클럽 정보",
  "memberCount" : 0,
  "logoImageUrl" : "null클럽 이미지 URL"
}
Response Body
Path Type Description

clubId

Number

클럽 ID

name

String

클럽 이름

info

String

클럽 소개

memberCount

Number

클럽 구성원 수

logoImageUrl

String

클럽 로고 이미지 URL

4. 행사

4.1. 전체 행사 조회

Request

GET /api/v1/events?category=SHOW&page=1&size=3&sort=id%2Casc HTTP/1.1
Host: localhost:8080
Query Parameter
Name Description Optional

category

행사 카테고리 (ex. SHOW, RECRUITMENT, PROMOTION, CLUB)

false

page

페이지

true

size

페이지 내 개수

true

sort

정렬 방법(ex. id,desc)

true

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 1407

{
  "data" : [ {
    "id" : 1,
    "eventInfo" : {
      "title" : "제목",
      "posterImageUrl" : "null포스터 파일명",
      "location" : "위치",
      "startDate" : "2023-09-21",
      "startTime" : "12:30:30",
      "endDate" : "2024-09-21",
      "endTime" : "12:30:30",
      "isEnded" : false
    },
    "clubInfo" : {
      "name" : "클럽1 이름",
      "logoImageUrl" : "null클럽 이미지 URL"
    }
  }, {
    "id" : 2,
    "eventInfo" : {
      "title" : "제목",
      "posterImageUrl" : "null포스터 파일명",
      "location" : "위치",
      "startDate" : "2023-09-21",
      "startTime" : "12:30:30",
      "endDate" : "2024-09-21",
      "endTime" : "12:30:30",
      "isEnded" : false
    },
    "clubInfo" : {
      "name" : "클럽1 이름",
      "logoImageUrl" : "null클럽 이미지 URL"
    }
  }, {
    "id" : 3,
    "eventInfo" : {
      "title" : "제목",
      "posterImageUrl" : "null포스터 파일명",
      "location" : "위치",
      "startDate" : "2023-09-21",
      "startTime" : "12:30:30",
      "endDate" : "2024-09-21",
      "endTime" : "12:30:30",
      "isEnded" : false
    },
    "clubInfo" : {
      "name" : "클럽1 이름",
      "logoImageUrl" : "null클럽 이미지 URL"
    }
  } ],
  "pageData" : {
    "first" : true,
    "last" : true,
    "pageNumber" : 0,
    "size" : 3,
    "totalPages" : 1,
    "totalElements" : 3
  }
}
Response Body
Path Type Description

data

Array

페이지 내 행사 정보

data[].id

Number

행사 id

data[].eventInfo

Object

행사 정보

data[].eventInfo.title

String

행사 제목

data[].eventInfo.posterImageUrl

String

포스터 URL

data[].eventInfo.location

String

행사 위치

data[].eventInfo.startDate

String

행사 시작 날짜

data[].eventInfo.startTime

String

행사 시작 시간

data[].eventInfo.endDate

String

행사 종료 날짜

data[].eventInfo.endTime

String

행사 종료 시간

data[].eventInfo.isEnded

Boolean

행사 종료 여부

data[].clubInfo

Object

클럽 정보

data[].clubInfo.name

String

클럽 명

data[].clubInfo.logoImageUrl

String

클럽 이미지 Url

pageData

Object

페이지 정보

pageData.first

Boolean

첫 페이지 여부

pageData.last

Boolean

마지막 페이지 여부

pageData.pageNumber

Number

현재 페이지 번호

pageData.size

Number

페이지 내 개수

pageData.totalPages

Number

총 페이지 개수

pageData.totalElements

Number

총 행사 개수

4.2. 행사 검색

Request

GET /api/v1/events/searches?keyword=title&page=1&size=3&sort=id%2Cdesc HTTP/1.1
Host: localhost:8080
Query Parameter
Name Description Optional

keyword

검색어

false

page

페이지

true

size

페이지 내 개수

true

sort

정렬 방법(ex. id,desc)

true

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 1407

{
  "data" : [ {
    "id" : 1,
    "eventInfo" : {
      "title" : "제목",
      "posterImageUrl" : "null포스터 파일명",
      "location" : "위치",
      "startDate" : "2023-09-21",
      "startTime" : "12:30:30",
      "endDate" : "2024-09-21",
      "endTime" : "12:30:30",
      "isEnded" : false
    },
    "clubInfo" : {
      "name" : "클럽1 이름",
      "logoImageUrl" : "null클럽 이미지 URL"
    }
  }, {
    "id" : 2,
    "eventInfo" : {
      "title" : "제목",
      "posterImageUrl" : "null포스터 파일명",
      "location" : "위치",
      "startDate" : "2023-09-21",
      "startTime" : "12:30:30",
      "endDate" : "2024-09-21",
      "endTime" : "12:30:30",
      "isEnded" : false
    },
    "clubInfo" : {
      "name" : "클럽1 이름",
      "logoImageUrl" : "null클럽 이미지 URL"
    }
  }, {
    "id" : 3,
    "eventInfo" : {
      "title" : "제목",
      "posterImageUrl" : "null포스터 파일명",
      "location" : "위치",
      "startDate" : "2023-09-21",
      "startTime" : "12:30:30",
      "endDate" : "2024-09-21",
      "endTime" : "12:30:30",
      "isEnded" : false
    },
    "clubInfo" : {
      "name" : "클럽1 이름",
      "logoImageUrl" : "null클럽 이미지 URL"
    }
  } ],
  "pageData" : {
    "first" : true,
    "last" : true,
    "pageNumber" : 0,
    "size" : 3,
    "totalPages" : 1,
    "totalElements" : 3
  }
}
Response Body
Path Type Description

data

Array

페이지 내 행사 정보

data[].id

Number

행사 id

data[].eventInfo

Object

행사 정보

data[].eventInfo.title

String

행사 제목

data[].eventInfo.posterImageUrl

String

포스터 URL

data[].eventInfo.location

String

행사 위치

data[].eventInfo.startDate

String

행사 시작 날짜

data[].eventInfo.startTime

String

행사 시작 시간

data[].eventInfo.endDate

String

행사 종료 날짜

data[].eventInfo.endTime

String

행사 종료 시간

data[].eventInfo.isEnded

Boolean

행사 종료 여부

data[].clubInfo

Object

클럽 정보

data[].clubInfo.name

String

클럽 명

data[].clubInfo.logoImageUrl

String

클럽 이미지 Url

pageData

Object

페이지 정보

pageData.first

Boolean

첫 페이지 여부

pageData.last

Boolean

마지막 페이지 여부

pageData.pageNumber

Number

현재 페이지 번호

pageData.size

Number

페이지 내 개수

pageData.totalPages

Number

총 페이지 개수

pageData.totalElements

Number

총 행사 개수

4.3. 행사 개설 (공연)

Request

POST /api/v1/events HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: Access Token
Host: localhost:8080

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

<<jpeg data>>
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=request
Content-Type: application/json

{"clubId":1,"eventInfo":{"title":"행사 제목","content":"행사 내용","startDate":"2023-11-15","startTime":"14:00:00","location":"행사 장소","capacity":100},"formInfo":{"openDate":"2023-11-01","openTime":"09:00:00","closeDate":"2023-11-10","closeTime":"18:00:00"},"ticketInfo":{"cost":20000,"maxTicketCount":2},"bankInfo":{"name":"은행 명","accountNumber":"은행 계좌번호"}}
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=category
Content-Type: text/plain

SHOW
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
Request Header
Name Description Optional

Authorization

유저 액세스 토큰

false

Multipart Form Data
Part Description Optional

posterImage

포스터 사진

false

request

행사 생성 관련 정보

false

category

행사 카테고리

false

Request Form Data
Path Type Description

clubId

Number

클럽 id

eventInfo.title

String

행사 정보

eventInfo.content

String

행사 내용

eventInfo.startDate

String

행사 날짜

eventInfo.startTime

String

행사 시간

eventInfo.location

String

행사 장소

eventInfo.capacity

Number

행사 정원

ticketInfo.cost

Number

행사 비용

ticketInfo.maxTicketCount

Number

인당 예매 가능 수

bankInfo.name

String

은행 명

bankInfo.accountNumber

String

은행 계좌 번호

formInfo.openDate

String

폼 오픈 날짜

formInfo.openTime

String

폼 오픈 시간

formInfo.closeDate

String

폼 마감 날짜

formInfo.closeTime

String

폼 마감 시간

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 19

{
  "eventId" : 1
}
Response Body
Path Type Description

eventId

Number

생성된 행사 id

4.4. 행사 개설 (홍보)

Request

POST /api/v1/events HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: Access Token
Host: localhost:8080

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

<<jpeg data>>
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=request
Content-Type: application/json

{"clubId":1,"eventInfo":{"title":"행사 제목","content":"행사 내용","startDate":"2023-11-15","startTime":"14:00:00","location":"행사 장소","capacity":100},"formInfo":{"openDate":"2023-11-01","openTime":"09:00:00","closeDate":"2023-11-10","closeTime":"18:00:00"}}
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=category
Content-Type: text/plain

PROMOTION
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
Request Header
Name Description Optional

Authorization

유저 액세스 토큰

false

Multipart Form Data
Part Description Optional

posterImage

포스터 사진

false

request

행사 생성 관련 정보

false

category

행사 카테고리

false

Request Form Data
Path Type Description

clubId

Number

클럽 id

eventInfo.title

String

행사 정보

eventInfo.content

String

행사 내용

eventInfo.startDate

String

행사 날짜

eventInfo.startTime

String

행사 시간

eventInfo.location

String

행사 장소

eventInfo.capacity

Number

행사 정원

formInfo.openDate

String

폼 오픈 날짜

formInfo.openTime

String

폼 오픈 시간

formInfo.closeDate

String

폼 마감 날짜

formInfo.closeTime

String

폼 마감 시간

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 19

{
  "eventId" : 1
}
Response Body
Path Type Description

eventId

Number

생성된 행사 id

4.5. 행사 개설 (모집 공고)

Request

POST /api/v1/events HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: Access Token
Host: localhost:8080

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

<<jpeg data>>
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=request
Content-Type: application/json

{"clubId":1,"eventInfo":{"title":"행사 제목","content":"행사 내용","recruitmentTarget":"모집 대상","activityArea":"활동 지역","recruitmentLimit":100},"formInfo":{"openDate":"2023-11-01","openTime":"09:00:00","closeDate":"2023-11-10","closeTime":"18:00:00"}}
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=category
Content-Type: text/plain

RECRUITMENT
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
Request Header
Name Description Optional

Authorization

유저 액세스 토큰

false

Multipart Form Data
Part Description Optional

posterImage

포스터 사진

false

request

행사 생성 관련 정보

false

category

행사 카테고리

false

Request Form Data
Path Type Description

clubId

Number

클럽 id

eventInfo.title

String

행사 정보

eventInfo.content

String

행사 내용

eventInfo.activityArea

String

활동 지역

eventInfo.recruitmentTarget

String

모집 대상

eventInfo.recruitmentLimit

Number

모집 인원

formInfo.openDate

String

폼 오픈 날짜

formInfo.openTime

String

폼 오픈 시간

formInfo.closeDate

String

폼 마감 날짜

formInfo.closeTime

String

폼 마감 시간

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 19

{
  "eventId" : 1
}
Response Body
Path Type Description

eventId

Number

생성된 행사 id

4.6. 행사 개설 (클럽 일정)

Request

POST /api/v1/events HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: Access Token
Host: localhost:8080

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

<<jpeg data>>
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=request
Content-Type: application/json

{"clubId":1,"eventInfo":{"title":"행사 제목","content":"행사 내용","startDate":"2023-11-15","startTime":"14:00:00","endDate":"2023-11-16","endTime":"18:00:00","dues":5000,"location":"행사 장소","capacity":100},"formInfo":{"openDate":"2023-11-01","openTime":"09:00:00","closeDate":"2023-11-10","closeTime":"18:00:00"}}
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=category
Content-Type: text/plain

CLUB
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
Request Header
Name Description Optional

Authorization

유저 액세스 토큰

false

Multipart Form Data
Part Description Optional

posterImage

포스터 사진

true

request

행사 생성 관련 정보

false

category

행사 카테고리

false

Request Form Data
Path Type Description

clubId

Number

클럽 id

eventInfo.title

String

행사 정보

eventInfo.content

String

행사 내용

eventInfo.startDate

String

행사 시작 날짜

eventInfo.startTime

String

행사 시작 시간

eventInfo.endDate

String

행사 종료 날짜

eventInfo.endTime

String

행사 종료 시간

eventInfo.location

String

행사 장소

eventInfo.capacity

Number

행사 정원

eventInfo.dues

Number

행사 회비

formInfo.openDate

String

폼 오픈 날짜

formInfo.openTime

String

폼 오픈 시간

formInfo.closeDate

String

폼 마감 날짜

formInfo.closeTime

String

폼 마감 시간

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 19

{
  "eventId" : 1
}
Response Body
Path Type Description

eventId

Number

생성된 행사 id

4.7. 행사 수정 (공연)

Request

PATCH /api/v1/events HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: Access Token
Host: localhost:8080
Request Header
Name Description Optional

Authorization

유저 액세스 토큰

false

Multipart Form Data
Part Description Optional

posterImage

포스터 사진

true

request

행사 생성 관련 정보

false

category

행사 카테고리

false

Request Form Data
Path Type Description

eventId

Number

행사 id

eventInfo.title

String

행사 정보

eventInfo.content

String

행사 내용

eventInfo.startDate

String

행사 날짜

eventInfo.startTime

String

행사 시간

eventInfo.location

String

행사 장소

eventInfo.capacity

Number

행사 정원

ticketInfo.cost

Number

행사 비용

ticketInfo.maxTicketCount

Number

인당 예매 가능 수

bankInfo.name

String

은행 명

bankInfo.accountNumber

String

은행 계좌 번호

formInfo.openDate

String

폼 오픈 날짜

formInfo.openTime

String

폼 오픈 시간

formInfo.closeDate

String

폼 마감 날짜

formInfo.closeTime

String

폼 마감 시간

Response

HTTP/1.1 204 No Content
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

4.8. 행사 수정 (홍보)

Request

PATCH /api/v1/events HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: Access Token
Host: localhost:8080
Request Header
Name Description Optional

Authorization

유저 액세스 토큰

false

Multipart Form Data
Part Description Optional

posterImage

포스터 사진

true

request

행사 생성 관련 정보

false

category

행사 카테고리

false

Request Form Data
Path Type Description

eventId

Number

행사 id

eventInfo.title

String

행사 정보

eventInfo.content

String

행사 내용

eventInfo.startDate

String

행사 날짜

eventInfo.startTime

String

행사 시간

eventInfo.location

String

행사 장소

eventInfo.capacity

Number

행사 정원

formInfo.openDate

String

폼 오픈 날짜

formInfo.openTime

String

폼 오픈 시간

formInfo.closeDate

String

폼 마감 날짜

formInfo.closeTime

String

폼 마감 시간

Response

HTTP/1.1 204 No Content
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

4.9. 행사 수정 (모집 공고)

Request

PATCH /api/v1/events HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: Access Token
Host: localhost:8080
Request Header
Name Description Optional

Authorization

유저 액세스 토큰

false

Multipart Form Data
Part Description Optional

posterImage

포스터 사진

true

request

행사 생성 관련 정보

false

category

행사 카테고리

false

Request Form Data
Path Type Description

eventId

Number

행사 id

eventInfo.title

String

행사 정보

eventInfo.content

String

행사 내용

eventInfo.activityArea

String

활동 지역

eventInfo.recruitmentTarget

String

모집 대상

eventInfo.recruitmentLimit

Number

모집 인원

formInfo.openDate

String

폼 오픈 날짜

formInfo.openTime

String

폼 오픈 시간

formInfo.closeDate

String

폼 마감 날짜

formInfo.closeTime

String

폼 마감 시간

Response

HTTP/1.1 204 No Content
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

4.10. 행사 수정 (클럽 일정)

Request

PATCH /api/v1/events HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: Access Token
Host: localhost:8080
Request Header
Name Description Optional

Authorization

유저 액세스 토큰

false

Multipart Form Data
Part Description Optional

posterImage

포스터 사진

true

request

행사 생성 관련 정보

false

category

행사 카테고리

false

Request Form Data
Path Type Description

eventId

Number

행사 id

eventInfo.title

String

행사 정보

eventInfo.content

String

행사 내용

eventInfo.startDate

String

행사 시작 날짜

eventInfo.startTime

String

행사 시작 시간

eventInfo.endDate

String

행사 종료 날짜

eventInfo.endTime

String

행사 종료 시간

eventInfo.location

String

행사 장소

eventInfo.capacity

Number

행사 정원

eventInfo.dues

Number

행사 회비

formInfo.openDate

String

폼 오픈 날짜

formInfo.openTime

String

폼 오픈 시간

formInfo.closeDate

String

폼 마감 날짜

formInfo.closeTime

String

폼 마감 시간

Response

HTTP/1.1 204 No Content
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

4.11. 행사 상세 조회 (공연)

Request

GET /api/v1/events/1 HTTP/1.1
Host: localhost:8080
Path Parameter
Table 20. /api/v1/events/{eventId}
Parameter Description

eventId

행사 ID

Request Header
Name Description Optional

Authorization

유저 액세스 토큰

true

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 774

{
  "id" : 2,
  "category" : "SHOW",
  "hasForm" : false,
  "hasAlreadyApplied" : false,
  "eventInfo" : {
    "title" : "제목",
    "content" : "내용",
    "startDate" : "2023-09-21",
    "startTime" : "12:30:30",
    "isEnded" : false,
    "location" : "위치",
    "applicants" : 0,
    "capacity" : 100,
    "posterImageUrl" : "null포스터 파일명"
  },
  "formInfo" : {
    "openDate" : "2023-10-24",
    "openTime" : "23:41:30",
    "closeDate" : "2023-10-24",
    "closeTime" : "23:41:30",
    "isAbleToApply" : false
  },
  "ticketInfo" : {
    "cost" : 3000,
    "maxTicketCount" : 4
  },
  "bankInfo" : {
    "bankName" : "은행명",
    "bankAccountNumber" : "계좌번호"
  },
  "clubInfo" : {
    "clubId" : 1,
    "clubName" : "클럽1 이름"
  }
}
Response Body
Path Type Description

id

Number

행사 ID

category

String

이벤트 종류

hasForm

Boolean

폼 존재 여부

hasAlreadyApplied

Boolean

폼 신청 여부

eventInfo

Object

행사 정보

eventInfo.title

String

행사 제목

eventInfo.content

String

행사 내용

eventInfo.startDate

String

행사 시작 날짜

eventInfo.startTime

String

행사 시작 시각

eventInfo.isEnded

Boolean

행사 종료 여부

eventInfo.location

String

행사 위치

eventInfo.applicants

Number

신청 인원

eventInfo.capacity

Number

신청 정원

eventInfo.posterImageUrl

String

행사 포스터 URL

ticketInfo

Object

티켓 정보

ticketInfo.cost

Number

참가 비용

ticketInfo.maxTicketCount

Number

인당 최대 예매 가능 수

formInfo

Object

폼 정보

formInfo.openDate

String

행사 참여 신청 시작 날짜

formInfo.openTime

String

행사 참여 신청 시작 시간

formInfo.closeDate

String

행사 참여 신청 종료 날짜

formInfo.closeTime

String

행사 참여 신청 종료 시간

formInfo.isAbleToApply

Boolean

참여 신청 가능 여부

bankInfo

Object

은행 정보

bankInfo.bankName

String

은행 명

bankInfo.bankAccountNumber

String

계좌 번호

clubInfo.clubId

Number

클럽 ID

clubInfo.clubName

String

클럽 이름

4.12. 행사 상세 조회 (홍보)

Request

GET /api/v1/events/1 HTTP/1.1
Host: localhost:8080
Path Parameter
Table 21. /api/v1/events/{eventId}
Parameter Description

eventId

행사 ID

Request Header
Name Description Optional

Authorization

유저 액세스 토큰

true

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 618

{
  "id" : 4,
  "category" : "PROMOTION",
  "hasForm" : false,
  "hasAlreadyApplied" : false,
  "eventInfo" : {
    "title" : "제목",
    "content" : "내용",
    "startDate" : "2023-09-21",
    "startTime" : "12:30:30",
    "isEnded" : false,
    "location" : "위치",
    "applicants" : 0,
    "capacity" : 100,
    "posterImageUrl" : "null포스터 파일명"
  },
  "formInfo" : {
    "openDate" : "2023-10-24",
    "openTime" : "23:41:30",
    "closeDate" : "2023-10-24",
    "closeTime" : "23:41:30",
    "isAbleToApply" : false
  },
  "clubInfo" : {
    "clubId" : 1,
    "clubName" : "클럽1 이름"
  }
}
Response Body
Path Type Description

id

Number

행사 ID

category

String

이벤트 종류

hasForm

Boolean

폼 존재 여부

hasAlreadyApplied

Boolean

폼 신청 여부

eventInfo

Object

행사 정보

eventInfo.title

String

행사 제목

eventInfo.content

String

행사 내용

eventInfo.startDate

String

행사 시작 날짜

eventInfo.startTime

String

행사 시작 시각

eventInfo.isEnded

Boolean

행사 종료 여부

eventInfo.location

String

행사 위치

eventInfo.applicants

Number

신청 인원

eventInfo.capacity

Number

신청 정원

eventInfo.posterImageUrl

String

행사 포스터 URL

formInfo

Object

폼 정보

formInfo.openDate

String

행사 참여 신청 시작 날짜

formInfo.openTime

String

행사 참여 신청 시작 시간

formInfo.closeDate

String

행사 참여 신청 종료 날짜

formInfo.closeTime

String

행사 참여 신청 종료 시간

formInfo.isAbleToApply

Boolean

참여 신청 가능 여부

clubInfo.clubId

Number

클럽 ID

clubInfo.clubName

String

클럽 이름

4.13. 행사 상세 조회 (모집 공고)

Request

GET /api/v1/events/1 HTTP/1.1
Host: localhost:8080
Path Parameter
Table 22. /api/v1/events/{eventId}
Parameter Description

eventId

행사 ID

Request Header
Name Description Optional

Authorization

유저 액세스 토큰

true

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 717

{
  "id" : 5,
  "category" : "RECRUITMENT",
  "hasForm" : false,
  "hasAlreadyApplied" : false,
  "eventInfo" : {
    "title" : "제목",
    "content" : "내용",
    "startDate" : "2023-09-21",
    "startTime" : "12:30:30",
    "isEnded" : false,
    "applicants" : 0,
    "posterImageUrl" : "null포스터 파일명",
    "recruitmentTarget" : "연어를 좋아하는 사람 누구나",
    "recruitmentLimit" : 200,
    "activityArea" : "홍대입구역 근처"
  },
  "formInfo" : {
    "openDate" : "2023-10-24",
    "openTime" : "23:41:30",
    "closeDate" : "2023-10-24",
    "closeTime" : "23:41:30",
    "isAbleToApply" : false
  },
  "clubInfo" : {
    "clubId" : 1,
    "clubName" : "클럽1 이름"
  }
}
Response Body
Path Type Description

id

Number

행사 ID

category

String

이벤트 종류

hasForm

Boolean

폼 존재 여부

hasAlreadyApplied

Boolean

폼 신청 여부

eventInfo

Object

행사 정보

eventInfo.title

String

행사 제목

eventInfo.content

String

행사 내용

eventInfo.startDate

String

행사 시작 날짜

eventInfo.startTime

String

행사 시작 시각

eventInfo.isEnded

Boolean

행사 종료 여부

eventInfo.applicants

Number

신청 인원

eventInfo.posterImageUrl

String

행사 포스터 URL

eventInfo.activityArea

String

활동 영역

eventInfo.recruitmentTarget

String

모집 대상

eventInfo.recruitmentLimit

Number

모집 인원

formInfo

Object

폼 정보

formInfo.openDate

String

행사 참여 신청 시작 날짜

formInfo.openTime

String

행사 참여 신청 시작 시간

formInfo.closeDate

String

행사 참여 신청 종료 날짜

formInfo.closeTime

String

행사 참여 신청 종료 시간

formInfo.isAbleToApply

Boolean

참여 신청 가능 여부

clubInfo.clubId

Number

클럽 ID

clubInfo.clubName

String

클럽 이름

4.14. 행사 상세 조회 (클럽 일정)

Request

GET /api/v1/events/1 HTTP/1.1
Authorization: Access Token
Host: localhost:8080
Path Parameter
Table 23. /api/v1/events/{eventId}
Parameter Description

eventId

행사 ID

Request Header
Name Description Optional

Authorization

유저 액세스 토큰

false

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 690

{
  "id" : 3,
  "category" : "CLUB",
  "hasForm" : false,
  "hasAlreadyApplied" : false,
  "eventInfo" : {
    "title" : "제목",
    "content" : "내용",
    "startDate" : "2023-09-21",
    "startTime" : "12:30:30",
    "endDate" : "2024-09-21",
    "endTime" : "12:30:30",
    "isEnded" : false,
    "dues" : 5000,
    "location" : "위치",
    "applicants" : 0,
    "capacity" : 100,
    "posterImageUrl" : "null포스터 파일명"
  },
  "formInfo" : {
    "openDate" : "2023-10-24",
    "openTime" : "23:41:30",
    "closeDate" : "2023-10-24",
    "closeTime" : "23:41:30",
    "isAbleToApply" : false
  },
  "clubInfo" : {
    "clubId" : 1,
    "clubName" : "클럽1 이름"
  }
}
Response Body
Path Type Description

id

Number

행사 ID

category

String

이벤트 종류

hasForm

Boolean

폼 존재 여부

hasAlreadyApplied

Boolean

폼 신청 여부

eventInfo

Object

행사 정보

eventInfo.title

String

행사 제목

eventInfo.content

String

행사 제목

eventInfo.startDate

String

행사 시작 날짜

eventInfo.startTime

String

행사 시작 시각

eventInfo.endDate

String

행사 종료 날짜

eventInfo.endTime

String

행사 종료 시각

eventInfo.isEnded

Boolean

행사 종료 여부

eventInfo.dues

Number

행사 참가 회비

eventInfo.location

String

행사 위치

eventInfo.applicants

Number

신청 인원

eventInfo.capacity

Number

모집 정원

eventInfo.posterImageUrl

String

행사 포스터 URL

formInfo

Object

폼 정보

formInfo.openDate

String

행사 참여 신청 시작 날짜

formInfo.openTime

String

행사 참여 신청 시작 시간

formInfo.closeDate

String

행사 참여 신청 종료 날짜

formInfo.closeTime

String

행사 참여 신청 종료 시간

formInfo.isAbleToApply

Boolean

참여 신청 가능 여부

clubInfo.clubId

Number

클럽 ID

clubInfo.clubName

String

클럽 이름

4.15. 행사 삭제

Request

DELETE /api/v1/events/1 HTTP/1.1
Authorization: Access Token
Content-Type: application/x-www-form-urlencoded
Host: localhost:8080
Content-Length: 102

_csrf=lCudBBXNQxb7gHBXnaeNPaiZsWiBVHRTj-ao2sq9QA_Qk4w9rBz_YSz1eiDWs0du-Yq5BZ-qnFG4Z0F-6dPKvqmOIzmyobpf
Path Parameter
Table 24. /api/v1/events/{eventId}
Parameter Description

eventId

행사 ID

Request Header
Name Description Optional

Authorization

액세스 토큰

false

Response

HTTP/1.1 204 No Content
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

4.16. 행사 배너

Request

GET /api/v1/events/banner?_csrf=F2wb9x3EkXHAFpdDiChGoTs00R6Sdqi3YwN6MR_NiJP3dHs9L1p-w3-nqRLtc6NwvAVyll1R_H-kR5GaWmdCBS70uqTFRB1b HTTP/1.1
Host: localhost:8080

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 773

[ {
  "clubInfo" : {
    "coverImageUrl" : "null클럽 커버 이미지 URL",
    "name" : "클럽1 이름"
  },
  "eventInfo" : {
    "eventId" : 1,
    "title" : "제목",
    "formCloseDateTime" : "2023-10-24T23:41:30",
    "eventCategory" : "SHOW"
  }
}, {
  "clubInfo" : {
    "coverImageUrl" : "null클럽 커버 이미지 URL",
    "name" : "클럽1 이름"
  },
  "eventInfo" : {
    "eventId" : 2,
    "title" : "제목",
    "formCloseDateTime" : "2023-10-24T23:41:30",
    "eventCategory" : "SHOW"
  }
}, {
  "clubInfo" : {
    "coverImageUrl" : "null클럽 커버 이미지 URL",
    "name" : "클럽1 이름"
  },
  "eventInfo" : {
    "eventId" : 3,
    "title" : "제목",
    "formCloseDateTime" : "2023-10-24T23:41:30",
    "eventCategory" : "CLUB"
  }
} ]

Response Body

Path Type Description

[]

Array

클럽 및 이벤트 정보 목록

[].clubInfo

Object

클럽 정보

[].clubInfo.coverImageUrl

String

클럽 이미지 url

[].clubInfo.name

String

클럽 이름

[].eventInfo

Object

이벤트 정보

[].eventInfo.eventId

Number

행사 id

[].eventInfo.title

String

행사 제목

[].eventInfo.formCloseDateTime

String

폼 마감 시간

[].eventInfo.eventCategory

String

행사 카테고리

4.17. 행사 신청

Request

POST /api/v1/events/participate?_csrf=8hVc47qhXvUEkxlqtqRlnHO03aOX4psvV7-5CLPJNwwx_y4oyiY51IKUPMMp9yBd0IlRrUCD8MKihv4CYNmPOtWsU2pVnBsf HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token
Content-Length: 167
Host: localhost:8080

{
  "eventId" : 1,
  "ticketCount" : 5,
  "forms" : [ {
    "optionId" : 1,
    "content" : "박씨"
  }, {
    "optionId" : 2,
    "content" : "010-1111-2222"
  } ]
}
Request Header
Name Description Optional

Authorization

액세스 토큰

false

Request Body
필드명 타입 필수 값 Description

eventId

Number

true

행사 id

ticketCount

Number

true

행사 예매 매수

forms[]

Array

true

폼 리스트

forms[].optionId

Number

true

폼 항목 id

forms[].content

String

true

폼 항목 답변 내용

Response

HTTP/1.1 204 No Content
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

4.18. 행사 신청 취소

Request

DELETE /api/v1/events/1/participate HTTP/1.1
Authorization: Access Token
Content-Type: application/x-www-form-urlencoded
Host: localhost:8080
Content-Length: 102

_csrf=irfs-OZzvEWo6Z7IJgTNvnodplyLtVpVa6Jhss2l6Oc_d-CAuoKNntBHjSeF2f2tRCn5jEx-iz2-jTt4W5ADh_qc3t5cFdmy
Request Header
Name Description Optional

Authorization

액세스 토큰

false

Path Parameter
Table 25. /api/v1/events/{eventId}/participate
Parameter Description

eventId

행사 id

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 40

{
  "participationStatus" : "CANCELED"
}
Response Body
Path Type Description

participationStatus

String

행사 신청 상태(ex. CANCELED, CANCEL_REQUESTED)

5. 행사 폼

5.1. 행사 폼 양식 설정

Request

POST /api/v1/events/forms?_csrf=8zrDhvd8YMWS1urFcsw7mPlTu40MlxQ2akWYvsJElh4g6x0cxg_6sMVPBvy_sI_3QOEPq8k1luxtryYbUnGsjvpzpHsV3H94 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token
Content-Length: 278
Host: localhost:8080

{
  "eventId" : 1,
  "description" : "행사에 대한 폼 양식입니다.",
  "managed" : true,
  "options" : [ {
    "title" : "이름",
    "type" : "TEXT"
  }, {
    "title" : "연락처",
    "type" : "NUMBER"
  }, {
    "title" : "인원 수",
    "type" : "TEXT"
  } ]
}
Request Header
Name Description Optional

Authorization

액세스 토큰

false

Request Body
필드명 타입 필수 값 Description

eventId

Number

true

행사 id

description

String

true

폼 설명

managed

Boolean

true

관리 모드 여부

options[]

Array

true

options[].title

String

true

폼 항목명

options[].type

String

true

폼 항목 타입(TEXT, SELECT, RADIO, NUMBER)

Response

HTTP/1.1 201 Created
Location: /api/v1/events/1
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Response Body
Name Description

Location

생성된 폼의 행사 조회 URI

5.2. 행사 폼 양식 조회

Request

GET /api/v1/events/1/forms HTTP/1.1
Authorization: Access Token
Host: localhost:8080
Request Header
Name Description Optional

Authorization

액세스 토큰

false

Path Parameter
Table 26. /api/v1/events/{eventId}/forms
Parameter Description

eventId

행사 id

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 271

{
  "event" : {
    "title" : "행사 제목"
  },
  "form" : {
    "description" : "폼 정보",
    "options" : [ {
      "id" : 1,
      "title" : "이름",
      "type" : "TEXT"
    }, {
      "id" : 2,
      "title" : "연락처",
      "type" : "TEXT"
    } ]
  }
}
Response Body
Path Type Description

event

Object

행사 정보

event.title

String

행사 제목

form

Object

폼 정보

form.description

String

폼 설명

form.options[]

Array

폼 항목 리스트

form.options[].id

Number

폼 항목 id

form.options[].title

String

폼 항목명

form.options[].type

String

폼 항목 타입(TEXT, SELECT, RADIO, NUMBER)

5.3. 행사의 신청된 폼 조회하기

Request

GET /api/v1/events/1/forms/submit?page=1&size=3&sort=id%2Cdesc HTTP/1.1
Authorization: Access Token
Host: localhost:8080
Request Header
Name Description Optional

Authorization

액세스 토큰

false

Path Parameter
Table 27. /api/v1/events/{eventId}/forms/submit
Parameter Description

eventId

행사 id

Query Parameter
Name Description Optional

page

페이지

true

size

페이지 내 개수

true

sort

정렬 방법(ex. id,desc)

true

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 579

{
  "formInfo" : {
    "count" : 1,
    "optionTitles" : [ "이름", "연락처" ],
    "managed" : true
  },
  "userForms" : [ {
    "userId" : 1,
    "options" : [ {
      "title" : "이름",
      "content" : "박가네"
    }, {
      "title" : "연락처",
      "content" : "010-1111-2222"
    } ],
    "participation" : {
      "status" : "PENDING",
      "dateTime" : "2024-05-21 07:46:44"
    },
    "ticketCount" : 5
  } ],
  "pageData" : {
    "first" : true,
    "last" : true,
    "pageNumber" : 0,
    "size" : 1,
    "totalPages" : 1,
    "totalElements" : 1
  }
}
Response Body
Path Type Description

formInfo

Object

폼 정보

formInfo.count

Number

폼 개수

formInfo.optionTitles[]

Array

폼 옵션명 리스트

formInfo.managed

Boolean

관리 모드 여부

userForms[]

Array

유저 폼 리스트

userForms[].userId

Number

폼의 유저 id

userForms[].options[]

Array

폼 옵션 리스트

userForms[].options[].title

String

폼 옵션명

userForms[].options[].content

String

폼 옵션 내용

userForms[].participation

Object

신청 정보

userForms[].participation.status

String

신청 상태

userForms[].participation.dateTime

String

신청 날짜 및 시각

userForms[].ticketCount

Number

신청한 티켓 수

pageData

Object

페이지 정보

pageData.first

Boolean

첫 페이지 여부

pageData.last

Boolean

마지막 페이지 여부

pageData.pageNumber

Number

현재 페이지 번호

pageData.size

Number

페이지 내 개수

pageData.totalPages

Number

총 페이지 개수

pageData.totalElements

Number

총 행사 개수

5.4. 행사의 신청 상태 변경

Request

PATCH /api/v1/events/1/forms/submit?_csrf=6ojj3murA67zCe93_7-pMeTi8FbrYghP99EefSe_qf2S6lSj3brSuFnPNp7ePttCnpKdCdDQ3TeJBm1ilbctHxDcnZnz2mWa HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token
Content-Length: 61
Host: localhost:8080

{
  "formUserId" : 1,
  "participationStatus" : "CONFIRMED"
}
Request Header
Name Description Optional

Authorization

유저의 액세스 토큰

false

Path Parameter
Table 28. /api/v1/events/{eventId}/forms/submit
Parameter Description

eventId

행사 id

Request Body
필드명 타입 필수 값 Description

formUserId

Number

true

행사를 신청한 유저 id

participationStatus

String

true

행사 신청 상태

Response

HTTP/1.1 204 No Content
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

6. 게시판

6.1. 게시글 페이징 조회

Request

GET /api/v1/boards/posts/1?page=0&size=10&sort=id%2Casc HTTP/1.1
Authorization: access token
Host: localhost:8080
Request header
Name Description Optional

Authorization

액세스 토큰

false

Path Parameters
Table 29. /api/v1/boards/posts/{clubId}
Parameter Description

clubId

클럽 아이디

Query Parameters
Name Description Optional

page

페이지

true

size

페이지 내 개수, default 10

true

sort

정렬 방법(ex. id,desc), default id,desc

true

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 1066

{
  "data" : [ {
    "postId" : 1,
    "title" : "title1",
    "content" : "content1",
    "authorId" : 1,
    "author" : "authorName",
    "authorImageUrl" : "authorImageUrl",
    "postImageUrl" : "spaceclub.site/postImageUrl1",
    "createdDate" : "2024-01-01T00:00:00",
    "lastModifiedDate" : "2024-01-01T00:00:00"
  }, {
    "postId" : 2,
    "title" : "title2",
    "content" : "content2",
    "authorId" : 1,
    "author" : "authorName",
    "authorImageUrl" : "authorImageUrl",
    "postImageUrl" : null,
    "createdDate" : "2024-01-01T00:00:00",
    "lastModifiedDate" : "2024-01-01T00:00:00"
  }, {
    "postId" : 3,
    "title" : "title3",
    "content" : "content3",
    "authorId" : 2,
    "author" : "authorName",
    "authorImageUrl" : "authorImageUrl",
    "postImageUrl" : "spaceclub.site/postImageUrl3",
    "createdDate" : "2024-01-01T00:00:00",
    "lastModifiedDate" : "2024-01-01T00:00:00"
  } ],
  "pageData" : {
    "first" : true,
    "last" : true,
    "pageNumber" : 0,
    "size" : 3,
    "totalPages" : 1,
    "totalElements" : 3
  }
}
Response Body
{
  "data" : [ {
    "postId" : 1,
    "title" : "title1",
    "content" : "content1",
    "authorId" : 1,
    "author" : "authorName",
    "authorImageUrl" : "authorImageUrl",
    "postImageUrl" : "spaceclub.site/postImageUrl1",
    "createdDate" : "2024-01-01T00:00:00",
    "lastModifiedDate" : "2024-01-01T00:00:00"
  }, {
    "postId" : 2,
    "title" : "title2",
    "content" : "content2",
    "authorId" : 1,
    "author" : "authorName",
    "authorImageUrl" : "authorImageUrl",
    "postImageUrl" : null,
    "createdDate" : "2024-01-01T00:00:00",
    "lastModifiedDate" : "2024-01-01T00:00:00"
  }, {
    "postId" : 3,
    "title" : "title3",
    "content" : "content3",
    "authorId" : 2,
    "author" : "authorName",
    "authorImageUrl" : "authorImageUrl",
    "postImageUrl" : "spaceclub.site/postImageUrl3",
    "createdDate" : "2024-01-01T00:00:00",
    "lastModifiedDate" : "2024-01-01T00:00:00"
  } ],
  "pageData" : {
    "first" : true,
    "last" : true,
    "pageNumber" : 0,
    "size" : 3,
    "totalPages" : 1,
    "totalElements" : 3
  }
}
Path Type Description

data

Array

페이지 내 게시글 정보

data[].postId

Number

게시글 아이디

data[].title

String

게시글 제목

data[].content

String

게시글 내용

data[].authorId

Number

게시글 작성자 아이디

data[].author

String

게시글 작성자 이름

data[].authorImageUrl

String

게시글 작성자 프로필 이미지 URL

data[].postImageUrl

String

게시글 이미지 URL

data[].createdDate

String

게시글 작성일

data[].lastModifiedDate

String

게시글 마지막 수정일

pageData

Object

페이지 정보

pageData.first

Boolean

첫 페이지 여부

pageData.last

Boolean

마지막 페이지 여부

pageData.pageNumber

Number

현재 페이지 번호

pageData.size

Number

페이지 내 개수

pageData.totalPages

Number

총 페이지 개수

pageData.totalElements

Number

총 이벤트 개수

6.2. 게시글 단건 조회

Request

GET /api/v1/boards/posts/1/1 HTTP/1.1
Authorization: access token
Host: localhost:8080
Request header
Name Description Optional

Authorization

액세스 토큰

false

Path Parameters
Table 30. /api/v1/boards/posts/{clubId}/{postId}
Parameter Description

clubId

클럽 아이디

postId

게시글 아이디

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 288

{
  "postId" : 1,
  "title" : "title1",
  "content" : "content1",
  "authorId" : 1,
  "author" : "authorName",
  "authorImageUrl" : "authorImageUrl",
  "postImageUrl" : "spaceclub.site/postImageUrl1",
  "createdDate" : "2024-01-01T00:00:00",
  "lastModifiedDate" : "2024-01-01T00:00:00"
}
Response Body
{
  "postId" : 1,
  "title" : "title1",
  "content" : "content1",
  "authorId" : 1,
  "author" : "authorName",
  "authorImageUrl" : "authorImageUrl",
  "postImageUrl" : "spaceclub.site/postImageUrl1",
  "createdDate" : "2024-01-01T00:00:00",
  "lastModifiedDate" : "2024-01-01T00:00:00"
}
Path Type Description

postId

Number

게시글 아이디

title

String

게시글 제목

content

String

게시글 내용

authorId

Number

게시글 작성자 아이디

author

String

게시글 작성자 이름

authorImageUrl

String

게시글 작성자 프로필 이미지 URL

postImageUrl

String

게시글 이미지 URL

createdDate

String

게시글 작성일

lastModifiedDate

String

게시글 마지막 수정일

6.3. 게시글 등록 (파일 첨부)

Request

POST /api/v1/boards/posts/1 HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Accept: application/json
Authorization: access token
Host: localhost:8080

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

content
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=postRequest
Content-Type: application/json

{"title":"title1","content":"content1"}
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
Request header
Name Description Optional

Authorization

액세스 토큰

false

Path Parameters
Table 31. /api/v1/boards/posts/{clubId}
Parameter Description

clubId

클럽 아이디

Request Part
Part Description Optional

postRequest

게시글 제목 및 내용

false

image

첨부 이미지

true

Request Part (postRequest)
Path Type Description

title

String

게시글 제목

content

String

게시글 내용

Response

HTTP/1.1 201 Created
Location: /api/v1/boards/posts/1/1
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

6.4. 게시글 등록 (파일 미첨부)

Request

POST /api/v1/boards/posts/1 HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Accept: application/json
Authorization: access token
Host: localhost:8080

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=postRequest
Content-Type: application/json

{"title":"title1","content":"content1"}
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
Request header
Name Description Optional

Authorization

액세스 토큰

false

Path Parameters
Table 32. /api/v1/boards/posts/{clubId}
Parameter Description

clubId

클럽 아이디

Request Part
Part Description Optional

postRequest

게시글 제목 및 내용

false

Request Part (postRequest)
Path Type Description

title

String

게시글 제목

content

String

게시글 내용

Response

HTTP/1.1 201 Created
Location: /api/v1/boards/posts/1/1
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

6.5. 게시글 수정

Request

PUT /api/v1/boards/posts/1 HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Accept: application/json
Authorization: access token
Host: localhost:8080

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

content
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=postRequest
Content-Type: application/json

{"title":"title1","content":"content1","doesPostImageExist":true}
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
Request header
Name Description Optional

Authorization

액세스 토큰

false

Path Parameters
Table 33. /api/v1/boards/posts/{postId}
Parameter Description

postId

게시글 아이디

Request Part
Part Description Optional

postRequest

게시글 제목 및 내용

false

image

첨부 이미지

true

Request Part (postRequest)
Path Type Description

title

String

게시글 제목

content

String

게시글 내용

doesPostImageExist

Boolean

게시글 이미지 존재 여부

Response

HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

6.6. 게시글 삭제

Request

DELETE /api/v1/boards/posts/1 HTTP/1.1
Authorization: access token
Content-Type: application/x-www-form-urlencoded
Host: localhost:8080
Content-Length: 102

_csrf=jP54NcntQOZMWDbkJ76f0guR7FLOGCZGMDx9n0Unn4ePnmBVtc5BDP6OJYRhPAeAQpOr5D6iwTP7fEVrCVoc_CdEqrLqrQNk
Request header
Name Description Optional

Authorization

액세스 토큰

false

Path Parameters
Table 34. /api/v1/boards/posts/{postId}
Parameter Description

postId

게시글 아이디

Response

HTTP/1.1 204 No Content
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

6.7. 댓글 페이징 조회

Request

GET /api/v1/boards/posts/1/comments?page=0&size=10&sort=id%2Casc HTTP/1.1
Authorization: access token
Host: localhost:8080
Request header
Name Description Optional

Authorization

액세스 토큰

false

Path Parameters
Table 35. /api/v1/boards/posts/{postId}/comments
Parameter Description

postId

게시글 아이디

Query Parameters
Name Description Optional

page

페이지

true

size

페이지 내 개수, default 10

true

sort

정렬 방법(ex. id,desc), default createdAt,desc

true

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 944

{
  "data" : [ {
    "commentId" : 1,
    "content" : "content1",
    "authorId" : 1,
    "author" : "authorName",
    "authorImageUrl" : "authorImageUrl",
    "createdDate" : "2024-01-01T00:00:00",
    "lastModifiedDate" : "2024-01-01T00:00:00",
    "isPrivate" : false
  }, {
    "commentId" : 2,
    "content" : "content2",
    "authorId" : 1,
    "author" : "authorName",
    "authorImageUrl" : "authorImageUrl",
    "createdDate" : "2024-01-01T00:00:00",
    "lastModifiedDate" : "2024-01-01T00:00:00",
    "isPrivate" : false
  }, {
    "commentId" : 3,
    "content" : "content3",
    "authorId" : 2,
    "author" : "authorName",
    "authorImageUrl" : "authorImageUrl",
    "createdDate" : "2024-01-01T00:00:00",
    "lastModifiedDate" : "2024-01-01T00:00:00",
    "isPrivate" : true
  } ],
  "pageData" : {
    "first" : true,
    "last" : true,
    "pageNumber" : 0,
    "size" : 3,
    "totalPages" : 1,
    "totalElements" : 3
  }
}
Response Body
{
  "data" : [ {
    "commentId" : 1,
    "content" : "content1",
    "authorId" : 1,
    "author" : "authorName",
    "authorImageUrl" : "authorImageUrl",
    "createdDate" : "2024-01-01T00:00:00",
    "lastModifiedDate" : "2024-01-01T00:00:00",
    "isPrivate" : false
  }, {
    "commentId" : 2,
    "content" : "content2",
    "authorId" : 1,
    "author" : "authorName",
    "authorImageUrl" : "authorImageUrl",
    "createdDate" : "2024-01-01T00:00:00",
    "lastModifiedDate" : "2024-01-01T00:00:00",
    "isPrivate" : false
  }, {
    "commentId" : 3,
    "content" : "content3",
    "authorId" : 2,
    "author" : "authorName",
    "authorImageUrl" : "authorImageUrl",
    "createdDate" : "2024-01-01T00:00:00",
    "lastModifiedDate" : "2024-01-01T00:00:00",
    "isPrivate" : true
  } ],
  "pageData" : {
    "first" : true,
    "last" : true,
    "pageNumber" : 0,
    "size" : 3,
    "totalPages" : 1,
    "totalElements" : 3
  }
}
Path Type Description

data

Array

페이지 내 댓글 정보

data[].commentId

Number

댓글 아이디

data[].content

String

댓글 내용

data[].authorId

Number

댓글 작성자 아이디

data[].author

String

댓글 작성자 이름

data[].authorImageUrl

String

댓글 작성자 프로필 이미지 URL

data[].createdDate

String

댓글 작성일

data[].lastModifiedDate

String

댓글 마지막 수정일

data[].isPrivate

Boolean

비밀 댓글 여부

pageData

Object

페이지 정보

pageData.totalPages

Number

총 페이지

pageData.first

Boolean

첫 페이지 여부

pageData.last

Boolean

마지막 페이지 여부

pageData.pageNumber

Number

현재 페이지 번호

pageData.size

Number

페이지 size (default 10)

pageData.totalElements

Number

페이지 내 댓글 개수

6.8. 댓글 단건 조회

Request

GET /api/v1/boards/posts/comments/1 HTTP/1.1
Authorization: access token
Host: localhost:8080
Request header
Name Description Optional

Authorization

액세스 토큰

false

Path Parameters
Table 36. /api/v1/boards/posts/comments/{commentId}
Parameter Description

commentId

댓글 아이디

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 241

{
  "commentId" : 1,
  "content" : "content1",
  "authorId" : 1,
  "author" : "authorName",
  "authorImageUrl" : "authorImageUrl",
  "createdDate" : "2024-01-01T00:00:00",
  "lastModifiedDate" : "2024-01-01T00:00:00",
  "isPrivate" : false
}
Response Body
{
  "commentId" : 1,
  "content" : "content1",
  "authorId" : 1,
  "author" : "authorName",
  "authorImageUrl" : "authorImageUrl",
  "createdDate" : "2024-01-01T00:00:00",
  "lastModifiedDate" : "2024-01-01T00:00:00",
  "isPrivate" : false
}
Path Type Description

commentId

Number

댓글 아이디

content

String

댓글 내용

authorId

Number

댓글 작성자 아이디

author

String

댓글 작성자 이름

authorImageUrl

String

댓글 작성자 프로필 이미지 URL

createdDate

String

댓글 작성일

lastModifiedDate

String

댓글 마지막 수정일

isPrivate

Boolean

비밀 댓글 여부

6.9. 댓글 생성

Request

POST /api/v1/boards/posts/1/comments?_csrf=korMnOsF64G9bia4K0xMLN_GmgLjpiWuBNVuDrOfGkEFfjhYpbz4-d9g3OKQWRfZHmF4He6nt2PQkhODPbYKOIOuLnYwRw5t HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: access token
Content-Length: 51
Host: localhost:8080

{
  "content" : "content1",
  "isPrivate" : false
}
Request header
Name Description Optional

Authorization

액세스 토큰

false

Request Fields
필드명 타입 필수 값 Description

content

String

true

댓글 내용

isPrivate

Boolean

true

비밀 댓글 여부

Path Parameters
Table 37. /api/v1/boards/posts/{postId}/comments
Parameter Description

postId

게시글 아이디

Response

HTTP/1.1 201 Created
Location: /api/v1/boards/posts/comments/1
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

6.10. 댓글 수정

Request

PUT /api/v1/boards/posts/comments/1?_csrf=8JjE0CIf3_wHn_ggBclqc1qw7X7c7i9GGGqe0EvAZDIuZ5cfkqzx5ht555kq-8oYN-ReQ2iCwEfuihxrLV_84X_3V1MaBPQr HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: access token
Content-Length: 51
Host: localhost:8080

{
  "content" : "content1",
  "isPrivate" : false
}
Request header
Name Description Optional

Authorization

액세스 토큰

false

Request Fields
필드명 타입 필수 값 Description

content

String

true

댓글 내용

isPrivate

Boolean

true

비밀 댓글 여부

Path Parameters
Table 38. /api/v1/boards/posts/comments/{commentId}
Parameter Description

commentId

댓글 아이디

Response

HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

6.11. 댓글 삭제

Request

DELETE /api/v1/boards/posts/comments/1 HTTP/1.1
Authorization: access token
Content-Type: application/x-www-form-urlencoded
Host: localhost:8080
Content-Length: 102

_csrf=1AQzNpVldktXCvgr_tlmvbWw7pXT6Vl1voCRJyoDEJTEOqJTtzxQUqdUFXx6M8hJxvRS3tfSw_TkjT9Y27L0Qx47c_HwApAy
Request header
Name Description Optional

Authorization

액세스 토큰

false

Path Parameters
Table 39. /api/v1/boards/posts/comments/{commentId}
Parameter Description

commentId

댓글 아이디

Response

HTTP/1.1 204 No Content
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

7. Notification

7.1. 실패한 메일 재전송

Request

POST /api/v1/mails/retry-all-failed-emails HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: localhost:8080
Content-Length: 102

_csrf=XqERGEN4uxsk1QKzf0EpgcB5OnM3uGZbry8TOhv5lopgaRxRaZIoKnEdiCoJt2SGTmwd5fUbF0tR2Qd2zEl3DCvB8LIDWiVl

Response

HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

8. 금칙어 관리

8.1. 금칙어를 파일로 등록

Request

POST /api/v1/profanities/upload HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Host: localhost:8080

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=file; filename=profanity-list.txt
Content-Type: text/plain

content 예시
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
Request Part
Part Description Optional

file

금칙어 목록 파일

false

Response

HTTP/1.1 201 Created
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

8.2. 금칙어 정보 csv 파일로 저장

Request

GET /api/v1/profanities/csv?_csrf=q-NeXGkySGOKwjtm9AIFiamDgCXOlSFDWic4FMOAin6y-SIeyNdsOQxWKVOn8g0Cly8x68iwrR2tpRBuOUZbdfOx60eAnEAr HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: localhost:8080

Response

HTTP/1.1 201 Created
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 35

{"url":"/files/profanity_info.csv"}
Response Body
Path Type Description

url

String

csv 파일 다운로드 s3 url

8.3. 금칙어 정보 단일 추가

Request

POST /api/v1/profanities?_csrf=gIxzx8yjVVzdMyMcoaOWzHuu_B4Sol2p0gREvRX8E4sjugdRtr8S8qqQZW3wAhp5xI6i_kyY0SZxw2SEtzQl2yPIJu1H2zJm HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 23
Host: localhost:8080

{
  "word" : "바보"
}
Request Body
필드명 타입 필수 값 Description

word

String

true

금칙어

Response

HTTP/1.1 201 Created
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

8.4. 금칙어 정보 단일 삭제

Request

DELETE /api/v1/profanities?_csrf=bIoIght0nYEIvogJDVB2wJreDnQ4OWyrwvCCsY8X-gmhEvA3Cus9unkWqbAl3LxvOn1C8vm6I01ZCA-GoZS3gb8mmWqXJpYF HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 23
Host: localhost:8080

{
  "word" : "바보"
}
Request Body
필드명 타입 필수 값 Description

word

String

true

금칙어

Response

HTTP/1.1 204 No Content
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

9. 예외 코드

9.1. 유저

코드 코드 설명

USER_NOT_FOUND

존재하지 않는 유저입니다

ALREADY_BOOKMARKED

이미 북마크한 이벤트입니다

BOOKMARK_NOT_FOUND

존재하지 않는 북마크입니다

USER_CANNOT_WITHDRAW

탈퇴 할 수 없는 유저입니다

USER_DELETED

삭제된 사용자 입니다

NULL_REQUEST

요청에 null 값이 있습니다

INVALID_EMAIL

올바른 이메일을 입력해 주세요

INVALID_PHONE_NUMBER

올바른 전화번호를 입력해 주세요

INVALID_NAME

2자 이상 10자 이하의 이름을 입력해 주세요

9.2. 클럽

코드 코드 설명

CLUB_NOT_FOUND

존재하지 않는 클럽입니다

NOTICE_NOT_FOUND

존재하지 않는 공지사항입니다

CAN_NOT_SELF_DEGRADING

혼자 남은 관리자는 강등될 수 없습니다

CLUB_ALREADY_JOINED

이미 해당 클럽에 가입되어 있습니다

NOT_CLUB_MEMBER

해당 클럽의 멤버가 아닙니다

UNAUTHORIZED

권한이 없습니다

CAN_NOT_WITHDRAW

마지막 관리자는 탈퇴가 불가합니다

DUPLICATED_CLUB_NAME

클럽 이름은 중복될 수 없습니다

EXCEED_NOTICE_LENGTH

클럽 공지사항은 1000자를 넘을 수 없습니다

9.3. 초대 링크 관련

코드 코드 설명

INVITE_NOT_FOUND

해당 초대코드를 보유한 클럽이 없습니다

INVITE_EXPIRED

만료된 초대링크 입니다

9.4. 행사

코드 코드 설명

EVENT_NOT_FOUND

존재하지 않는 행사입니다

EVENT_CATEGORY_NOT_ALLOWED

클럽을 제외한 카테고리의 행사만 조회 가능합니다

EVENT_ALREADY_APPLIED

이미 신청한 행사입니다

NOT_APPLICABLE_DATE 신청이 불가능한 기간의 행사입니다

EVENT_NOT_APPLIED

신청한 이력이 없는 행사입니다

EXCEED_CAPACITY

정원을 초과하였습니다

TICKET_COUNT_REQUIRED

행사 티켓 매수는 필수입니다

EXCEED_TICKET_COUNT

인 당 티켓 예매 가능 수를 초과하였습니다

EVENT_NOT_MANAGED

폼이 없거나 관리모드를 설정하지 않은 폼입니다.

INVALID_EVENT_TITLE

제목은 1~30자 사이의 길이의 필수값입니다.

INVALID_EVENT_CONTENT

내용은 1~200자 사이의 길이입니다.

INVALID_EVENT_LOCATION

위치는 1~30자 사이의 길이입니다.

INVALID_EVENT_COST

비용은 1이상 100만원이하의 값입니다.

INVALID_EVENT_CAPACITY

정원은 1~999사이의 값입니다.

INVALID_EVENT_BANK_NAME

은행명은 1~20자 사이의 길이입니다.

INVALID_EVENT_BANK_ACCOUNT_NUMBER

은행 계좌번호는 1~30자 사이의 길이입니다.

INVALID_EVENT_MAX_TICKET_COUNT

인 당 예매 가능 수는 1이상 999이하의 값입니다.

INVALID_EVENT_CATEGORY

행사 카테고리는 필수 값입니다.

INVALID_POSTER_IMAGE

행사 포스터는 필수 값입니다.

INVALID_EVENT_USER

올바르지 못한 이벤트 유저 입니다

INVALID_EVENT

9.5. 폼

코드 코드 설명

FORM_NOT_FOUND

존재하지 않는 폼입니다

FORM_OPTION_NOT_FOUND

존재하지 않는 폼 옵션 입니다

FORM_ANSWER_NOT_FOUND

존재하지 않는 유저의 폼 답변입니다

EXISTED_FORM

폼이 존재하는 행사입니다

9.6. Global

코드 코드 설명

BAD_REQUEST

잘못된 요청입니다

FAIL_DESERIALIZE

JSON 데이터를 변환하는데 실패했습니다.

INVALID_TOKEN_FORMAT

토큰 포멧이 잘못되었습니다

ACCESS_TOKEN_NOT_EXIST

엑세스 토큰이 없습니다

EXPIRED_ACCESS_TOKEN

엑세스 토큰이 만료되었습니다

EXPIRED_REFRESH_TOKEN

리프레시 토큰이 만료되었습니다

INVALID_ACCESS_TOKEN

유효하지 않은 엑세스 토큰입니다

INVALID_REFRESH_TOKEN

유효하지 않은 리프레시 토큰입니다

INVALID_FILE_EXTENSION

유효한 파일 확장자가 아닙니다

FAIL_FILE_UPLOAD

파일 업로드에 실패했습니다

MAX_IMAGE_SIZE_EXCEEDED

이미지의 최대 크기를 초과했습니다

INVALID_REQUEST

HTTP 요청(메서드)이 잘못되었습니다");

KAKAO_LOGOUT_FAIL

카카오 로그아웃에 실패했습니다

KAKAO_UNLINK_FAIL

카카오 계정 연결 해제에 실패했습니다

9.7. 금칙어

코드 코드 설명

FAIL_BAD_WORD_SETUP

비속어 목록 Trie 생성 실패

BAD_WORD_DETECTED

비속어가 발견 되었습니다

INVALID_EXTENSION

md,txt 파일만 업로드 가능합니다

FAILED_TO_SAVE

금칙어 저장에 실패했습니다

BAD_WORD_ALREADY_EXISTS

이미 존재하는 금칙어 입니다

FAILED_TO_CREATE_CSV

csv 파일 생성에 실패했습니다