Skip to content
peacemaker474 edited this page Dec 21, 2022 · 8 revisions

Present -v

공통 Header

{
  Authorization: `Bearer ${accessToken}`
}

토큰관련 에러 및 토큰 재발급

GET 토큰 재발급
  /token

Response 201: OK

{
  success: true,
  accessToken: "accessToken",
}

Response 403: Error

{
  success: false,
  message: "유효하지 않은 토큰입니다."
}

AccessToken 및 RefreshToken 유효성 검사

Response 400: Error

{
  success: false,
  message: "존재하지 않거나 탈퇴한 사용자입니다.",
}

Response 401: Error

{
  success: false,
  message: "토큰이 존재하지 않습니다. 다시 로그인해주세요."
}

Response 403: Error

{
  success: false,
  message: "토큰이 만료되었거나 유효하지 않은 토큰입니다."
}

로그인/로그아웃/회원가입

POST 로그인 버튼 클릭
  /login

description: userId와 password로 로그인하고 accessToken과 refreshToken return합니다.

Request Body

{
  userId: "test1",
  password: "test1!"
}

Response 200: OK

  id: "userId",
  name: "nickname",
  accessToken: "accessToken",
  refreshToken: "refreshToken",
  imageUrl: "imageUrl",
  success: true,
  message: "...",

Response 401: Error

{
  success: false,
  message: "아이디가 존재하지 않습니다.",
}
{
  success: false,
  message: "비밀번호가 일치하지 않습니다."
}
{
  success: false,
  message: "이미 탈퇴한 회원입니다."
}
GET 로그아웃 버튼 클릭
  /logout

description: 버튼 클릭 시 쿠키를 지우고 로그아웃 합니다.

Response 200 : OK

{
  success: true,
}
POST 회원가입 버튼 클릭
  /signup

description: 회원가입의 성공시 “/” 으로 Redirect 합니다.

Request Body

{
  userId: "test1",
  email: "[email protected]",
  nickname: "test",
  birthday: "2022-09-22",
  password: "test1234!",
}

Response 201: OK

{
  success: true,
  message: "회원가입에 성공했습니다."
}
DELETE 회원탈퇴 버튼 클릭
  /my/user-delete

description: 회원탈퇴 성공시 “/” 으로 Redirect 합니다.

Request Body

{
  userId: 'email1234',
}

Response 200: OK

{
  success: true,
  message: "회원 탈퇴가 완료되었으며, 7일 뒤 삭제될 예정입니다."
}

Response 400: Error

{
  success: false,
  message: "이미 탈퇴를 요청한 아이디입니다."
}

게시글 작성 / 수정/ 삭제

POST 게시글 작성
  /post/create

Request Body

{
  title: "postTitle",
  hashtag: ["tag1", "tag2"],
  targetAge: 20,
  content: {para: "content", img: ["imgUrl1", imgUr12]}
}

Response 201: OK

{
  success: true,
  message: "새로운 게시글 작성이 완료되었습니다.",
}

Response 400: Error

{
  success: false,
  message: "존재하지 않거나 삭제된 게시물입니다.",
}
{
  success: false,
  message: "title이 undefined입니다.",
}
{
  success: false,
  message: "hashtag가 undefined입니다.",
}
{
  success: false,
  message: "para가 undefined입니다.",
}
{
  success: false,
  message: "해당 연령대는 존재하지 않습니다."
}
PUT 게시글 수정
  /post/:post_id

Request body

{
  title: "title",
  content: "content",
  hashtag: ["tag1", "tag2"],
  tagetAge: 20,
}

Response 201: OK

{
  success: true,
  message: "게시글 수정이 완료되었습니다.",
}

Response 400: Error

{
  success: false,
  message: "존재하지 않거나 삭제된 게시물입니다.",
}
{
  success: false,
  message: "title이 undefined입니다.",
}
{
  success: false,
  message: "hashtag가 undefined입니다.",
}
{
  success: false,
  message: "para가 undefined입니다.",
}
{
  success: false,
  message: "해당 연령대는 존재하지 않습니다."
}
DELETE 게시글 삭제
  /post/:post_id

Response 200: OK

{
  success: true,
  message: "게시글 삭제가 완료되었습니다.
}

게시글 목록 / 게시글 검색하기

GET 게시글 목록 읽기 및 검색
  /post/target?age=20&page=1&filter=newer&tag=kaka&keyword=abc

Response 200: OK

{
  data: [{
    content: "<p>aaaaaa</p>",
    createAt: "2022-09-22T02:31:28.021Z",
    hashtag: ["sdad"],
    meta: { views: 14, likes: 0, bookmarks: [], pinnedCmnt: null, answer: false },
    owner: {
      _id: "632bbf89b4a156b3ed2f79e0",
      nickname: "user1234",
      userId: "user123",
    },
    targetAge: 20,
    title: "232323",
    updateAt: "2022-09-22T02:31:28.021Z",
    _id: "632bc900b4a156b3ed2f7a28"
  }],
  page: 1,
  lastPage: true,
}

