쓰앵님 - 온라인 과외 매칭 플랫폼

v1.0.0, 2023.01.19

  • API 서버 배포 링크

1. 쓰앵님 팀원

  • 프론트 - 신승구, 김민경, 유영민

  • 백엔드 - 김다은, 이수영, 강호수

2. Auth

2.1. 로그인 상태 조회 - OK

  • 로그인 상태 조회 - OK

http-request
GET /auth/verify-user HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: eyJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6InRlc3RAdGVzdC5jb20iLCJzdWIiOiJ0ZXN0QHRlc3QuY29tIiwiaWF0IjoxNjgyMzgyNjcyLCJleHAiOjE2ODIzODM1NzJ9.tHFOM6DF-AZv1ecYXa982UnShYkwstDFpnPtLnreha4
Accept: application/json
Host: localhost:8080
Table 1. request-headers
Name Description

Authorization

AccessToken

http-response
HTTP/1.1 200 OK
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN

2.2. 로그인 상태 조회 - AccessToken 만료

http-request
GET /auth/verify-user HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6InRlc3RAdGVzdC5jb20iLCJzdWIiOiJ0ZXN0QHRlc3QuY29tIiwiaWF0IjoxNjgyMzgyNjcyLCJleHAiOjE2ODIzODI2NzJ9.eqvDx6SzDtnPhLCGtyU92dbpcqBzpYOeTPSoparAuRs
Accept: application/json
Host: localhost:8080
Table 2. request-headers
Name Description

Authorization

AccessToken

http-response
HTTP/1.1 403 Forbidden
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 110

{
  "status" : 403,
  "message" : "EXPIRED ACCESS TOKEN",
  "fieldErrors" : null,
  "violationErrors" : null
}
response-body
{
  "status" : 403,
  "message" : "EXPIRED ACCESS TOKEN",
  "fieldErrors" : null,
  "violationErrors" : null
}
Table 3. response-fields
Path Type Description

status

Number

ErrorCode

message

String

ErrorMessage

fieldErrors

String

fieldErrors

violationErrors

String

violationErrors

2.3. 토큰 재발급 - OK

http-request
GET /auth/reissue-token/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Accept: application/json
Host: localhost:8080
Table 4. /auth/reissue-token/{userId}
Parameter Description

userId

회원 식별자

http-response
HTTP/1.1 200 OK
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6WyJVU0VSIl0sInVzZXJuYW1lIjoidGVzdEB0ZXN0LmNvbSIsInN1YiI6InRlc3RAdGVzdC5jb20iLCJpYXQiOjE2ODIzODI2NzEsImV4cCI6MTY4MjM4MzU3MX0.kPoP33OnCIlgICfwRMbkyl6wTBnzMkyv8WGhyEnvM9c
userStatus: TUTOR
userId: 1
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 277

{
  "userId" : "1",
  "userStatus" : "TUTOR",
  "authorization" : "Bearer eyJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6WyJVU0VSIl0sInVzZXJuYW1lIjoidGVzdEB0ZXN0LmNvbSIsInN1YiI6InRlc3RAdGVzdC5jb20iLCJpYXQiOjE2ODIzODI2NzEsImV4cCI6MTY4MjM4MzU3MX0.kPoP33OnCIlgICfwRMbkyl6wTBnzMkyv8WGhyEnvM9c"
}
response-body
{
  "userId" : "1",
  "userStatus" : "TUTOR",
  "authorization" : "Bearer eyJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6WyJVU0VSIl0sInVzZXJuYW1lIjoidGVzdEB0ZXN0LmNvbSIsInN1YiI6InRlc3RAdGVzdC5jb20iLCJpYXQiOjE2ODIzODI2NzEsImV4cCI6MTY4MjM4MzU3MX0.kPoP33OnCIlgICfwRMbkyl6wTBnzMkyv8WGhyEnvM9c"
}
Table 5. response-fields
Path Type Description

authorization

String

AccessToken

userId

String

회원 식별자

userStatus

String

회원 타입

2.4. 토큰 재발급 - RefreshToken 만료

http-request
GET /auth/reissue-token/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Accept: application/json
Host: localhost:8080
Table 6. /auth/reissue-token/{userId}
Parameter Description

userId

회원 식별자

http-response
HTTP/1.1 401 Unauthorized
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 111

{
  "status" : 401,
  "message" : "EXPIRED REFRESH TOKEN",
  "fieldErrors" : null,
  "violationErrors" : null
}
response-body
{
  "status" : 401,
  "message" : "EXPIRED REFRESH TOKEN",
  "fieldErrors" : null,
  "violationErrors" : null
}
Table 7. response-fields
Path Type Description

status

Number

ErrorCode

message

String

ErrorMessage

fieldErrors

String

fieldErrors

violationErrors

String

violationErrors

2.5. 로그아웃 - OK

http-request
GET /auth/logout HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: eyJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6InRlc3RAdGVzdC5jb20iLCJzdWIiOiJ0ZXN0QHRlc3QuY29tIiwiaWF0IjoxNjgyMzgyNjcxLCJleHAiOjE2ODIzODM1NzF9.RQuzLBgxzff9ltYZ5zBWDk_Z9XdwbulnC4FB0gdtuUA
Accept: application/json
Host: localhost:8080
Table 8. request-headers
Name Description

Authorization

AccessToken

http-response
HTTP/1.1 200 OK
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN

2.6. 2차 비밀번호 검증 - OK

http-request
POST /auth/verify-second-password/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: eyJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6InRlc3RAdGVzdC5jb20iLCJzdWIiOiJ0ZXN0QHRlc3QuY29tIiwiaWF0IjoxNjgyMzgyNjcyLCJleHAiOjE2ODIzODM1NzJ9.tHFOM6DF-AZv1ecYXa982UnShYkwstDFpnPtLnreha4
Accept: application/json
Content-Length: 31
Host: localhost:8080

{
  "secondPassword" : "1234"
}
Table 9. request-headers
Name Description

Authorization

AccessToken

request-body
{
  "secondPassword" : "1234"
}
Table 10. /auth/verify-second-password/{userId}
Parameter Description

userId

회원 식별자

http-response
HTTP/1.1 200 OK
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN

2.7. 2차 비밀번호 검증 - 잘못된 2차 비밀번호

http-request
POST /auth/verify-second-password/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: eyJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6InRlc3RAdGVzdC5jb20iLCJzdWIiOiJ0ZXN0QHRlc3QuY29tIiwiaWF0IjoxNjgyMzgyNjcyLCJleHAiOjE2ODIzODM1NzJ9.tHFOM6DF-AZv1ecYXa982UnShYkwstDFpnPtLnreha4
Accept: application/json
Content-Length: 31
Host: localhost:8080

{
  "secondPassword" : "1234"
}
Table 11. request-headers
Name Description

Authorization

AccessToken

request-body
{
  "secondPassword" : "1234"
}
Table 12. /auth/verify-second-password/{userId}
Parameter Description

userId

회원 식별자

http-response
HTTP/1.1 403 Forbidden
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 111

{
  "status" : 403,
  "message" : "WRONG SECOND PASSWORD",
  "fieldErrors" : null,
  "violationErrors" : null
}
response-body
{
  "status" : 403,
  "message" : "WRONG SECOND PASSWORD",
  "fieldErrors" : null,
  "violationErrors" : null
}
Table 13. response-fields
Path Type Description

status

Number

ErrorCode

message

String

ErrorMessage

fieldErrors

String

fieldErrors

violationErrors

String

violationErrors

3. User

3.1. 회원 정보 조회

http-request
GET /users/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token Value
Accept: application/json
Host: localhost:8080
Table 14. request-headers
Name Description

Authorization

AccessToken

Table 15. /users/{userId}
Parameter Description

userId

회원 식별자

http-response
HTTP/1.1 200 OK
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 283

{
  "data" : {
    "userId" : 1,
    "email" : "test@test.com",
    "nickName" : "수포자",
    "phoneNumber" : "01012345678",
    "loginType" : "SOCIAL",
    "userStatus" : "TUTOR",
    "createAt" : "2023-04-25T00:31:19.241308",
    "updateAt" : "2023-04-25T00:31:19.241309"
  }
}
response-body
{
  "data" : {
    "userId" : 1,
    "email" : "test@test.com",
    "nickName" : "수포자",
    "phoneNumber" : "01012345678",
    "loginType" : "SOCIAL",
    "userStatus" : "TUTOR",
    "createAt" : "2023-04-25T00:31:19.241308",
    "updateAt" : "2023-04-25T00:31:19.241309"
  }
}
Table 16. response-fields
Path Type Description

data

Object

결과 데이터

data.userId

Number

회원 식별자

data.email

String

회원 이메일

data.nickName

String

회원 닉네임

data.phoneNumber

String

회원 폰번호

data.loginType

String

로그인 타입

data.userStatus

String

회원 상태 TUTOR/TUTEE/NONE

data.createAt

String

생성 시간

data.updateAt

String

최종 수정 시간

3.2. 회원 생성

http-request
POST /users HTTP/1.1
Content-Type: application/json;charset=UTF-8
Accept: application/json
Content-Length: 86
Host: localhost:8080

{
  "nickName" : "수포자",
  "email" : "test@test.com",
  "password" : "aaaa1234"
}
request-body
{
  "nickName" : "수포자",
  "email" : "test@test.com",
  "password" : "aaaa1234"
}
Table 17. request-fields
Path Type Description

nickName

String

회원 닉네임

email

String

회원 이메일

password

String

회원 비밀번호 문자+숫자 8자리 이상

http-response
HTTP/1.1 201 Created
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 283

{
  "data" : {
    "userId" : 1,
    "email" : "test@test.com",
    "nickName" : "수포자",
    "phoneNumber" : "01012345678",
    "loginType" : "SOCIAL",
    "userStatus" : "TUTOR",
    "createAt" : "2023-04-25T00:31:19.273202",
    "updateAt" : "2023-04-25T00:31:19.273202"
  }
}
response-body
{
  "data" : {
    "userId" : 1,
    "email" : "test@test.com",
    "nickName" : "수포자",
    "phoneNumber" : "01012345678",
    "loginType" : "SOCIAL",
    "userStatus" : "TUTOR",
    "createAt" : "2023-04-25T00:31:19.273202",
    "updateAt" : "2023-04-25T00:31:19.273202"
  }
}
Table 18. response-fields
Path Type Description

data

Object

결과 데이터

data.userId

Number

회원 식별자

data.email

String

회원 이메일

data.nickName

String

회원 닉네임

data.phoneNumber

String

회원 폰번호

data.loginType

String

로그인 타입

data.userStatus

String

회원 상태 TUTOR/TUTEE/NONE

data.createAt

String

생성 시간

data.updateAt

String

최종 수정 시간

3.3. 회원 정보 수정

http-request
PATCH /users/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token Value
Accept: application/json
Content-Length: 140
Host: localhost:8080

{
  "nickName" : "test",
  "password" : "aaaa1234",
  "phoneNumber" : "01055550000",
  "secondPassword" : "1234",
  "userStatus" : "TUTOR"
}
Table 19. /users/{userId}
Parameter Description

userId

회원 식별자

Table 20. request-headers
Name Description

Authorization

AccessToken

request-body
{
  "nickName" : "test",
  "password" : "aaaa1234",
  "phoneNumber" : "01055550000",
  "secondPassword" : "1234",
  "userStatus" : "TUTOR"
}
Table 21. request-fields
Path Type Description

nickName

String

회원 닉네임

password

String

회원 비밀번호 문자+숫자 8자리 이상

phoneNumber

String

회원 휴대폰 번호 '-'없이 11자리 숫자

secondPassword

String

회원 2차 비밀번호

userStatus

String

회원 상태 TUTOR/TUTEE

http-response
HTTP/1.1 200 OK
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 283

{
  "data" : {
    "userId" : 1,
    "email" : "test@test.com",
    "nickName" : "수포자",
    "phoneNumber" : "01012345678",
    "loginType" : "SOCIAL",
    "userStatus" : "TUTOR",
    "createAt" : "2023-04-25T00:31:19.160628",
    "updateAt" : "2023-04-25T00:31:19.160631"
  }
}
response-body
{
  "data" : {
    "userId" : 1,
    "email" : "test@test.com",
    "nickName" : "수포자",
    "phoneNumber" : "01012345678",
    "loginType" : "SOCIAL",
    "userStatus" : "TUTOR",
    "createAt" : "2023-04-25T00:31:19.160628",
    "updateAt" : "2023-04-25T00:31:19.160631"
  }
}
Table 22. response-fields
Path Type Description

data

Object

결과 데이터

data.userId

Number

회원 식별자

data.email

String

회원 이메일

data.nickName

String

회원 닉네임

data.phoneNumber

String

회원 폰번호

data.loginType

String

로그인 타입

data.userStatus

String

회원 상태 TUTOR/TUTEE/NONE

data.createAt

String

생성 시간

data.updateAt

String

최종 수정 시간

3.4. 튜터 프로필 전체 조회 및 검색

http-request
GET /users/tutors?page=0&sort=rate&search=test&subject=%EC%88%98%ED%95%99 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Accept: application/json
Host: localhost:8080
Table 23. request-parameters
Parameter Description

sort

정렬 조건 rate/updateAt

page

요청 페이지

search

검색 키워드(프로필 이름, 한줄소개 등 세부 정보 검색)

subject

튜터, 튜티의 과목 ex.'수학,과학'

http-response
HTTP/1.1 200 OK
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 952