게시글 상세

GET 게시글 상세
  /post/:post_id

Response 201: OK

{
  bookmark: false,
  content: "<p>aaaaaaaaaa</p>",
  createAt: "2022-09-22T02:31:28.021Z",
  hashtag: ["dasdasd"],
  like: false,
  meta: { views: 14, likes: 0, bookmarks: [], pinnedCmnt: null, answer: false },
  owner: {
    _id: "632bbf89b4a156b3ed2f79e0",
    userId: "user123",
    nickname: "user1234",
  },
  targetAge: 20,
  title: "weeweq",
  updateAt: "2022-09-22T02:31:28.021Z",
  _id: "632bc900b4a156b3ed2f7a28"
}

Response 404: Error

{
  success: false,
  message: "존재하지 않거나 삭제된 게시물입니다.",
}
GET 게시글 좋아요
  /post/:post_id/like

Response 200: OK

{
  success: true,
  message: "좋아요를 눌렀습니다.",
  data: { likes: 12 },
}

Response 404: Error

{
  success: false,
  message: "존재하지 않거나 삭제된 게시물입니다.",
}
{
  success: false,
  message: "이미 좋아요한 게시물입니다.",
}
GET 게시글 좋아요 취소
  /post/:post_id/unlike

Response 200: OK

{
  success: ture,
  message: "좋아요를 취소했습니다.",
  data: { likes: 12 },
}

Response 404: Error

{
  success: false,
  message: "존재하지 않거나 삭제된 게시물입니다.",
}
{
  success: false,
  message: "좋아요를 누르지 않은 게시물입니다.",
}

댓글작성 / 댓글 목록 / 댓글 삭제

POST 댓글, 대댓글 작성
  /post/comment

RequestBody

// 댓글
{
  post_id: "post_id",
  content: "댓글내용",
  parent_id: null,
}
// 대댓글
{
  post_id: "post_id",
  content: "댓글내용",
  parent_id: "comment_id",
}

Response 200: OK

{
  success: true,
  comment_id: "comment_id",
  message: "댓글 작성을 성공했습니다."
}

Response 400: Error

{
  success: false,
  message: "postId가 undefined입니다.",
}
{
  success: false,
  message: "parentId가 undefined입니다.",
}
{
  success: false,
  message: "content가 undefined입니다.",
}
{
  success: false,
  message: "존재하지 않거나 삭제된 게시물입니다."
}
{
  success: false,
  message: "존재하지 않는 댓글입니다."
}
GET 댓글 목록 읽기
  /post/:id/comments

Response 200: OK

// 댓글이 있을 때
[{
  comment_id: "comment_id",
  user_id: "user_id",
  post_id: "post_id",
  content: "댓글 내용",
  createAt: "",
  parent: null,
  comment_like: ture || false,
  children: [{
     children: [],
     complain_count: 0,
     createAt: "2022-09-22T09:46:37.145Z",
     like_count: 0,
     like_users: [],
     parent_id: "632bc917b4a156b3ed2f7a3c",
     post_id: "632bc900b4a156b3ed2f7a28",
     text: "테스트입니다.",
     writer: "632bbf89b4a156b3ed2f79e0",
     _id: "632c2efd15732edaea69a0d7"
  }]
}]

// 댓글이 없을때
[]

Response 400: Error

{
  message: "존재하지 않는 게시글입니다.",
}
GET 댓글 읽기
  /comment/:id

Response 200: OK

[{
  comment_id: "comment_id",
  user_id: "user_id",
  post_id: "post_id",
  content: "댓글 내용",
  createAt: "",
  parent: null,
  comment_like: ture || false,
  children: [{
     children: [],
     complain_count: 0,
     createAt: "2022-09-22T09:46:37.145Z",
     like_count: 0,
     like_users: [],
     parent_id: "632bc917b4a156b3ed2f7a3c",
     post_id: "632bc900b4a156b3ed2f7a28",
     text: "테스트입니다.",
     writer: "632bbf89b4a156b3ed2f79e0",
     _id: "632c2efd15732edaea69a0d7"
  }]
}]

// 댓글이 없을때
[]

Response 400: Error

{
  message: "존재하지 않는 게시글입니다."
}
DELETE 댓글 삭제
  /comment/:id

Response 200: OK

{
  success: true,
  message: "댓글이 삭제되었습니다."
}

Response 400: Error

{
  success: true,
  message: "존재하지 않는 댓글입니다."
}
{
  success: true,
  message: "commentId가 undefined입니다."
}
GET 댓글 좋아요
  /comment/:id/like

Response 200: OK

{
  success: true,
  message: "좋아요를 눌렀습니다."
}

Response 400: Error