{
  "data" : [ {
    "profileId" : 1,
    "name" : "어때요",
    "rate" : 4.5,
    "subjects" : [ {
      "subjectId" : 1,
      "subjectTitle" : "수학"
    }, {
      "subjectId" : 1,
      "subjectTitle" : "수학"
    }, {
      "subjectId" : 1,
      "subjectTitle" : "수학"
    } ],
    "school" : "MIT",
    "bio" : "대치동 원탑 수학 머신",
    "profileImage" : {
      "profileImageId" : 1,
      "url" : "https://www.google.com/url?sa=i&url=http%3A%2F%2Fm.blog.naver.com%2Fcjswodnajs%2F222138892587&psig=AOvVaw0Ef_d9Jqh-dQm9Q7RRDiIg&ust=1673341195393000&source=images&cd=vfe&ved=0CA8QjRxqFwoTCMjWyO2PuvwCFQAAAAAdAAAAABAE",
      "createAt" : "2023-04-25T00:31:19.366429",
      "updateAt" : "2023-04-25T00:31:19.366433"
    },
    "createAt" : "2023-04-25T00:31:19.366435",
    "updateAt" : "2023-04-25T00:31:19.366436"
  } ],
  "pageInfo" : {
    "page" : 0,
    "size" : 20,
    "totalElements" : 1,
    "totalPages" : 1
  }
}
response-body
{
  "data" : [ {
    "profileId" : 1,
    "name" : "어때요",
    "rate" : 4.5,
    "subjects" : [ {
      "subjectId" : 1,
      "subjectTitle" : "수학"
    }, {
      "subjectId" : 1,
      "subjectTitle" : "수학"
    }, {
      "subjectId" : 1,
      "subjectTitle" : "수학"
    } ],
    "school" : "MIT",
    "bio" : "대치동 원탑 수학 머신",
    "profileImage" : {
      "profileImageId" : 1,
      "url" : "https://www.google.com/url?sa=i&url=http%3A%2F%2Fm.blog.naver.com%2Fcjswodnajs%2F222138892587&psig=AOvVaw0Ef_d9Jqh-dQm9Q7RRDiIg&ust=1673341195393000&source=images&cd=vfe&ved=0CA8QjRxqFwoTCMjWyO2PuvwCFQAAAAAdAAAAABAE",
      "createAt" : "2023-04-25T00:31:19.366429",
      "updateAt" : "2023-04-25T00:31:19.366433"
    },
    "createAt" : "2023-04-25T00:31:19.366435",
    "updateAt" : "2023-04-25T00:31:19.366436"
  } ],
  "pageInfo" : {
    "page" : 0,
    "size" : 20,
    "totalElements" : 1,
    "totalPages" : 1
  }
}
Table 24. response-fields
Path Type Description

data

Array

결과 데이터

data[].profileId

Number

프로필 식별자

data[].name

String

프로필 이름

data[].rate

Number

평균 별점

data[].subjects

Array

과목 리스트

data[].subjects[].subjectId

Number

과목 식별자

data[].subjects[].subjectTitle

String

과목 명

data[].school

String

학교

data[].bio

String

한줄 소개

data[].profileImage

Object

프로필 이미지

data[].profileImage.profileImageId

Number

프로필 이미지 식별자

data[].profileImage.url

String

이미지 URL

data[].profileImage.createAt

String

프로필 이미지 생성 시각

data[].profileImage.updateAt

String

프로필 이미지 수정 시각

data[].createAt

String

프로필 생성 시각

data[].updateAt

String

프로필 최종 수정 시각

pageInfo

Object

요청 페이지 정보

pageInfo.page

Number

요청 페이지 - 0 = 1 페이지

pageInfo.size

Number

페이지당 요청 회원

pageInfo.totalElements

Number

총 멤버

pageInfo.totalPages

Number

생성된 총 페이지

3.5. 튜티 프로필 전체 조회 및 검색

http-request
GET /users/tutees?page=0&sort=rate&search=test&subject=%EC%88%98%ED%95%99 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Accept: application/json
Host: localhost:8080
Table 25. request-parameters
Parameter Description

sort

정렬 조건 rate/updateAt

page

요청 페이지

search

검색 키워드(프로필 이름, 한줄소개 등 세부 정보 검색)

subject

튜터, 튜티의 과목 ex.'수학,과학'

http-response
HTTP/1.1 200 OK
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 952

{
  "data" : [ {
    "profileId" : 1,
    "name" : "어때요",
    "rate" : 4.5,
    "subjects" : [ {
      "subjectId" : 1,
      "subjectTitle" : "수학"
    }, {
      "subjectId" : 1,
      "subjectTitle" : "수학"
    }, {
      "subjectId" : 1,
      "subjectTitle" : "수학"
    } ],
    "school" : "MIT",
    "bio" : "대치동 원탑 수학 머신",
    "profileImage" : {
      "profileImageId" : 1,
      "url" : "https://www.google.com/url?sa=i&url=http%3A%2F%2Fm.blog.naver.com%2Fcjswodnajs%2F222138892587&psig=AOvVaw0Ef_d9Jqh-dQm9Q7RRDiIg&ust=1673341195393000&source=images&cd=vfe&ved=0CA8QjRxqFwoTCMjWyO2PuvwCFQAAAAAdAAAAABAE",
      "createAt" : "2023-04-25T00:31:19.308037",
      "updateAt" : "2023-04-25T00:31:19.308041"
    },
    "createAt" : "2023-04-25T00:31:19.308043",
    "updateAt" : "2023-04-25T00:31:19.308044"
  } ],
  "pageInfo" : {
    "page" : 0,
    "size" : 20,
    "totalElements" : 1,
    "totalPages" : 1
  }
}
response-body
{
  "data" : [ {
    "profileId" : 1,
    "name" : "어때요",
    "rate" : 4.5,
    "subjects" : [ {
      "subjectId" : 1,
      "subjectTitle" : "수학"
    }, {
      "subjectId" : 1,
      "subjectTitle" : "수학"
    }, {
      "subjectId" : 1,
      "subjectTitle" : "수학"
    } ],
    "school" : "MIT",
    "bio" : "대치동 원탑 수학 머신",
    "profileImage" : {
      "profileImageId" : 1,
      "url" : "https://www.google.com/url?sa=i&url=http%3A%2F%2Fm.blog.naver.com%2Fcjswodnajs%2F222138892587&psig=AOvVaw0Ef_d9Jqh-dQm9Q7RRDiIg&ust=1673341195393000&source=images&cd=vfe&ved=0CA8QjRxqFwoTCMjWyO2PuvwCFQAAAAAdAAAAABAE",
      "createAt" : "2023-04-25T00:31:19.308037",
      "updateAt" : "2023-04-25T00:31:19.308041"
    },
    "createAt" : "2023-04-25T00:31:19.308043",
    "updateAt" : "2023-04-25T00:31:19.308044"
  } ],
  "pageInfo" : {
    "page" : 0,
    "size" : 20,
    "totalElements" : 1,
    "totalPages" : 1
  }
}
Table 26. response-fields
Path Type Description

data

Array

결과 데이터

data[].profileId

Number

프로필 식별자

data[].name

String

프로필 이름

data[].rate

Number

평균 별점

data[].subjects

Array

과목 리스트

data[].subjects[].subjectId

Number

과목 식별자

data[].subjects[].subjectTitle

String

과목 명

data[].school

String

학교

data[].bio

String

한줄 소개

data[].profileImage

Object

프로필 이미지

data[].profileImage.profileImageId

Number

프로필 이미지 식별자

data[].profileImage.url

String

이미지 URL

data[].profileImage.createAt

String

프로필 이미지 생성 시각

data[].profileImage.updateAt

String

프로필 이미지 수정 시각

data[].createAt

String

프로필 생성 시각

data[].updateAt

String

프로필 최종 수정 시각

pageInfo

Object

요청 페이지 정보

pageInfo.page

Number

요청 페이지 - 0 = 1 페이지

pageInfo.size

Number

페이지당 요청 회원

pageInfo.totalElements

Number

총 멤버

pageInfo.totalPages

Number

생성된 총 페이지

3.6. 회원 삭제

http-request
DELETE /users/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token Value
Accept: application/json
Host: localhost:8080
Table 27. /users/{userId}
Parameter Description

userId

회원 식별자

Table 28. request-headers
Name Description

Authorization

AccessToken

http-response
HTTP/1.1 204 No Content
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN

4. Profile

4.1. 특정 회원 프로필 전체 조회

http-request
GET /profiles/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token Value
Accept: application/json
Host: localhost:8080
Table 29. request-headers
Name Description

Authorization

AccessToken

Table 30. /profiles/{userId}
Parameter Description

userId

회원 식별자

http-response
HTTP/1.1 200 OK
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 348

{
  "data" : [ {
    "profileId" : 1,
    "name" : "어때요",
    "url" : "https://www.google.com/url?sa=i&url=http%3A%2F%2Fm.blog.naver.com%2Fcjswodnajs%2F222138892587&psig=AOvVaw0Ef_d9Jqh-dQm9Q7RRDiIg&ust=1673341195393000&source=images&cd=vfe&ved=0CA8QjRxqFwoTCMjWyO2PuvwCFQAAAAAdAAAAABAE",
    "school" : "서운대 철학과 17학번"
  } ]
}
response-body
{
  "data" : [ {
    "profileId" : 1,
    "name" : "어때요",
    "url" : "https://www.google.com/url?sa=i&url=http%3A%2F%2Fm.blog.naver.com%2Fcjswodnajs%2F222138892587&psig=AOvVaw0Ef_d9Jqh-dQm9Q7RRDiIg&ust=1673341195393000&source=images&cd=vfe&ved=0CA8QjRxqFwoTCMjWyO2PuvwCFQAAAAAdAAAAABAE",
    "school" : "서운대 철학과 17학번"
  } ]
}
Table 31. response-fields
Path Type Description

data

Array

결과 데이터

data[].profileId

Number

프로필 식별자

data[].name

String

프로필 이름

data[].url

String

프로필 이미지 URL

data[].school

String

학교 정보

4.2. 특정 프로필 조회

http-request
GET /profiles/details/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Accept: application/json
Host: localhost:8080
Table 32. /profiles/details/{profileId}
Parameter Description

profileId

프로필 식별자

http-response
HTTP/1.1 200 OK
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 1702

{
  "data" : {
    "profileId" : 1,
    "name" : "test",
    "rate" : 3.5,
    "bio" : "test",
    "school" : "test",
    "wantedStatus" : "REQUEST",
    "profileStatus" : "TUTOR",
    "way" : "test",
    "character" : "test",
    "subjects" : [ {
      "subjectId" : 1,
      "subjectTitle" : "test",
      "content" : "test",
      "createAt" : "2023-04-25T00:31:16.267785",
      "updateAt" : "2023-04-25T00:31:16.267789"
    }, {
      "subjectId" : 1,
      "subjectTitle" : "test",
      "content" : "test",
      "createAt" : "2023-04-25T00:31:16.26776",
      "updateAt" : "2023-04-25T00:31:16.267777"
    } ],
    "difference" : "test",
    "gender" : "test",
    "pay" : "test",
    "wantDate" : "test",
    "preTutoring" : "test",
    "profileImage" : {
      "profileImageId" : 1,
      "url" : "test",
      "createAt" : "2023-04-25T00:31:16.267819",
      "updateAt" : "2023-04-25T00:31:16.267823"
    },
    "createAt" : "2023-04-25T00:31:16.267828",
    "updateAt" : "2023-04-25T00:31:16.267831",
    "reviews" : [ {
      "reviewId" : 1,
      "professional" : 4,
      "readiness" : 5,
      "explanation" : 5,
      "punctuality" : 4,
      "reviewBody" : "test",
      "tuteeName" : "test",
      "createAt" : "2023-04-25T00:31:16.26781",
      "updateAt" : "2023-04-25T00:31:16.267813"
    }, {
      "reviewId" : 1,
      "professional" : 4,
      "readiness" : 5,
      "explanation" : 5,
      "punctuality" : 4,
      "reviewBody" : "test",
      "tuteeName" : "test",
      "createAt" : "2023-04-25T00:31:16.2678",
      "updateAt" : "2023-04-25T00:31:16.267804"
    } ]
  },
  "pageInfo" : {
    "page" : 1,
    "size" : 5,
    "totalElements" : 7,
    "totalPages" : 2
  }
}
response-body
{
  "data" : {
    "profileId" : 1,
    "name" : "test",
    "rate" : 3.5,
    "bio" : "test",
    "school" : "test",
    "wantedStatus" : "REQUEST",
    "profileStatus" : "TUTOR",
    "way" : "test",
    "character" : "test",
    "subjects" : [ {
      "subjectId" : 1,
      "subjectTitle" : "test",
      "content" : "test",
      "createAt" : "2023-04-25T00:31:16.267785",
      "updateAt" : "2023-04-25T00:31:16.267789"
    }, {
      "subjectId" : 1,
      "subjectTitle" : "test",
      "content" : "test",
      "createAt" : "2023-04-25T00:31:16.26776",
      "updateAt" : "2023-04-25T00:31:16.267777"
    } ],
    "difference" : "test",
    "gender" : "test",
    "pay" : "test",
    "wantDate" : "test",
    "preTutoring" : "test",
    "profileImage" : {
      "profileImageId" : 1,
      "url" : "test",
      "createAt" : "2023-04-25T00:31:16.267819",
      "updateAt" : "2023-04-25T00:31:16.267823"
    },
    "createAt" : "2023-04-25T00:31:16.267828",
    "updateAt" : "2023-04-25T00:31:16.267831",
    "reviews" : [ {
      "reviewId" : 1,
      "professional" : 4,
      "readiness" : 5,
      "explanation" : 5,
      "punctuality" : 4,
      "reviewBody" : "test",
      "tuteeName" : "test",
      "createAt" : "2023-04-25T00:31:16.26781",
      "updateAt" : "2023-04-25T00:31:16.267813"
    }, {
      "reviewId" : 1,
      "professional" : 4,
      "readiness" : 5,
      "explanation" : 5,
      "punctuality" : 4,
      "reviewBody" : "test",
      "tuteeName" : "test",
      "createAt" : "2023-04-25T00:31:16.2678",
      "updateAt" : "2023-04-25T00:31:16.267804"
    } ]
  },
  "pageInfo" : {
    "page" : 1,
    "size" : 5,
    "totalElements" : 7,
    "totalPages" : 2
  }
}
Table 33. response-fields
Path Type Description