{
  success: false,
  message: "존재하지 않는 댓글입니다."
}

Response 404: Error

{
  success: false,
  message: "이미 좋아요한 댓글입니다."
}
GET 댓글 좋아요 취소
  /comment/:id/unlike

Request Body

{
  comment_id: "comment_id"
}

Response 200: OK

{
  success: true,
  message: "좋아요를 취소했습니다."
}

Response 400: Error

{
  success: false,
  message: "존재하지 않는 댓글입니다.",
}

Response 404: Error

{
  success: false,
  message: "좋아요를 하지 않은 댓글입니다."
}
GET 댓글 고정
  /comment/:id/pinned

Response 200: OK

{
  success: true,
  message: "댓글 고정을 성공했습니다."
}

Response 400: Error

{
  success: false,
  message: "존재하지 않거나 삭제된 게시물입니다."
}
{
  success: false,
  message: "고정할 수 없는 댓글입니다."
}
GET 댓글 고정 취소
  /comment/:id/unpinned

Response 200: OK

{
  success: true,
  message: "고정댓글을 해제했습니다."
}

Response 400: Error

{
  success: false,
  message: "존재하지 않거나 삭제된 게시물입니다.",
}
{
  success: false,
  message: "고정할 수 없는 댓글입니다.",
}

게시글 북마크 / 북마크 취소

POST 북마크
  /post/:id/bookmark

Response 201: OK

{
  success: true,
  message: "즐겨찾기 성공했습니다."
}

Response 404: Error

{
  success: false,
  message: "이미 즐겨찾기한 게시글입니다."
}
DELETE 북마크 취소
  /post/:id/unbookmark

Response 201: OK

{
  success: true,
  message: "즐겨찾기를 취소했습니다."
}

Response 404: Error

{
  success: false,
  message: "즐겨찾기하지 않은 게시글입니다."
}

마이페이지 / 회원정보 수정 / 즐겨찾기한 게시글 / 내가 작성한 게시글

PUT 유저 아이디 및 닉네임 수정 후 확인 버튼 클릭
  /my/update-user

Request body

{
  userId: "test1",
  nicknmae: "test1234",
  email: "기존이메일@gamil.com",
}

Response 200: OK

{
  id: "test2",
  name: "test4232",
  email: "기존이메일@gmail.com",
  success: true,
  message: "성공적으로 유저 정보를 변경하였습니다."
}

Response 409: Error

{
  success: false,
  message: "이미 존재하는 아이디거나 닉네임입니다."
}
PUT 유저 비밀번호 수정 후 확인 버튼 클릭
  /my/changepw

Request Body

{
  userId: "test1234",
  oldPassword: "1234",
  newPassword: "12345",
  newPassword2: "12345",
}

Response 200: OK

{
  success: true,
  message: "성공적으로 비밀번호를 변경하였습니다."
}

Response 400: Error

// 이전 비밀번호가 다를 경우
{
  success: false,
  message: "비밀번호를 다시 입력하세요."
}

// 새로운 비밀번호가 서로 맞지 않을 경우
{
  success: false,
  message: "새 비밀번호와 비밀번호 확인이 일치하지 않습니다.",
}
PUT 유저 프로필 이미지 변경
  /my/update-image

Response Body

{
  newData: formdata
}

Response 201: OK

{
  success: ture,
  message: "성공적으로 프로필 이미지를 변경했습니다.",
  imageUrl: "image.url"
}
GET 즐겨찾기한 게시글 불러오기
  /my/bookMarkLists

Response 200: OK

{
  success: true,
  bookmarkLists: {
    title: "테스트",
    createAt: "2022-09-22T08:58:02.107Z",
    updateAt: "2022-09-22T08:58:02.107Z",
    targetAge: 10, 
    owner: { nickename: "한국사" },
    meta: { views: 0, likes: 0, bookmarks: [], pinnedCmnt: null, answer: false }, 
    hashtag: ["학업", "성적", "스트레스"],
    content: "<p>요즘 학업에 너무 집중이 안 되는데...</p>"
  }
}

Response 200: 즐겨찾기한 목록이 없을 경우

{
  즐겨찾기한 게시글이 없습니다.
}
GET 내가 작성한 게시글 목록 불러오기
  /my/writeLists

Response 200: OK

{
  success: true,
  writeLists: {
    title: "테스트",
    createAt: "2022-09-22T08:58:02.107Z",
    updateAt: "2022-09-22T08:58:02.107Z",
    targetAge: 10, 
    owner: "632bbf94b4a156b3ed2f79e9",
    meta: { views: 0, likes: 0, bookmarks: [], pinnedCmnt: null, answer: false }, 
    hashtag: ["학업", "성적", "스트레스"],
    content: "<p>요즘 학업에 너무 집중이 안 되는데...</p>"
  }
}

Response 200: 작성한 게시글이 없을 경우

{
  작성한 게시글이 없습니다.
}