data

Object

결과 데이터

data.profileId

Number

프로필 식별자

data.name

String

프로필 이름

data.rate

Number

별점 평균

data.bio

String

한줄 소개

data.school

String

학교 정보

data.wantedStatus

String

공고 상태 NONE/BASIC/REQUEST

data.profileStatus

String

프로필 상태 TUTOR/TUTEE

data.way

String

수업 방식 또는 원하는 방식

data.character

String

성격

data.subjects

Array

과목

data.subjects[].subjectId

Number

과목 식별자

data.subjects[].subjectTitle

String

과목 타이틀

data.subjects[].content

String

과목 수업 내용

data.subjects[].createAt

String

과목 생성 시각

data.subjects[].updateAt

String

과목 최종 수정 시각

data.difference

String

차별점

data.gender

String

성별

data.pay

String

수업료 또는 원하는 수업료

data.wantDate

String

원하는 날짜

data.preTutoring

String

사전 과외 가능 여부

data.profileImage

Object

프로필 이미지 정보

data.profileImage.profileImageId

Number

프로필 이미지 식별자

data.profileImage.url

String

프로필 이미지 URL

data.profileImage.createAt

String

프로필 이미지 생성 시각

data.profileImage.updateAt

String

프로필 이미지 최종 수정 시각

data.createAt

String

프로필 생성 시각

data.updateAt

String

프로필 최종 생성 시각

data.reviews

Array

프로필 리뷰 리스트(튜터일때)

data.reviews[].reviewId

Number

후기 식별자

data.reviews[].professional

Number

전문성 별점

data.reviews[].readiness

Number

준비성 별점

data.reviews[].explanation

Number

수업 설명 별점

data.reviews[].punctuality

Number

시간 준수 별점

data.reviews[].reviewBody

String

후기 내용

data.reviews[].tuteeName

String

후기 작성자(튜티)

data.reviews[].createAt

String

후기 생성 시각

data.reviews[].updateAt

String

후기 최종 수정 시각

pageInfo

Object

요청 페이지 정보

pageInfo.page

Number

요청 페이지 - 0 = 1 페이지

pageInfo.size

Number

페이지당 요청 회원

pageInfo.totalElements

Number

총 멤버

pageInfo.totalPages

Number

생성된 총 페이지

4.3. 프로필 생성

http-request
POST /profiles/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token Value
Accept: application/json
Content-Length: 454
Host: localhost:8080

{
  "name" : "수포자",
  "bio" : "잘찍습니다",
  "school" : "고고고",
  "way" : "잘합니다",
  "subjects" : [ {
    "subjectId" : 1,
    "subjectTitle" : "test",
    "content" : "test"
  }, {
    "subjectId" : 2,
    "subjectTitle" : "test",
    "content" : "test"
  } ],
  "difference" : "할쑤이ㅅ써",
  "gender" : "남여",
  "character" : "소심함",
  "pay" : "비싸다",
  "wantDate" : "7/7 9 to 9",
  "preTutoring" : "안됨"
}
Table 34. /profiles/{userId}
Parameter Description

userId

회원 식별자

Table 35. request-headers
Name Description

Authorization

AccessToken

request-body
{
  "name" : "수포자",
  "bio" : "잘찍습니다",
  "school" : "고고고",
  "way" : "잘합니다",
  "subjects" : [ {
    "subjectId" : 1,
    "subjectTitle" : "test",
    "content" : "test"
  }, {
    "subjectId" : 2,
    "subjectTitle" : "test",
    "content" : "test"
  } ],
  "difference" : "할쑤이ㅅ써",
  "gender" : "남여",
  "character" : "소심함",
  "pay" : "비싸다",
  "wantDate" : "7/7 9 to 9",
  "preTutoring" : "안됨"
}
Table 36. request-fields
Path Type Description

name

String

프로필 이름

bio

String

한줄 소개

school

String

학교 정보

way

String

원하는 수업방식 또는 수업 방식

subjects

Array

과목 리스트

subjects[].subjectId

Number

과목 식별자

subjects[].subjectTitle

String

과목 타이틀

subjects[].content

String

과목 수업 내용

difference

String

차별성 - 튜터

gender

String

성별

character

String

성격

pay

String

수업료 또는 원하는 수업료

wantDate

String

원하는 시간

preTutoring

String

사전 과외 여부

http-response
HTTP/1.1 201 Created
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 1705

{
  "data" : {
    "profileId" : 1,
    "name" : "test",
    "rate" : 3.5,
    "bio" : "test",
    "school" : "test",
    "wantedStatus" : "REQUEST",
    "profileStatus" : "TUTOR",
    "way" : "test",
    "character" : "test",
    "subjects" : [ {
      "subjectId" : 1,
      "subjectTitle" : "test",
      "content" : "test",
      "createAt" : "2023-04-25T00:31:16.075915",
      "updateAt" : "2023-04-25T00:31:16.075918"
    }, {
      "subjectId" : 1,
      "subjectTitle" : "test",
      "content" : "test",
      "createAt" : "2023-04-25T00:31:16.075889",
      "updateAt" : "2023-04-25T00:31:16.075906"
    } ],
    "difference" : "test",
    "gender" : "test",
    "pay" : "test",
    "wantDate" : "test",
    "preTutoring" : "test",
    "profileImage" : {
      "profileImageId" : 1,
      "url" : "test",
      "createAt" : "2023-04-25T00:31:16.07595",
      "updateAt" : "2023-04-25T00:31:16.075953"
    },
    "createAt" : "2023-04-25T00:31:16.075958",
    "updateAt" : "2023-04-25T00:31:16.075961",
    "reviews" : [ {
      "reviewId" : 1,
      "professional" : 4,
      "readiness" : 5,
      "explanation" : 5,
      "punctuality" : 4,
      "reviewBody" : "test",
      "tuteeName" : "test",
      "createAt" : "2023-04-25T00:31:16.075941",
      "updateAt" : "2023-04-25T00:31:16.075944"
    }, {
      "reviewId" : 1,
      "professional" : 4,
      "readiness" : 5,
      "explanation" : 5,
      "punctuality" : 4,
      "reviewBody" : "test",
      "tuteeName" : "test",
      "createAt" : "2023-04-25T00:31:16.075931",
      "updateAt" : "2023-04-25T00:31:16.075934"
    } ]
  },
  "pageInfo" : {
    "page" : 1,
    "size" : 5,
    "totalElements" : 7,
    "totalPages" : 2
  }
}
response-body
{
  "data" : {
    "profileId" : 1,
    "name" : "test",
    "rate" : 3.5,
    "bio" : "test",
    "school" : "test",
    "wantedStatus" : "REQUEST",
    "profileStatus" : "TUTOR",
    "way" : "test",
    "character" : "test",
    "subjects" : [ {
      "subjectId" : 1,
      "subjectTitle" : "test",
      "content" : "test",
      "createAt" : "2023-04-25T00:31:16.075915",
      "updateAt" : "2023-04-25T00:31:16.075918"
    }, {
      "subjectId" : 1,
      "subjectTitle" : "test",
      "content" : "test",
      "createAt" : "2023-04-25T00:31:16.075889",
      "updateAt" : "2023-04-25T00:31:16.075906"
    } ],
    "difference" : "test",
    "gender" : "test",
    "pay" : "test",
    "wantDate" : "test",
    "preTutoring" : "test",
    "profileImage" : {
      "profileImageId" : 1,
      "url" : "test",
      "createAt" : "2023-04-25T00:31:16.07595",
      "updateAt" : "2023-04-25T00:31:16.075953"
    },
    "createAt" : "2023-04-25T00:31:16.075958",
    "updateAt" : "2023-04-25T00:31:16.075961",
    "reviews" : [ {
      "reviewId" : 1,
      "professional" : 4,
      "readiness" : 5,
      "explanation" : 5,
      "punctuality" : 4,
      "reviewBody" : "test",
      "tuteeName" : "test",
      "createAt" : "2023-04-25T00:31:16.075941",
      "updateAt" : "2023-04-25T00:31:16.075944"
    }, {
      "reviewId" : 1,
      "professional" : 4,
      "readiness" : 5,
      "explanation" : 5,
      "punctuality" : 4,
      "reviewBody" : "test",
      "tuteeName" : "test",
      "createAt" : "2023-04-25T00:31:16.075931",
      "updateAt" : "2023-04-25T00:31:16.075934"
    } ]
  },
  "pageInfo" : {
    "page" : 1,
    "size" : 5,
    "totalElements" : 7,
    "totalPages" : 2
  }
}
Table 37. response-fields
Path Type Description

data

Object

결과 데이터

data.profileId

Number

프로필 식별자

data.name

String

프로필 이름

data.rate

Number

별점 평균

data.bio

String

한줄 소개

data.school

String

학교 정보

data.wantedStatus

String

공고 상태 NONE/BASIC/REQUEST

data.profileStatus

String

프로필 상태 TUTOR/TUTEE

data.way

String

수업 방식 또는 원하는 방식

data.character

String

성격

data.subjects

Array

과목

data.subjects[].subjectId

Number

과목 식별자

data.subjects[].subjectTitle

String

과목 타이틀

data.subjects[].content

String

과목 수업 내용

data.subjects[].createAt

String

과목 생성 시각

data.subjects[].updateAt

String

과목 최종 수정 시각

data.difference

String

차별점

data.gender

String

성별

data.pay

String

수업료 또는 원하는 수업료

data.wantDate

String

원하는 날짜

data.preTutoring

String

사전 과외 가능 여부

data.profileImage

Object

프로필 이미지 정보

data.profileImage.profileImageId

Number

프로필 이미지 식별자

data.profileImage.url

String

프로필 이미지 URL

data.profileImage.createAt

String

프로필 이미지 생성 시각

data.profileImage.updateAt

String

프로필 이미지 최종 수정 시각

data.createAt

String

프로필 생성 시각

data.updateAt

String

프로필 최종 생성 시각

data.reviews

Array

프로필 리뷰 리스트(튜터일때)

data.reviews[].reviewId

Number

후기 식별자

data.reviews[].professional

Number

전문성 별점

data.reviews[].readiness

Number

준비성 별점

data.reviews[].explanation

Number

수업 설명 별점

data.reviews[].punctuality

Number

시간 준수 별점

data.reviews[].reviewBody

String

후기 내용

data.reviews[].tuteeName

String

후기 작성자(튜티)

data.reviews[].createAt

String

후기 생성 시각

data.reviews[].updateAt

String

후기 최종 수정 시각

pageInfo

Object

요청 페이지 정보

pageInfo.page

Number

요청 페이지 - 0 = 1 페이지

pageInfo.size

Number

페이지당 요청 회원

pageInfo.totalElements

Number

총 멤버

pageInfo.totalPages

Number

생성된 총 페이지

4.4. 프로필 수정

http-request
PATCH /profiles/details/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token Value
Accept: application/json
Content-Length: 454
Host: localhost:8080

{
  "name" : "수포자",
  "bio" : "잘찍습니다",
  "school" : "고고고",
  "way" : "잘합니다",
  "subjects" : [ {
    "subjectId" : 1,
    "subjectTitle" : "test",
    "content" : "test"
  }, {
    "subjectId" : 2,
    "subjectTitle" : "test",
    "content" : "test"
  } ],
  "difference" : "할쑤이ㅅ써",
  "gender" : "남여",
  "character" : "소심함",
  "pay" : "비싸다",
  "wantDate" : "7/7 9 to 9",
  "preTutoring" : "안됨"
}
Table 38. /profiles/details/{profileId}
Parameter Description

profileId

프로필 식별자

Table 39. request-headers
Name Description

Authorization

AccessToken

request-body
{
  "name" : "수포자",
  "bio" : "잘찍습니다",
  "school" : "고고고",
  "way" : "잘합니다",
  "subjects" : [ {
    "subjectId" : 1,
    "subjectTitle" : "test",
    "content" : "test"
  }, {
    "subjectId" : 2,
    "subjectTitle" : "test",
    "content" : "test"
  } ],
  "difference" : "할쑤이ㅅ써",
  "gender" : "남여",
  "character" : "소심함",
  "pay" : "비싸다",
  "wantDate" : "7/7 9 to 9",
  "preTutoring" : "안됨"
}
Table 40. request-fields
Path Type Description

name

String

프로필 이름

bio

String

한줄 소개

school

String

학교 정보

way

String

원하는 수업방식 또는 수업 방식

subjects

Array

과목 리스트

subjects[].subjectId

Number

과목 식별자

subjects[].subjectTitle

String

과목 타이틀

subjects[].content

String

과목 수업 내용

difference

String

차별성 - 튜터

gender

String

성별

character

String

성격

pay

String

수업료 또는 원하는 수업료

wantDate

String

원하는 시간

preTutoring

String

사전 과외 여부

http-response
HTTP/1.1 200 OK
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 1705

{
  "data" : {
    "profileId" : 1,
    "name" : "test",
    "rate" : 3.5,
    "bio" : "test",
    "school" : "test",
    "wantedStatus" : "REQUEST",
    "profileStatus" : "TUTOR",
    "way" : "test",
    "character" : "test",
    "subjects" : [ {
      "subjectId" : 1,
      "subjectTitle" : "test",
      "content" : "test",
      "createAt" : "2023-04-25T00:31:16.357832",
      "updateAt" : "2023-04-25T00:31:16.357836"
    }, {
      "subjectId" : 1,
      "subjectTitle" : "test",
      "content" : "test",
      "createAt" : "2023-04-25T00:31:16.357807",
      "updateAt" : "2023-04-25T00:31:16.357823"
    } ],
    "difference" : "test",
    "gender" : "test",
    "pay" : "test",
    "wantDate" : "test",
    "preTutoring" : "test",
    "profileImage" : {
      "profileImageId" : 1,
      "url" : "test",
      "createAt" : "2023-04-25T00:31:16.357867",
      "updateAt" : "2023-04-25T00:31:16.35787"
    },
    "createAt" : "2023-04-25T00:31:16.358039",
    "updateAt" : "2023-04-25T00:31:16.358051",
    "reviews" : [ {
      "reviewId" : 1,
      "professional" : 4,
      "readiness" : 5,
      "explanation" : 5,
      "punctuality" : 4,
      "reviewBody" : "test",
      "tuteeName" : "test",
      "createAt" : "2023-04-25T00:31:16.357858",
      "updateAt" : "2023-04-25T00:31:16.357861"
    }, {
      "reviewId" : 1,
      "professional" : 4,
      "readiness" : 5,
      "explanation" : 5,
      "punctuality" : 4,
      "reviewBody" : "test",
      "tuteeName" : "test",
      "createAt" : "2023-04-25T00:31:16.357848",
      "updateAt" : "2023-04-25T00:31:16.357851"
    } ]
  },
  "pageInfo" : {
    "page" : 1,
    "size" : 5,
    "totalElements" : 7,
    "totalPages" : 2
  }
}
response-body
{
  "data" : {
    "profileId" : 1,
    "name" : "test",
    "rate" : 3.5,
    "bio" : "test",
    "school" : "test",
    "wantedStatus" : "REQUEST",
    "profileStatus" : "TUTOR",
    "way" : "test",
    "character" : "test",
    "subjects" : [ {
      "subjectId" : 1,
      "subjectTitle" : "test",
      "content" : "test",
      "createAt" : "2023-04-25T00:31:16.357832",
      "updateAt" : "2023-04-25T00:31:16.357836"
    }, {
      "subjectId" : 1,
      "subjectTitle" : "test",
      "content" : "test",
      "createAt" : "2023-04-25T00:31:16.357807",
      "updateAt" : "2023-04-25T00:31:16.357823"
    } ],
    "difference" : "test",
    "gender" : "test",
    "pay" : "test",
    "wantDate" : "test",
    "preTutoring" : "test",
    "profileImage" : {
      "profileImageId" : 1,
      "url" : "test",
      "createAt" : "2023-04-25T00:31:16.357867",
      "updateAt" : "2023-04-25T00:31:16.35787"
    },
    "createAt" : "2023-04-25T00:31:16.358039",
    "updateAt" : "2023-04-25T00:31:16.358051",
    "reviews" : [ {
      "reviewId" : 1,
      "professional" : 4,
      "readiness" : 5,
      "explanation" : 5,
      "punctuality" : 4,
      "reviewBody" : "test",
      "tuteeName" : "test",
      "createAt" : "2023-04-25T00:31:16.357858",
      "updateAt" : "2023-04-25T00:31:16.357861"
    }, {
      "reviewId" : 1,
      "professional" : 4,
      "readiness" : 5,
      "explanation" : 5,
      "punctuality" : 4,
      "reviewBody" : "test",
      "tuteeName" : "test",
      "createAt" : "2023-04-25T00:31:16.357848",
      "updateAt" : "2023-04-25T00:31:16.357851"
    } ]
  },
  "pageInfo" : {
    "page" : 1,
    "size" : 5,
    "totalElements" : 7,
    "totalPages" : 2
  }
}
Table 41. response-fields
Path Type Description

data

Object

결과 데이터

data.profileId

Number

프로필 식별자

data.name

String

프로필 이름

data.rate

Number

별점 평균

data.bio

String

한줄 소개

data.school

String

학교 정보

data.wantedStatus

String

공고 상태 NONE/BASIC/REQUEST

data.profileStatus

String

프로필 상태 TUTOR/TUTEE

data.way

String

수업 방식 또는 원하는 방식

data.character

String

성격

data.subjects

Array

과목

data.subjects[].subjectId

Number

과목 식별자

data.subjects[].subjectTitle

String

과목 타이틀

data.subjects[].content

String

과목 수업 내용

data.subjects[].createAt

String

과목 생성 시각

data.subjects[].updateAt

String

과목 최종 수정 시각

data.difference

String

차별점

data.gender

String

성별

data.pay

String

수업료 또는 원하는 수업료

data.wantDate

String

원하는 날짜

data.preTutoring

String

사전 과외 가능 여부

data.profileImage

Object

프로필 이미지 정보

data.profileImage.profileImageId

Number

프로필 이미지 식별자

data.profileImage.url

String

프로필 이미지 URL

data.profileImage.createAt

String

프로필 이미지 생성 시각

data.profileImage.updateAt

String

프로필 이미지 최종 수정 시각

data.createAt

String

프로필 생성 시각

data.updateAt

String

프로필 최종 생성 시각

data.reviews

Array

프로필 리뷰 리스트(튜터일때)

data.reviews[].reviewId

Number

후기 식별자

data.reviews[].professional

Number

전문성 별점

data.reviews[].readiness

Number

준비성 별점

data.reviews[].explanation

Number

수업 설명 별점

data.reviews[].punctuality

Number

시간 준수 별점

data.reviews[].reviewBody

String

후기 내용

data.reviews[].tuteeName

String

후기 작성자(튜티)

data.reviews[].createAt

String

후기 생성 시각

data.reviews[].updateAt

String

후기 최종 수정 시각

pageInfo

Object

요청 페이지 정보

pageInfo.page

Number

요청 페이지 - 0 = 1 페이지

pageInfo.size

Number

페이지당 요청 회원

pageInfo.totalElements

Number

총 멤버

pageInfo.totalPages

Number

생성된 총 페이지

4.5. 프로필 공고 상태 수정

http-request
PATCH /profiles/details/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token Value
Accept: application/json
Content-Length: 454
Host: localhost:8080

{
  "name" : "수포자",
  "bio" : "잘찍습니다",
  "school" : "고고고",
  "way" : "잘합니다",
  "subjects" : [ {
    "subjectId" : 1,
    "subjectTitle" : "test",
    "content" : "test"
  }, {
    "subjectId" : 2,
    "subjectTitle" : "test",
    "content" : "test"
  } ],
  "difference" : "할쑤이ㅅ써",
  "gender" : "남여",
  "character" : "소심함",
  "pay" : "비싸다",
  "wantDate" : "7/7 9 to 9",
  "preTutoring" : "안됨"
}
Table 42. /profiles/details/{profileId}
Parameter Description

profileId

프로필 식별자

Table 43. request-headers
Name Description

Authorization

AccessToken

request-body
{
  "name" : "수포자",
  "bio" : "잘찍습니다",
  "school" : "고고고",
  "way" : "잘합니다",
  "subjects" : [ {
    "subjectId" : 1,
    "subjectTitle" : "test",
    "content" : "test"
  }, {
    "subjectId" : 2,
    "subjectTitle" : "test",
    "content" : "test"
  } ],
  "difference" : "할쑤이ㅅ써",
  "gender" : "남여",
  "character" : "소심함",
  "pay" : "비싸다",
  "wantDate" : "7/7 9 to 9",
  "preTutoring" : "안됨"
}
Table 44. request-fields
Path Type Description

name

String

프로필 이름

bio

String

한줄 소개

school

String

학교 정보

way

String

원하는 수업방식 또는 수업 방식

subjects

Array

과목 리스트

subjects[].subjectId

Number

과목 식별자

subjects[].subjectTitle

String

과목 타이틀

subjects[].content

String

과목 수업 내용

difference

String

차별성 - 튜터

gender

String

성별

character

String

성격

pay

String

수업료 또는 원하는 수업료

wantDate

String

원하는 시간

preTutoring

String

사전 과외 여부

http-response
HTTP/1.1 200 OK
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 1705

{
  "data" : {
    "profileId" : 1,
    "name" : "test",
    "rate" : 3.5,
    "bio" : "test",
    "school" : "test",
    "wantedStatus" : "REQUEST",
    "profileStatus" : "TUTOR",
    "way" : "test",
    "character" : "test",
    "subjects" : [ {
      "subjectId" : 1,
      "subjectTitle" : "test",
      "content" : "test",
      "createAt" : "2023-04-25T00:31:16.357832",
      "updateAt" : "2023-04-25T00:31:16.357836"
    }, {
      "subjectId" : 1,
      "subjectTitle" : "test",
      "content" : "test",
      "createAt" : "2023-04-25T00:31:16.357807",
      "updateAt" : "2023-04-25T00:31:16.357823"
    } ],
    "difference" : "test",
    "gender" : "test",
    "pay" : "test",
    "wantDate" : "test",
    "preTutoring" : "test",
    "profileImage" : {
      "profileImageId" : 1,
      "url" : "test",
      "createAt" : "2023-04-25T00:31:16.357867",
      "updateAt" : "2023-04-25T00:31:16.35787"
    },
    "createAt" : "2023-04-25T00:31:16.358039",
    "updateAt" : "2023-04-25T00:31:16.358051",
    "reviews" : [ {
      "reviewId" : 1,
      "professional" : 4,
      "readiness" : 5,
      "explanation" : 5,
      "punctuality" : 4,
      "reviewBody" : "test",
      "tuteeName" : "test",
      "createAt" : "2023-04-25T00:31:16.357858",
      "updateAt" : "2023-04-25T00:31:16.357861"
    }, {
      "reviewId" : 1,
      "professional" : 4,
      "readiness" : 5,
      "explanation" : 5,
      "punctuality" : 4,
      "reviewBody" : "test",
      "tuteeName" : "test",
      "createAt" : "2023-04-25T00:31:16.357848",
      "updateAt" : "2023-04-25T00:31:16.357851"
    } ]
  },
  "pageInfo" : {
    "page" : 1,
    "size" : 5,
    "totalElements" : 7,
    "totalPages" : 2
  }
}
response-body
{
  "data" : {
    "profileId" : 1,
    "name" : "test",
    "rate" : 3.5,
    "bio" : "test",
    "school" : "test",
    "wantedStatus" : "REQUEST",
    "profileStatus" : "TUTOR",
    "way" : "test",
    "character" : "test",
    "subjects" : [ {
      "subjectId" : 1,
      "subjectTitle" : "test",
      "content" : "test",
      "createAt" : "2023-04-25T00:31:16.357832",
      "updateAt" : "2023-04-25T00:31:16.357836"
    }, {
      "subjectId" : 1,
      "subjectTitle" : "test",
      "content" : "test",
      "createAt" : "2023-04-25T00:31:16.357807",
      "updateAt" : "2023-04-25T00:31:16.357823"
    } ],
    "difference" : "test",
    "gender" : "test",
    "pay" : "test",
    "wantDate" : "test",
    "preTutoring" : "test",
    "profileImage" : {
      "profileImageId" : 1,
      "url" : "test",
      "createAt" : "2023-04-25T00:31:16.357867",
      "updateAt" : "2023-04-25T00:31:16.35787"
    },
    "createAt" : "2023-04-25T00:31:16.358039",
    "updateAt" : "2023-04-25T00:31:16.358051",
    "reviews" : [ {
      "reviewId" : 1,
      "professional" : 4,
      "readiness" : 5,
      "explanation" : 5,
      "punctuality" : 4,
      "reviewBody" : "test",
      "tuteeName" : "test",
      "createAt" : "2023-04-25T00:31:16.357858",
      "updateAt" : "2023-04-25T00:31:16.357861"
    }, {
      "reviewId" : 1,
      "professional" : 4,
      "readiness" : 5,
      "explanation" : 5,
      "punctuality" : 4,
      "reviewBody" : "test",
      "tuteeName" : "test",
      "createAt" : "2023-04-25T00:31:16.357848",
      "updateAt" : "2023-04-25T00:31:16.357851"
    } ]
  },
  "pageInfo" : {
    "page" : 1,
    "size" : 5,
    "totalElements" : 7,
    "totalPages" : 2
  }
}
Table 45. response-fields
Path Type Description

data

Object

결과 데이터

data.profileId

Number

프로필 식별자

data.name

String

프로필 이름

data.rate

Number

별점 평균

data.bio

String

한줄 소개

data.school

String

학교 정보

data.wantedStatus

String

공고 상태 NONE/BASIC/REQUEST

data.profileStatus

String

프로필 상태 TUTOR/TUTEE

data.way

String

수업 방식 또는 원하는 방식

data.character

String

성격

data.subjects

Array

과목

data.subjects[].subjectId

Number

과목 식별자

data.subjects[].subjectTitle

String

과목 타이틀

data.subjects[].content

String

과목 수업 내용

data.subjects[].createAt

String

과목 생성 시각

data.subjects[].updateAt

String

과목 최종 수정 시각

data.difference

String

차별점

data.gender

String

성별

data.pay

String

수업료 또는 원하는 수업료

data.wantDate

String

원하는 날짜

data.preTutoring

String

사전 과외 가능 여부

data.profileImage

Object

프로필 이미지 정보

data.profileImage.profileImageId

Number

프로필 이미지 식별자

data.profileImage.url

String

프로필 이미지 URL

data.profileImage.createAt

String

프로필 이미지 생성 시각

data.profileImage.updateAt

String

프로필 이미지 최종 수정 시각

data.createAt

String

프로필 생성 시각

data.updateAt

String

프로필 최종 생성 시각

data.reviews

Array

프로필 리뷰 리스트(튜터일때)

data.reviews[].reviewId

Number

후기 식별자

data.reviews[].professional

Number

전문성 별점

data.reviews[].readiness

Number

준비성 별점

data.reviews[].explanation

Number

수업 설명 별점

data.reviews[].punctuality

Number

시간 준수 별점

data.reviews[].reviewBody

String

후기 내용

data.reviews[].tuteeName

String

후기 작성자(튜티)

data.reviews[].createAt

String

후기 생성 시각

data.reviews[].updateAt

String

후기 최종 수정 시각

pageInfo

Object

요청 페이지 정보

pageInfo.page

Number

요청 페이지 - 0 = 1 페이지

pageInfo.size

Number

페이지당 요청 회원

pageInfo.totalElements

Number

총 멤버

pageInfo.totalPages

Number

생성된 총 페이지

4.6. 프로필 삭제

http-request
DELETE /profiles/details/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token Value
Accept: application/json
Host: localhost:8080
Table 46. /profiles/details/{profileId}
Parameter Description

profileId

프로필 식별자

Table 47. request-headers
Name Description

Authorization

AccessToken

http-response
HTTP/1.1 204 No Content
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN

5. Tutoring

5.1. 특정 프로필의 과외 생성

http-request
POST /tutoring/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token Value
Accept: application/json
Content-Length: 87
Host: localhost:8080

{
  "tutorId" : 1,
  "tuteeId" : 2,
  "tutoringTitle" : "test",
  "messageRoomId" : 1
}
Table 48. /tutoring/{profileId}
Parameter Description

profileId

프로필 식별자

Table 49. request-headers
Name Description

Authorization

AccessToken

request-body
{
  "tutorId" : 1,
  "tuteeId" : 2,
  "tutoringTitle" : "test",
  "messageRoomId" : 1
}
http-response
HTTP/1.1 201 Created
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 290

{
  "data" : {
    "tutoringId" : 1,
    "tutorName" : "강호수",
    "tuteeName" : "김다은",
    "tutoringTitle" : "수학 뿌셔 과학 뿌셔",
    "tutoringStatus" : "TUTEE_WAITING",
    "createAt" : "2023-04-25T00:31:18.341597",
    "updateAt" : "2023-04-25T00:31:18.341602"
  }
}
response-body
{
  "data" : {
    "tutoringId" : 1,
    "tutorName" : "강호수",
    "tuteeName" : "김다은",
    "tutoringTitle" : "수학 뿌셔 과학 뿌셔",
    "tutoringStatus" : "TUTEE_WAITING",
    "createAt" : "2023-04-25T00:31:18.341597",
    "updateAt" : "2023-04-25T00:31:18.341602"
  }
}
Table 50. response-fields
Path Type Description

data

Object

결과 데이터

data.tutoringId

Number

과외 식별자

data.tutorName

String

튜터 이름

data.tuteeName

String

튜티 이름

data.tutoringTitle

String

과외 타이틀

data.tutoringStatus

String

과외 상태

data.createAt

String

생성 시각

data.updateAt

String

최종 수정 시각

5.2. 특정 프로필 전체 과외 리스트 조회

http-request
GET /tutoring/1?page=0 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token Value
Accept: application/json
Host: localhost:8080
Table 51. /tutoring/{profileId}
Parameter Description

profileId

프로필 식별자

Table 52. request-headers
Name Description

Authorization

AccessToken

Table 53. request-parameters
Parameter Description

page

요청 페이지 정보

request-body
http-response
HTTP/1.1 200 OK
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 673

{
  "data" : [ {
    "tutoringId" : 1,
    "tutorName" : "강호수",
    "tuteeName" : "김다은",
    "tutoringTitle" : "수학 뿌셔 과학 뿌셔",
    "tutoringStatus" : "TUTEE_WAITING",
    "createAt" : "2023-04-25T00:31:18.370268",
    "updateAt" : "2023-04-25T00:31:18.370272"
  }, {
    "tutoringId" : 1,
    "tutorName" : "강호수",
    "tuteeName" : "김다은",
    "tutoringTitle" : "수학 뿌셔 과학 뿌셔",
    "tutoringStatus" : "TUTEE_WAITING",
    "createAt" : "2023-04-25T00:31:18.370268",
    "updateAt" : "2023-04-25T00:31:18.370272"
  } ],
  "pageInfo" : {
    "page" : 1,
    "size" : 10,
    "totalElements" : 12,
    "totalPages" : 2
  }
}
response-body
{
  "data" : [ {
    "tutoringId" : 1,
    "tutorName" : "강호수",
    "tuteeName" : "김다은",
    "tutoringTitle" : "수학 뿌셔 과학 뿌셔",
    "tutoringStatus" : "TUTEE_WAITING",
    "createAt" : "2023-04-25T00:31:18.370268",
    "updateAt" : "2023-04-25T00:31:18.370272"
  }, {
    "tutoringId" : 1,
    "tutorName" : "강호수",
    "tuteeName" : "김다은",
    "tutoringTitle" : "수학 뿌셔 과학 뿌셔",
    "tutoringStatus" : "TUTEE_WAITING",
    "createAt" : "2023-04-25T00:31:18.370268",
    "updateAt" : "2023-04-25T00:31:18.370272"
  } ],
  "pageInfo" : {
    "page" : 1,
    "size" : 10,
    "totalElements" : 12,
    "totalPages" : 2
  }
}
Table 54. response-fields
Path Type Description

data

Array

결과 데이터

data[].tutoringId

Number

과외 식별자

data[].tutorName

String

튜터 이름

data[].tuteeName

String

튜티 이름

data[].tutoringTitle

String

과외 타이틀

data[].tutoringStatus

String

과외 상태

data[].createAt

String

생성 시각

data[].updateAt

String

최종 수정 시각

pageInfo

Object

요청 페이지 정보

pageInfo.page

Number

요청 페이지 - 0 = 1 페이지

pageInfo.size

Number

페이지당 요청 회원

pageInfo.totalElements

Number

총 멤버

pageInfo.totalPages

Number

생성된 총 페이지

5.3. 특정 과외 매칭 요청

http-request
PATCH /tutoring/details/1/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token Value
Accept: application/json
Host: localhost:8080
Table 55. /tutoring/details/{profileId}/{tutoringId}
Parameter Description

profileId

프로필 식별자

tutoringId

과외 식별자

Table 56. request-headers
Name Description

Authorization

AccessToken

request-body
http-response
HTTP/1.1 200 OK
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 1344

{
  "data" : {
    "tutoringId" : 1,
    "tutoringTitle" : "열심히 가르칩니다! 강호수입니다!",
    "tutoringStatus" : "TUTOR_WAITING",
    "latestNoticeId" : 1,
    "latestNoticeBody" : "공지",
    "tuteeId" : 1,
    "tuteeName" : "어때요",
    "tutorId" : 1,
    "tutorName" : "어때요",
    "reviewId" : 1,
    "createAt" : "2023-04-25T00:31:18.191396",
    "updateAt" : "2023-04-25T00:31:18.191399",
    "dateNotices" : [ {
      "dateNoticeId" : 1,
      "dateNoticeTitle" : "TestTitle",
      "startTime" : "2023-04-25T00:31:18.190846",
      "endTime" : "2023-04-25T00:31:18.190868",
      "homeworkCount" : 3,
      "finishHomeworkCount" : 0,
      "noticeStatus" : "NOTICE"
    }, {
      "dateNoticeId" : 1,
      "dateNoticeTitle" : "TestTitle",
      "startTime" : "2023-04-25T00:31:18.190936",
      "endTime" : "2023-04-25T00:31:18.190940",
      "homeworkCount" : 3,
      "finishHomeworkCount" : 0,
      "noticeStatus" : "NOTICE"
    }, {
      "dateNoticeId" : 1,
      "dateNoticeTitle" : "TestTitle",
      "startTime" : "2023-04-25T00:31:18.190947",
      "endTime" : "2023-04-25T00:31:18.190950",
      "homeworkCount" : 3,
      "finishHomeworkCount" : 0,
      "noticeStatus" : "NOTICE"
    } ]
  },
  "pageInfo" : {
    "page" : 0,
    "size" : 5,
    "totalElements" : 3,
    "totalPages" : 1
  }
}
response-body
{
  "data" : {
    "tutoringId" : 1,
    "tutoringTitle" : "열심히 가르칩니다! 강호수입니다!",
    "tutoringStatus" : "TUTOR_WAITING",
    "latestNoticeId" : 1,
    "latestNoticeBody" : "공지",
    "tuteeId" : 1,
    "tuteeName" : "어때요",
    "tutorId" : 1,
    "tutorName" : "어때요",
    "reviewId" : 1,
    "createAt" : "2023-04-25T00:31:18.191396",
    "updateAt" : "2023-04-25T00:31:18.191399",
    "dateNotices" : [ {
      "dateNoticeId" : 1,
      "dateNoticeTitle" : "TestTitle",
      "startTime" : "2023-04-25T00:31:18.190846",
      "endTime" : "2023-04-25T00:31:18.190868",
      "homeworkCount" : 3,
      "finishHomeworkCount" : 0,
      "noticeStatus" : "NOTICE"
    }, {
      "dateNoticeId" : 1,
      "dateNoticeTitle" : "TestTitle",
      "startTime" : "2023-04-25T00:31:18.190936",
      "endTime" : "2023-04-25T00:31:18.190940",
      "homeworkCount" : 3,
      "finishHomeworkCount" : 0,
      "noticeStatus" : "NOTICE"
    }, {
      "dateNoticeId" : 1,
      "dateNoticeTitle" : "TestTitle",
      "startTime" : "2023-04-25T00:31:18.190947",
      "endTime" : "2023-04-25T00:31:18.190950",
      "homeworkCount" : 3,
      "finishHomeworkCount" : 0,
      "noticeStatus" : "NOTICE"
    } ]
  },
  "pageInfo" : {
    "page" : 0,
    "size" : 5,
    "totalElements" : 3,
    "totalPages" : 1
  }
}
Table 57. response-fields
Path Type Description

data

Object

결과 데이터

data.tutoringId

Number

과외 식별자

data.tutoringTitle

String

튜터 타이틀

data.tutoringStatus

String

과외 상태 PROGRESS/WAIT_FINISH/TUTOR_DELETE/TUTEE_DELETE

data.latestNoticeId

Number

마지막 공지 식별자

data.latestNoticeBody

String

마지막 공지 내용

data.tuteeId

Number

튜티 식별자

data.tuteeName

String

튜티 이름

data.tutorId

Number

튜터 식별자

data.tutorName

String

튜터 이름

data.reviewId

Number

과외에 대한 후기 식별자

data.createAt

String

생성 시각

data.updateAt

String

최종 수정 시각

data.dateNotices

Array

일지 목록

data.dateNotices[].dateNoticeId

Number

일지 식별자

data.dateNotices[].dateNoticeTitle

String

일지 타이틀

data.dateNotices[].startTime

String

시작 시간

data.dateNotices[].endTime

String

종료 시간

data.dateNotices[].homeworkCount

Number

과제 갯수

data.dateNotices[].finishHomeworkCount

Number

종료된 과제 갯수

data.dateNotices[].noticeStatus

String

공지 등록 여부

pageInfo

Object

요청 페이지 정보

pageInfo.page

Number

요청 페이지 - 0 = 1 페이지

pageInfo.size

Number

페이지당 요청 회원

pageInfo.totalElements

Number

총 멤버

pageInfo.totalPages

Number

생성된 총 페이지

5.4. 특정 과외 상세 조회

http-request
GET /tutoring/details/1/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token Value
Accept: application/json
Host: localhost:8080
Table 58. /tutoring/details/{profileId}/{tutoringId}
Parameter Description

profileId

프로필 식별자

tutoringId

과외 식별자

Table 59. request-headers
Name Description

Authorization

AccessToken

request-body
http-response
HTTP/1.1 200 OK
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 1344

{
  "data" : {
    "tutoringId" : 1,
    "tutoringTitle" : "열심히 가르칩니다! 강호수입니다!",
    "tutoringStatus" : "TUTOR_WAITING",
    "latestNoticeId" : 1,
    "latestNoticeBody" : "공지",
    "tuteeId" : 1,
    "tuteeName" : "어때요",
    "tutorId" : 1,
    "tutorName" : "어때요",
    "reviewId" : 1,
    "createAt" : "2023-04-25T00:31:18.255464",
    "updateAt" : "2023-04-25T00:31:18.255465",
    "dateNotices" : [ {
      "dateNoticeId" : 1,
      "dateNoticeTitle" : "TestTitle",
      "startTime" : "2023-04-25T00:31:18.255400",
      "endTime" : "2023-04-25T00:31:18.255414",
      "homeworkCount" : 3,
      "finishHomeworkCount" : 0,
      "noticeStatus" : "NOTICE"
    }, {
      "dateNoticeId" : 1,
      "dateNoticeTitle" : "TestTitle",
      "startTime" : "2023-04-25T00:31:18.255426",
      "endTime" : "2023-04-25T00:31:18.255429",
      "homeworkCount" : 3,
      "finishHomeworkCount" : 0,
      "noticeStatus" : "NOTICE"
    }, {
      "dateNoticeId" : 1,
      "dateNoticeTitle" : "TestTitle",
      "startTime" : "2023-04-25T00:31:18.255436",
      "endTime" : "2023-04-25T00:31:18.255438",
      "homeworkCount" : 3,
      "finishHomeworkCount" : 0,
      "noticeStatus" : "NOTICE"
    } ]
  },
  "pageInfo" : {
    "page" : 0,
    "size" : 5,
    "totalElements" : 3,
    "totalPages" : 1
  }
}
response-body
{
  "data" : {
    "tutoringId" : 1,
    "tutoringTitle" : "열심히 가르칩니다! 강호수입니다!",
    "tutoringStatus" : "TUTOR_WAITING",
    "latestNoticeId" : 1,
    "latestNoticeBody" : "공지",
    "tuteeId" : 1,
    "tuteeName" : "어때요",
    "tutorId" : 1,
    "tutorName" : "어때요",
    "reviewId" : 1,
    "createAt" : "2023-04-25T00:31:18.255464",
    "updateAt" : "2023-04-25T00:31:18.255465",
    "dateNotices" : [ {
      "dateNoticeId" : 1,
      "dateNoticeTitle" : "TestTitle",
      "startTime" : "2023-04-25T00:31:18.255400",
      "endTime" : "2023-04-25T00:31:18.255414",
      "homeworkCount" : 3,
      "finishHomeworkCount" : 0,
      "noticeStatus" : "NOTICE"
    }, {
      "dateNoticeId" : 1,
      "dateNoticeTitle" : "TestTitle",
      "startTime" : "2023-04-25T00:31:18.255426",
      "endTime" : "2023-04-25T00:31:18.255429",
      "homeworkCount" : 3,
      "finishHomeworkCount" : 0,
      "noticeStatus" : "NOTICE"
    }, {
      "dateNoticeId" : 1,
      "dateNoticeTitle" : "TestTitle",
      "startTime" : "2023-04-25T00:31:18.255436",
      "endTime" : "2023-04-25T00:31:18.255438",
      "homeworkCount" : 3,
      "finishHomeworkCount" : 0,
      "noticeStatus" : "NOTICE"
    } ]
  },
  "pageInfo" : {
    "page" : 0,
    "size" : 5,
    "totalElements" : 3,
    "totalPages" : 1
  }
}
Table 60. response-fields
Path Type Description

data

Object

결과 데이터

data.tutoringId

Number

과외 식별자

data.tutoringTitle

String

튜터 타이틀

data.tutoringStatus

String

과외 상태 TUTEE_WAITING/TUTOR_WAITING/PROGRESS/UNCHECK/WAIT_FINISH/FINISH

data.latestNoticeId

Number

마지막 공지 식별자

data.latestNoticeBody

String

마지막 공지 내용

data.tuteeId

Number

튜티 식별자

data.tuteeName

String

튜티 이름

data.tutorId

Number

튜터 식별자

data.tutorName

String

튜터 이름

data.reviewId

Number

과외에 대한 후기 식별자

data.createAt

String

생성 시각

data.updateAt

String

최종 수정 시각

data.dateNotices

Array

일지 목록

data.dateNotices[].dateNoticeId

Number

일지 식별자

data.dateNotices[].dateNoticeTitle

String

일지 타이틀

data.dateNotices[].startTime

String

시작 시간

data.dateNotices[].endTime

String

종료 시간

data.dateNotices[].homeworkCount

Number

과제 갯수

data.dateNotices[].finishHomeworkCount

Number

종료된 과제 갯수

data.dateNotices[].noticeStatus

String

공지 등록 여부

pageInfo

Object

요청 페이지 정보

pageInfo.page

Number

요청 페이지 - 0 = 1 페이지

pageInfo.size

Number

페이지당 요청 회원

pageInfo.totalElements

Number

총 멤버

pageInfo.totalPages

Number

생성된 총 페이지

5.5. 특정 과외 상태 및 타이틀 수정

http-request
PATCH /tutoring/details/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token Value
Accept: application/json
Content-Length: 68
Host: localhost:8080

{
  "tutoringTitle" : "타이틀",
  "tutoringStatus" : "PROGRESS"
}
Table 61. /tutoring/details/{tutoringId}
Parameter Description

tutoringId

과외 식별자

Table 62. request-headers
Name Description

Authorization

AccessToken

request-body
{
  "tutoringTitle" : "타이틀",
  "tutoringStatus" : "PROGRESS"
}
Table 63. request-fields
Path Type Description

tutoringTitle

String

과외 타이틀

tutoringStatus

String

과외 상태 FINISH

http-response
HTTP/1.1 200 OK
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 1344

{
  "data" : {
    "tutoringId" : 1,
    "tutoringTitle" : "열심히 가르칩니다! 강호수입니다!",
    "tutoringStatus" : "TUTOR_WAITING",
    "latestNoticeId" : 1,
    "latestNoticeBody" : "공지",
    "tuteeId" : 1,
    "tuteeName" : "어때요",
    "tutorId" : 1,
    "tutorName" : "어때요",
    "reviewId" : 1,
    "createAt" : "2023-04-25T00:31:18.485527",
    "updateAt" : "2023-04-25T00:31:18.485527",
    "dateNotices" : [ {
      "dateNoticeId" : 1,
      "dateNoticeTitle" : "TestTitle",
      "startTime" : "2023-04-25T00:31:18.485465",
      "endTime" : "2023-04-25T00:31:18.485478",
      "homeworkCount" : 3,
      "finishHomeworkCount" : 0,
      "noticeStatus" : "NOTICE"
    }, {
      "dateNoticeId" : 1,
      "dateNoticeTitle" : "TestTitle",
      "startTime" : "2023-04-25T00:31:18.485489",
      "endTime" : "2023-04-25T00:31:18.485492",
      "homeworkCount" : 3,
      "finishHomeworkCount" : 0,
      "noticeStatus" : "NOTICE"
    }, {
      "dateNoticeId" : 1,
      "dateNoticeTitle" : "TestTitle",
      "startTime" : "2023-04-25T00:31:18.485499",
      "endTime" : "2023-04-25T00:31:18.485501",
      "homeworkCount" : 3,
      "finishHomeworkCount" : 0,
      "noticeStatus" : "NOTICE"
    } ]
  },
  "pageInfo" : {
    "page" : 0,
    "size" : 5,
    "totalElements" : 3,
    "totalPages" : 1
  }
}
response-body
{
  "data" : {
    "tutoringId" : 1,
    "tutoringTitle" : "열심히 가르칩니다! 강호수입니다!",
    "tutoringStatus" : "TUTOR_WAITING",
    "latestNoticeId" : 1,
    "latestNoticeBody" : "공지",
    "tuteeId" : 1,
    "tuteeName" : "어때요",
    "tutorId" : 1,
    "tutorName" : "어때요",
    "reviewId" : 1,
    "createAt" : "2023-04-25T00:31:18.485527",
    "updateAt" : "2023-04-25T00:31:18.485527",
    "dateNotices" : [ {
      "dateNoticeId" : 1,
      "dateNoticeTitle" : "TestTitle",
      "startTime" : "2023-04-25T00:31:18.485465",
      "endTime" : "2023-04-25T00:31:18.485478",
      "homeworkCount" : 3,
      "finishHomeworkCount" : 0,
      "noticeStatus" : "NOTICE"
    }, {
      "dateNoticeId" : 1,
      "dateNoticeTitle" : "TestTitle",
      "startTime" : "2023-04-25T00:31:18.485489",
      "endTime" : "2023-04-25T00:31:18.485492",
      "homeworkCount" : 3,
      "finishHomeworkCount" : 0,
      "noticeStatus" : "NOTICE"
    }, {
      "dateNoticeId" : 1,
      "dateNoticeTitle" : "TestTitle",
      "startTime" : "2023-04-25T00:31:18.485499",
      "endTime" : "2023-04-25T00:31:18.485501",
      "homeworkCount" : 3,
      "finishHomeworkCount" : 0,
      "noticeStatus" : "NOTICE"
    } ]
  },
  "pageInfo" : {
    "page" : 0,
    "size" : 5,
    "totalElements" : 3,
    "totalPages" : 1
  }
}
Table 64. response-fields
Path Type Description

data

Object

결과 데이터

data.tutoringId

Number

과외 식별자

data.tutoringTitle

String

튜터 타이틀

data.tutoringStatus

String

과외 상태 TUTEE_WAITING/TUTOR_WAITING/PROGRESS/UNCHECK/WAIT_FINISH/FINISH

data.latestNoticeId

Number

마지막 공지 식별자

data.latestNoticeBody

String

마지막 공지 내용

data.tuteeId

Number

튜티 식별자

data.tuteeName

String

튜티 이름

data.tutorId

Number

튜터 식별자

data.tutorName

String

튜터 이름

data.reviewId

Number

과외에 대한 후기 식별자

data.createAt

String

생성 시각

data.updateAt

String

최종 수정 시각

data.dateNotices

Array

일지 목록

data.dateNotices[].dateNoticeId

Number

일지 식별자

data.dateNotices[].dateNoticeTitle

String

일지 타이틀

data.dateNotices[].startTime

String

시작 시간

data.dateNotices[].endTime

String

종료 시간

data.dateNotices[].homeworkCount

Number

과제 갯수

data.dateNotices[].finishHomeworkCount

Number

종료된 과제 갯수

data.dateNotices[].noticeStatus

String

공지 등록 여부

pageInfo

Object

요청 페이지 정보

pageInfo.page

Number

요청 페이지 - 0 = 1 페이지

pageInfo.size

Number

페이지당 요청 회원

pageInfo.totalElements

Number

총 멤버

pageInfo.totalPages

Number

생성된 총 페이지

5.6. 특정 과외 삭제

http-request
DELETE /tutoring/details/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token Value
Accept: application/json
Host: localhost:8080
Table 65. /tutoring/details/{tutoringId}
Parameter Description

tutoringId

과외 식별자

Table 66. request-headers
Name Description

Authorization

AccessToken

http-response
HTTP/1.1 204 No Content
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN

5.7. 일지 생성

http-request
POST /tutoring/date-notice/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token Value
Accept: application/json
Content-Length: 264
Host: localhost:8080

{
  "dateNoticeTitle" : "test",
  "startTime" : "2023-04-25T00:31:18.291114",
  "endTime" : "2023-04-25T00:31:18.291141",
  "scheduleBody" : "test",
  "noticeBody" : "test",
  "homeworks" : [ {
    "homeworkBody" : "test",
    "homeworkStatus" : "PROGRESS"
  } ]
}
Table 67. /tutoring/date-notice/{tutoringId}
Parameter Description

tutoringId

과외 식별자

Table 68. request-headers
Name Description

Authorization

AccessToken

request-body
{
  "dateNoticeTitle" : "test",
  "startTime" : "2023-04-25T00:31:18.291114",
  "endTime" : "2023-04-25T00:31:18.291141",
  "scheduleBody" : "test",
  "noticeBody" : "test",
  "homeworks" : [ {
    "homeworkBody" : "test",
    "homeworkStatus" : "PROGRESS"
  } ]
}
Table 69. request-fields
Path Type Description

dateNoticeTitle

String

일지 타이틀

startTime

String

시작 시각

endTime

String

종료 시각

scheduleBody

String

일정 내용

noticeBody

String

공지글 내용

homeworks

Array

과제 리스트

homeworks[].homeworkBody

String

과제 내용

homeworks[].homeworkStatus

String

과제 상태

http-response
HTTP/1.1 201 Created
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 701

{
  "data" : {
    "dateNoticeId" : 1,
    "dateNoticeTitle" : "TestTitle",
    "startTime" : "2023-04-25T00:31:18.291954",
    "endTime" : "2023-04-25T00:31:18.291962",
    "schedule" : {
      "scheduleId" : 1,
      "scheduleBody" : "TestBody"
    },
    "notice" : {
      "noticeId" : 1,
      "noticeBody" : "TestBody"
    },
    "homeworks" : [ {
      "homeworkId" : 1,
      "homeworkBody" : "TestBody",
      "homeworkStatus" : "PROGRESS"
    }, {
      "homeworkId" : 1,
      "homeworkBody" : "TestBody",
      "homeworkStatus" : "PROGRESS"
    }, {
      "homeworkId" : 1,
      "homeworkBody" : "TestBody",
      "homeworkStatus" : "PROGRESS"
    } ],
    "noticeStatus" : "NOTICE"
  }
}
response-body
{
  "data" : {
    "dateNoticeId" : 1,
    "dateNoticeTitle" : "TestTitle",
    "startTime" : "2023-04-25T00:31:18.291954",
    "endTime" : "2023-04-25T00:31:18.291962",
    "schedule" : {
      "scheduleId" : 1,
      "scheduleBody" : "TestBody"
    },
    "notice" : {
      "noticeId" : 1,
      "noticeBody" : "TestBody"
    },
    "homeworks" : [ {
      "homeworkId" : 1,
      "homeworkBody" : "TestBody",
      "homeworkStatus" : "PROGRESS"
    }, {
      "homeworkId" : 1,
      "homeworkBody" : "TestBody",
      "homeworkStatus" : "PROGRESS"
    }, {
      "homeworkId" : 1,
      "homeworkBody" : "TestBody",
      "homeworkStatus" : "PROGRESS"
    } ],
    "noticeStatus" : "NOTICE"
  }
}
Table 70. response-fields
Path Type Description

data

Object

결과 데이터

data.dateNoticeId

Number

일지 식별자

data.dateNoticeTitle

String

일지 제목

data.startTime

String

시작 시간

data.endTime

String

종료 시간

data.schedule

Object

일정

data.schedule.scheduleId

Number

일정 식별자

data.schedule.scheduleBody

String

일정 내용

data.notice

Object

공지

data.notice.noticeId

Number

공지 식별자

data.notice.noticeBody

String

공지 내용

data.homeworks

Array

과제

data.homeworks[].homeworkId

Number

과제 식별자

data.homeworks[].homeworkBody

String

과제 내용

data.homeworks[].homeworkStatus

String

과제 상태

data.noticeStatus

String

공지 글 유무 NOTICE/NONE

5.8. 일지 상세 조회

http-request
GET /tutoring/date-notice/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token Value
Accept: application/json
Host: localhost:8080
Table 71. /tutoring/date-notice/{dateNoticeId}
Parameter Description

dateNoticeId

일지 식별자

Table 72. request-headers
Name Description

Authorization

AccessToken

request-body
http-response
HTTP/1.1 200 OK
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 701

{
  "data" : {
    "dateNoticeId" : 1,
    "dateNoticeTitle" : "TestTitle",
    "startTime" : "2023-04-25T00:31:18.448326",
    "endTime" : "2023-04-25T00:31:18.448338",
    "schedule" : {
      "scheduleId" : 1,
      "scheduleBody" : "TestBody"
    },
    "notice" : {
      "noticeId" : 1,
      "noticeBody" : "TestBody"
    },
    "homeworks" : [ {
      "homeworkId" : 1,
      "homeworkBody" : "TestBody",
      "homeworkStatus" : "PROGRESS"
    }, {
      "homeworkId" : 1,
      "homeworkBody" : "TestBody",
      "homeworkStatus" : "PROGRESS"
    }, {
      "homeworkId" : 1,
      "homeworkBody" : "TestBody",
      "homeworkStatus" : "PROGRESS"
    } ],
    "noticeStatus" : "NOTICE"
  }
}
response-body
{
  "data" : {
    "dateNoticeId" : 1,
    "dateNoticeTitle" : "TestTitle",
    "startTime" : "2023-04-25T00:31:18.448326",
    "endTime" : "2023-04-25T00:31:18.448338",
    "schedule" : {
      "scheduleId" : 1,
      "scheduleBody" : "TestBody"
    },
    "notice" : {
      "noticeId" : 1,
      "noticeBody" : "TestBody"
    },
    "homeworks" : [ {
      "homeworkId" : 1,
      "homeworkBody" : "TestBody",
      "homeworkStatus" : "PROGRESS"
    }, {
      "homeworkId" : 1,
      "homeworkBody" : "TestBody",
      "homeworkStatus" : "PROGRESS"
    }, {
      "homeworkId" : 1,
      "homeworkBody" : "TestBody",
      "homeworkStatus" : "PROGRESS"
    } ],
    "noticeStatus" : "NOTICE"
  }
}
Table 73. response-fields
Path Type Description

data

Object

결과 데이터

data.dateNoticeId

Number

일지 식별자

data.dateNoticeTitle

String

일지 제목

data.startTime

String

일정 시작 시각

data.endTime

String

일정 종료 시각

data.schedule

Object

일정

data.schedule.scheduleId

Number

일정 식별자

data.schedule.scheduleBody

String

일정 내용

data.notice

Object

공지

data.notice.noticeId

Number

공지 식별자

data.notice.noticeBody

String

공지 내용

data.homeworks

Array

과제

data.homeworks[].homeworkId

Number

과제 식별자

data.homeworks[].homeworkBody

String

과제 내용

data.homeworks[].homeworkStatus

String

과제 상태

data.noticeStatus

String

공지 글 유무 NOTICE/NONE

5.9. 일지 수정

http-request
PATCH /tutoring/date-notice/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token Value
Accept: application/json
Content-Length: 264
Host: localhost:8080

{
  "dateNoticeTitle" : "test",
  "startTime" : "2023-04-25T00:31:18.406540",
  "endTime" : "2023-04-25T00:31:18.406558",
  "scheduleBody" : "test",
  "noticeBody" : "test",
  "homeworks" : [ {
    "homeworkBody" : "test",
    "homeworkStatus" : "PROGRESS"
  } ]
}
Table 74. /tutoring/date-notice/{dateNoticeId}
Parameter Description

dateNoticeId

일지 식별자

Table 75. request-headers
Name Description

Authorization

AccessToken

request-body
{
  "dateNoticeTitle" : "test",
  "startTime" : "2023-04-25T00:31:18.406540",
  "endTime" : "2023-04-25T00:31:18.406558",
  "scheduleBody" : "test",
  "noticeBody" : "test",
  "homeworks" : [ {
    "homeworkBody" : "test",
    "homeworkStatus" : "PROGRESS"
  } ]
}
Table 76. request-fields
Path Type Description

dateNoticeTitle

String

일지 타이틀

dateNoticeTitle

String

일지 타이틀

startTime

String

시작 시간

endTime

String

종료 시각

scheduleBody

String

일정 내용

noticeBody

String

공지 내용

homeworks

Array

과제

homeworks[].homeworkBody

String

과제 내용

homeworks[].homeworkStatus

String

과제 상태 PROGRESS/FINISH

http-response
HTTP/1.1 200 OK
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 701

{
  "data" : {
    "dateNoticeId" : 1,
    "dateNoticeTitle" : "TestTitle",
    "startTime" : "2023-04-25T00:31:18.407322",
    "endTime" : "2023-04-25T00:31:18.407329",
    "schedule" : {
      "scheduleId" : 1,
      "scheduleBody" : "TestBody"
    },
    "notice" : {
      "noticeId" : 1,
      "noticeBody" : "TestBody"
    },
    "homeworks" : [ {
      "homeworkId" : 1,
      "homeworkBody" : "TestBody",
      "homeworkStatus" : "PROGRESS"
    }, {
      "homeworkId" : 1,
      "homeworkBody" : "TestBody",
      "homeworkStatus" : "PROGRESS"
    }, {
      "homeworkId" : 1,
      "homeworkBody" : "TestBody",
      "homeworkStatus" : "PROGRESS"
    } ],
    "noticeStatus" : "NOTICE"
  }
}
response-body
{
  "data" : {
    "dateNoticeId" : 1,
    "dateNoticeTitle" : "TestTitle",
    "startTime" : "2023-04-25T00:31:18.407322",
    "endTime" : "2023-04-25T00:31:18.407329",
    "schedule" : {
      "scheduleId" : 1,
      "scheduleBody" : "TestBody"
    },
    "notice" : {
      "noticeId" : 1,
      "noticeBody" : "TestBody"
    },
    "homeworks" : [ {
      "homeworkId" : 1,
      "homeworkBody" : "TestBody",
      "homeworkStatus" : "PROGRESS"
    }, {
      "homeworkId" : 1,
      "homeworkBody" : "TestBody",
      "homeworkStatus" : "PROGRESS"
    }, {
      "homeworkId" : 1,
      "homeworkBody" : "TestBody",
      "homeworkStatus" : "PROGRESS"
    } ],
    "noticeStatus" : "NOTICE"
  }
}
Table 77. response-fields
Path Type Description

data

Object

결과 데이터

data.dateNoticeId

Number

일지 식별자

data.dateNoticeTitle

String

일지 제목

data.startTime

String

일정 시작 시각

data.endTime

String

일정 종료 시각

data.schedule

Object

일정

data.schedule.scheduleId

Number

일정 식별자

data.schedule.scheduleBody

String

일정 내용

data.notice

Object

공지

data.notice.noticeId

Number

공지 식별자

data.notice.noticeBody

String

공지 내용

data.homeworks

Array

과제

data.homeworks[].homeworkId

Number

과제 식별자

data.homeworks[].homeworkBody

String

과제 내용

data.homeworks[].homeworkStatus

String

과제 상태

data.noticeStatus

String

공지 글 유무 NOTICE/NONE

5.10. 특정 일지 삭제

http-request
DELETE /tutoring/date-notice/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token Value
Accept: application/json
Host: localhost:8080
Table 78. /tutoring/date-notice/{dateNoticeId}
Parameter Description

dateNoticeId

일지 식별자

Table 79. request-headers
Name Description

Authorization

AccessToken

http-response
HTTP/1.1 204 No Content
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN

6. Review

6.1. 특정 후기 조회

http-request
GET /reviews/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token Value
Accept: application/json
Host: localhost:8080
Table 80. /reviews/{reviewId}
Parameter Description

reviewId

후기 식별자

Table 81. request-headers
Name Description

Authorization

AccessToken

http-response
HTTP/1.1 200 OK
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 286

{
  "data" : {
    "reviewId" : 1,
    "professional" : 4,
    "readiness" : 4,
    "explanation" : 5,
    "punctuality" : 5,
    "reviewBody" : "TestBody",
    "tuteeName" : "testTutee",
    "createAt" : "2023-04-25T00:31:17.391695",
    "updateAt" : "2023-04-25T00:31:17.391699"
  }
}
response-body
{
  "data" : {
    "reviewId" : 1,
    "professional" : 4,
    "readiness" : 4,
    "explanation" : 5,
    "punctuality" : 5,
    "reviewBody" : "TestBody",
    "tuteeName" : "testTutee",
    "createAt" : "2023-04-25T00:31:17.391695",
    "updateAt" : "2023-04-25T00:31:17.391699"
  }
}
Table 82. response-fields
Path Type Description

data

Object

결과 데이터

data.reviewId

Number

후기 식별자

data.professional

Number

전문성 별점

data.readiness

Number

준비성 별점

data.explanation

Number

설명 별점

data.punctuality

Number

시간 준수 별점

data.reviewBody

String

후기 내용

data.tuteeName

String

튜티 이름

data.createAt

String

생성 시각

data.updateAt

String

최종 수정 시각

6.2. 특정 과외 후기 생성

http-request
POST /reviews/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token Value
Accept: application/json
Content-Length: 114
Host: localhost:8080

{
  "professional" : 4,
  "readiness" : 4,
  "explanation" : 5,
  "punctuality" : 5,
  "reviewBody" : "TestBody"
}
Table 83. /reviews/{tutoringId}
Parameter Description

tutoringId

과외 식별자

Table 84. request-headers
Name Description

Authorization

AccessToken

request-body
{
  "professional" : 4,
  "readiness" : 4,
  "explanation" : 5,
  "punctuality" : 5,
  "reviewBody" : "TestBody"
}
Table 85. request-fields
Path Type Description

professional

Number

전문성 별점

readiness

Number

준비성 별점

explanation

Number

설명력 별점

punctuality

Number

시간 준수 별점

reviewBody

String

후기 내용

http-response
HTTP/1.1 201 Created
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 286

{
  "data" : {
    "reviewId" : 1,
    "professional" : 4,
    "readiness" : 4,
    "explanation" : 5,
    "punctuality" : 5,
    "reviewBody" : "TestBody",
    "tuteeName" : "testTutee",
    "createAt" : "2023-04-25T00:31:17.431159",
    "updateAt" : "2023-04-25T00:31:17.431163"
  }
}
response-body
{
  "data" : {
    "reviewId" : 1,
    "professional" : 4,
    "readiness" : 4,
    "explanation" : 5,
    "punctuality" : 5,
    "reviewBody" : "TestBody",
    "tuteeName" : "testTutee",
    "createAt" : "2023-04-25T00:31:17.431159",
    "updateAt" : "2023-04-25T00:31:17.431163"
  }
}
Table 86. response-fields
Path Type Description

data

Object

결과 데이터

data.reviewId

Number

후기 식별자

data.professional

Number

전문성 별점

data.readiness

Number

준비성 별점

data.explanation

Number

설명력 별점

data.punctuality

Number

시간 준수 별점

data.reviewBody

String

후기 내용

data.tuteeName

String

튜티 이름

data.createAt

String

생성 시각

data.updateAt

String

최종 수정 시각

6.3. 특정 과외 후기 수정

http-request
PATCH /reviews/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token Value
Accept: application/json
Content-Length: 114
Host: localhost:8080

{
  "professional" : 4,
  "readiness" : 4,
  "explanation" : 5,
  "punctuality" : 5,
  "reviewBody" : "TestBody"
}
Table 87. /reviews/{tutoringId}
Parameter Description

tutoringId

과외 식별자

Table 88. request-headers
Name Description

Authorization

AccessToken

request-body
{
  "professional" : 4,
  "readiness" : 4,
  "explanation" : 5,
  "punctuality" : 5,
  "reviewBody" : "TestBody"
}
Table 89. request-fields
Path Type Description

professional

Number

전문성 별점

readiness

Number

준비성 별점

explanation

Number

설명력 별점

punctuality

Number

시간 준수 별점

reviewBody

String

후기 내용

http-response
HTTP/1.1 200 OK
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 286

{
  "data" : {
    "reviewId" : 1,
    "professional" : 4,
    "readiness" : 4,
    "explanation" : 5,
    "punctuality" : 5,
    "reviewBody" : "TestBody",
    "tuteeName" : "testTutee",
    "createAt" : "2023-04-25T00:31:17.302412",
    "updateAt" : "2023-04-25T00:31:17.302423"
  }
}
response-body
{
  "data" : {
    "reviewId" : 1,
    "professional" : 4,
    "readiness" : 4,
    "explanation" : 5,
    "punctuality" : 5,
    "reviewBody" : "TestBody",
    "tuteeName" : "testTutee",
    "createAt" : "2023-04-25T00:31:17.302412",
    "updateAt" : "2023-04-25T00:31:17.302423"
  }
}
Table 90. response-fields
Path Type Description

data

Object

결과 데이터

data.reviewId

Number

후기 식별자

data.professional

Number

전문성 별점

data.readiness

Number

준비성 별점

data.explanation

Number

설명력 별점

data.punctuality

Number

시간 준수 별점

data.reviewBody

String

후기 내용

data.tuteeName

String

튜티 이름

data.createAt

String

생성 시각

data.updateAt

String

최종 수정 시각

7. Message

7.1. 메세지 생성

http-request
POST /messages HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token Value
Accept: application/json
Content-Length: 92
Host: localhost:8080

{
  "senderId" : 1,
  "receiverId" : 2,
  "messageRoomId" : 1,
  "messageContent" : "test"
}
Table 91. request-headers
Name Description

Authorization

AccessToken

request-body
{
  "senderId" : 1,
  "receiverId" : 2,
  "messageRoomId" : 1,
  "messageContent" : "test"
}
Table 92. request-fields
Path Type Description

senderId

Number

보내는 프로필 식별자

receiverId

Number

받는 프로필 식별자

messageRoomId

Number

메세지 룸 식별자

messageContent

String

메세지 내용

http-response
HTTP/1.1 201 Created
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 243

{
  "data" : {
    "messageRoomId" : 1,
    "messageId" : 1,
    "senderId" : 1,
    "senderName" : "test1",
    "receiverId" : 2,
    "receiverName" : "test2",
    "messageContent" : "test",
    "createAt" : "2023-04-25T00:31:15.095836"
  }
}
response-body
{
  "data" : {
    "messageRoomId" : 1,
    "messageId" : 1,
    "senderId" : 1,
    "senderName" : "test1",
    "receiverId" : 2,
    "receiverName" : "test2",
    "messageContent" : "test",
    "createAt" : "2023-04-25T00:31:15.095836"
  }
}
Table 93. response-fields
Path Type Description

data

Object

결과 데이터

data.messageRoomId

Number

메세지 룸 식별자

data.messageId

Number

메세지 식별자

data.senderId

Number

보내는 프로필 식별자

data.senderName

String

보내는 프로필 이름

data.receiverId

Number

받는 프로필 식별자

data.receiverName

String

받는 프로필 이름

data.messageContent

String

메세지 내용

data.createAt

String

메세지 생성 시각

7.2. 메세지 룸 생성

http-request
POST /messages/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token Value
Accept: application/json
Content-Length: 36
Host: localhost:8080

{
  "tutorId" : 2,
  "tuteeId" : 1
}
Table 94. /messages/{profileId}
Parameter Description

profileId

프로필 식별자

Table 95. request-headers
Name Description

Authorization

AccessToken

request-body
{
  "tutorId" : 2,
  "tuteeId" : 1
}
Table 96. request-fields
Path Type Description

tutorId

Number

튜터 프로필 식별자

tuteeId

Number

튜티 프로필 식별자

http-response
HTTP/1.1 201 Created
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 236

{
  "data" : {
    "messageRoomId" : 1,
    "messageStatus" : "UNCHECK",
    "lastMessage" : "test",
    "lastSenderId" : 1,
    "targetName" : "test",
    "targetProfileUrl" : "test",
    "createAt" : "2023-04-25T00:31:14.906156"
  }
}
response-body
{
  "data" : {
    "messageRoomId" : 1,
    "messageStatus" : "UNCHECK",
    "lastMessage" : "test",
    "lastSenderId" : 1,
    "targetName" : "test",
    "targetProfileUrl" : "test",
    "createAt" : "2023-04-25T00:31:14.906156"
  }
}
Table 97. response-fields
Path Type Description

data

Object

결과 데이터

data.messageRoomId

Number

메세지 룸 식별자

data.messageStatus

String

메세지 룸 상태

data.lastMessage

String

마지막 메세지 내용

data.lastSenderId

Number

마지막 메세지 보낸 프로필 식별자

data.targetName

String

메세지 룸 상대방 프로필 이름

data.targetProfileUrl

String

상대방 프로필 사진 URL

data.createAt

String

메세지 룸 생성 시각

7.3. 특정 프로필 메세지 룸 리스트 조회

http-request
GET /messages/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token Value
Accept: application/json
Host: localhost:8080
Table 98. /messages/{profileId}
Parameter Description

profileId

프로필 식별자

Table 99. request-headers
Name Description

Authorization

AccessToken

http-response
HTTP/1.1 200 OK
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 563

{
  "data" : [ {
    "messageRoomId" : 1,
    "messageStatus" : "UNCHECK",
    "lastMessage" : "test",
    "lastSenderId" : 1,
    "targetName" : "test",
    "targetProfileUrl" : "test",
    "createAt" : "2023-04-25T00:31:14.998028"
  }, {
    "messageRoomId" : 1,
    "messageStatus" : "UNCHECK",
    "lastMessage" : "test",
    "lastSenderId" : 1,
    "targetName" : "test",
    "targetProfileUrl" : "test",
    "createAt" : "2023-04-25T00:31:14.998028"
  } ],
  "pageInfo" : {
    "page" : 0,
    "size" : 2,
    "totalElements" : 2,
    "totalPages" : 1
  }
}
response-body
{
  "data" : [ {
    "messageRoomId" : 1,
    "messageStatus" : "UNCHECK",
    "lastMessage" : "test",
    "lastSenderId" : 1,
    "targetName" : "test",
    "targetProfileUrl" : "test",
    "createAt" : "2023-04-25T00:31:14.998028"
  }, {
    "messageRoomId" : 1,
    "messageStatus" : "UNCHECK",
    "lastMessage" : "test",
    "lastSenderId" : 1,
    "targetName" : "test",
    "targetProfileUrl" : "test",
    "createAt" : "2023-04-25T00:31:14.998028"
  } ],
  "pageInfo" : {
    "page" : 0,
    "size" : 2,
    "totalElements" : 2,
    "totalPages" : 1
  }
}
Table 100. response-fields
Path Type Description

data

Array

결과 데이터

data.[]messageRoomId

Number

메세지 룸 식별자

data.[]messageStatus

String

메세지 룸 상태

data.[]lastMessage

String

마지막 메세지 내용

data.[]lastSenderId

Number

마지막 메세지 보낸 프로필 식별자

data.[]targetName

String

메세지 룸 상대방 프로필 이름

data.[]targetProfileUrl

String

상대방 프로필 사진 URL

data.[]createAt

String

메세지 룸 생성 시각

pageInfo

Object

요청 페이지 정보

pageInfo.page

Number

요청 페이지 - 0 = 1 페이지

pageInfo.size

Number

페이지당 요청 회원

pageInfo.totalElements

Number

총 멤버

pageInfo.totalPages

Number

생성된 총 페이지

7.4. 특정 메세지 룸 전체 메세지 조회

http-request
GET /messages/rooms/1/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token Value
Accept: application/json
Host: localhost:8080
Table 101. /messages/rooms/{profileId}/{messageRoomId}
Parameter Description

profileId

프로필 식별자

messageRoomId

메세지 룸 식별자

Table 102. request-headers
Name Description

Authorization

AccessToken

http-response
HTTP/1.1 200 OK
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 1125

{
  "data" : {
    "messageRoomId" : 1,
    "createAt" : "2023-04-25T00:31:15.203259",
    "tutorId" : 1,
    "tutorName" : "너에게",
    "tuteeId" : 1,
    "tuteeName" : "나에게",
    "tutoringId" : 1,
    "messages" : [ {
      "messageRoomId" : 1,
      "messageId" : 1,
      "senderId" : 1,
      "senderName" : "홍길동",
      "receiverId" : 1,
      "receiverName" : "김코딩",
      "messageContent" : "아버지를 아버지라 부르지 못하고",
      "createAt" : "2023-04-25T00:31:15.203216"
    }, {
      "messageRoomId" : 1,
      "messageId" : 1,
      "senderId" : 1,
      "senderName" : "홍길동",
      "receiverId" : 1,
      "receiverName" : "김코딩",
      "messageContent" : "아버지를 아버지라 부르지 못하고",
      "createAt" : "2023-04-25T00:31:15.203236"
    }, {
      "messageRoomId" : 1,
      "messageId" : 1,
      "senderId" : 1,
      "senderName" : "홍길동",
      "receiverId" : 1,
      "receiverName" : "김코딩",
      "messageContent" : "아버지를 아버지라 부르지 못하고",
      "createAt" : "2023-04-25T00:31:15.203243"
    } ]
  }
}
response-body
{
  "data" : {
    "messageRoomId" : 1,
    "createAt" : "2023-04-25T00:31:15.203259",
    "tutorId" : 1,
    "tutorName" : "너에게",
    "tuteeId" : 1,
    "tuteeName" : "나에게",
    "tutoringId" : 1,
    "messages" : [ {
      "messageRoomId" : 1,
      "messageId" : 1,
      "senderId" : 1,
      "senderName" : "홍길동",
      "receiverId" : 1,
      "receiverName" : "김코딩",
      "messageContent" : "아버지를 아버지라 부르지 못하고",
      "createAt" : "2023-04-25T00:31:15.203216"
    }, {
      "messageRoomId" : 1,
      "messageId" : 1,
      "senderId" : 1,
      "senderName" : "홍길동",
      "receiverId" : 1,
      "receiverName" : "김코딩",
      "messageContent" : "아버지를 아버지라 부르지 못하고",
      "createAt" : "2023-04-25T00:31:15.203236"
    }, {
      "messageRoomId" : 1,
      "messageId" : 1,
      "senderId" : 1,
      "senderName" : "홍길동",
      "receiverId" : 1,
      "receiverName" : "김코딩",
      "messageContent" : "아버지를 아버지라 부르지 못하고",
      "createAt" : "2023-04-25T00:31:15.203243"
    } ]
  }
}
Table 103. response-fields
Path Type Description

data

Object

결과 데이터

data.messageRoomId

Number

메세지 룸 식별자

data.createAt

String

메세지 룸 생성 시각

data.tutorId

Number

튜터 프로필 식별자

data.tutorName

String

튜터 이름

data.tuteeId

Number

튜티 프로필 식별자

data.tuteeName

String

튜티 이름

data.tutoringId

Number

과외 식별자

data.messages

Array

메세지 리스트

data.messages.[]messageRoomId

Number

메세지 룸 식별자

data.messages.[]messageId

Number

메세지 식별자

data.messages.[]senderId

Number

보내는 프로필 식별자

data.messages.[]senderName

String

보내는 프로필 이름

data.messages.[]receiverId

Number

받는 프로필 식별자

data.messages.[]receiverName

String

받는 프로필 이름

data.messages.[]messageContent

String

메세지 내용

data.messages.[]createAt

String

메세지 생성 시각

7.5. 특정 메세지 룸 삭제

http-request
DELETE /messages/rooms/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token Value
Accept: application/json
Host: localhost:8080
Table 104. /messages/rooms/{messageRoomId}
Parameter Description

messageRoomId

메세지 룸 식별자

Table 105. request-headers
Name Description

Authorization

AccessToken

http-response
HTTP/1.1 204 No Content
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN

8. Image

8.1. 프로필 이미지 등록 및 수정

  • PATCH 동일한 조건으로 요청 가능

http-request
$ curl 'http://localhost:8080/upload/profile-image/1' -i -X POST \
    -H 'Content-Type: multipart/form-data;charset=UTF-8' \
    -H 'Authorization: Access Token Value' \
    -F 'image=@test.jpg'
Table 106. request-headers
Name Description

Authorization

AccessToken

http-response
HTTP/1.1 201 Created
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 374

{
  "data" : [ {
    "profileImageId" : 1,
    "url" : "https://www.google.com/url?sa=i&url=http%3A%2F%2Fm.blog.naver.com%2Fcjswodnajs%2F222138892587&psig=AOvVaw0Ef_d9Jqh-dQm9Q7RRDiIg&ust=1673341195393000&source=images&cd=vfe&ved=0CA8QjRxqFwoTCMjWyO2PuvwCFQAAAAAdAAAAABAE",
    "createAt" : "2023-04-25T00:31:13.726719",
    "updateAt" : "2023-04-25T00:31:13.726738"
  } ]
}
response-body
{
  "data" : [ {
    "profileImageId" : 1,
    "url" : "https://www.google.com/url?sa=i&url=http%3A%2F%2Fm.blog.naver.com%2Fcjswodnajs%2F222138892587&psig=AOvVaw0Ef_d9Jqh-dQm9Q7RRDiIg&ust=1673341195393000&source=images&cd=vfe&ved=0CA8QjRxqFwoTCMjWyO2PuvwCFQAAAAAdAAAAABAE",
    "createAt" : "2023-04-25T00:31:13.726719",
    "updateAt" : "2023-04-25T00:31:13.726738"
  } ]
}
Table 107. response-fields
Path Type Description

data

Array

결과 데이터

data.[]profileImageId

Number

프로필 이미지 식별자

data.[]url

String

이미지 URL

data.[]createAt

String

생성 시각

data.[]updateAt

String

수정 시각

8.2. 프로필 이미지 삭제

http-request
DELETE /upload/profile-image/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Access Token Value
Accept: application/json
Host: localhost:8080
Table 108. /upload/profile-image/{profileId}
Parameter Description

profileId

프로필 식별자

Table 109. request-headers
Name Description

Authorization

AccessToken

http-response
HTTP/1.1 204 No Content
Access-Control-Allow-Methods: GET, POST, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers: Authorization, userId, userStatus
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization, Authorization, userId, userStatus
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN