HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
💟
지은팀 Programmers Study
/
🚀
지은 1팀
/
👷
와플카드 API
👷

와플카드 API

auth, user, card 3파트로 분류하여 api를 구현했습니다. 모든 api를 테스트 해본것이 아니기 때문에 동작이 안되는 것들이 있을 수 있습니다. 그럴 땐 직접 api 요청을 하실수 있게끔 api요청 함수 2가지를 export에 추가해두었습니다.
  • request: 토큰이 필요없는 일반 요청
  • authRequest : 토큰이 필요한 요청(토큰은 sessionStorage에서 waffleCardUserToken의 키값에서 받아옵니다.)

🔐 auth

  • getAuthUser : 토큰으로 유저정보를 받아옴(토큰을 이용해서 유저가 유효한지 확인하는 용도로도 사용 가능)
  • signUp : 회원가입
  • login : 로그인
  • logout : 로그아웃

🧑🏻‍💻 user

  • getUserInfo : 유저정보
  • putUserName : 유저이름 수정
  • putUserPassword : 비밀번호 수정

🗂 cardApi (⚠️post에서 card로 전부 변경했습니다.)

  • getUserPostList : 유저 포스트 리스트
  • getUserBookmakCardList : 유저 즐겨찾기 포스트 리스트 (구현x, API 확인 후 리팩토링)
  • getChannelCardList : 채널 포스트 리스트 (전체 포스트리스트, 채널ID 내장되어있습니다.)
  • createCard: 포스트 생성
  • getCard : 포스트 디테일 불러오기
  • updateCard : 포스트 업데이트
  • deleteCard : 포스트 삭제
  • createCardLike : 포스트 좋아요
  • deleteCardLike : 포스트 좋아요 삭제
  • createCardBookmark : 포스트 즐겨찾기 (구현x, API 확인 후 리팩토링)
  • deleteCardBookmark : 포스트 즐겨찾기 삭제 (구현x, API 확인 후 리팩토링)
  • getCardComment : 포스트 댓글 불러오기 (구현x, API 확인 후 리팩토링)
  • createCardComment : 포스트 댓글 생성하기
  • updateCardComment : 포스트 댓글 수정하기 (구현x)
  • deleteCardComment : 포스트 댓글 삭제하기
const createInstance = options => { const instance = axios.create({ baseURL: API_END_POINT, ...options }); return setInterceptors(instance); }; const request = createInstance(); const createInstanceWithAuth = options => { const instance = axios.create({ baseURL: API_END_POINT, ...options }); return setInterceptors(instance, true); }; const authRequest = createInstanceWithAuth(); const authApi = { getAuthUser: () => authRequest.get('/auth-user'), signUp: userInfo => request.post('/signup', userInfo), login: userInfo => request.post('/login', userInfo), logout: () => request.post('/logout'), }; const userApi = { getUserInfo: userId => request.get(`users/${userId}`), putUserName: userName => authRequest.put('settings/update-user', { username: userName }), putUserPassword: password => authRequest.put('settings/update-password', { password }), }; const cardApi = { getUserCardList: (userId, params) => request.get(`posts/author/${userId}`, { params }), getUserBookmarkCardList: userId => {}, // TODO: API 확인 후 리팩토링 getChannelCardList: params => request.get(`posts/channel/${CHANNEL_ID}`, { params }), createCard: post => authRequest.post('posts/create', { ...post, channelId: CHANNEL_ID }), getCard: postId => request.get(`posts/${postId}`), updateCard: post => authRequest.put('posts/update', post), deleteCard: postId => authRequest.delete('posts/delete', postId), createCardLike: postId => authRequest.post('likes/create', postId), deleteCardLike: postId => authRequest.delete('likes/delete', postId), createCardBookmark: postId => {}, // TODO: API 확인 후 리팩토링 deleteCardBookmark: postId => {}, // TODO: API 확인 후 리팩토링 getCardComment: commentId => {}, // TODO: API 확인 후 리팩토링 createCardComment: commentInfo => authRequest.post('comments/create', commentInfo), deleteCardComment: commentId => authRequest.delete('comments/delete', commentId), }; export { authApi, userApi, postApi, request, authRequest };
 

수정사항

  • getCard: postId => request.get(`posts/${postId}`) (반영완료)
 

🧑🏻‍💻 유저

회원가입 : /signup

사용자가 이메일과 비밀번호로 서비스에 가입합니다.
POST /signup

Request Body

{ "email": String, "fullName": String, "password": String }

Response

200 OK
{ "user": User, "token": String }

로그인 : /login

사용자가 이메일과 비밀번호로 서비스에 로그인합니다.
POST /login

Request Body

{ "email": String, "password": String }

Response

200 OK
{ "user": User, "token": String }

로그아웃

사용자가 로그아웃 합니다.
POST /logout

인증확인 - (어디에 쓰일까?)

사용자가 인증이 되었는지 확인합니다.
GET /auth-user

Request Header

Authorization: bearer JWT토큰

Response

User

사용자 정보 조회 : /my-page

특정 사용자 정보를 불러옵니다.
GET /users/{userId}

Response

User

내 정보 변경 : /my-page : 닉네임 변경

나의 정보를 변경합니다.
PUT /settings/update-user

Request Header

Authorization: bearer JWT토큰

Request Body

{ "fullName": String, "username": String }

Response

User

비밀번호 변경 : /my-page - 비밀번호 변경

내 계정 비밀번호를 변경합니다.
PUT /settings/update-password

Request Header

Authorization: bearer JWT토큰

Request Body

{ "password": String }

🗂 포스트(카드)

포스트(카드) 목록 : / , /cards/today, /cards/favorite(user meta로 분리)

특정 채널의 포스트 목록을 불러옵니다.
GET /posts/channel/{channelId}

Request Params

offset: Optional<Number> limit: Optional<Number>

Response

Post[]

특정 사용자의 포스트(카드) 목록 : /cards/my

특정 사용자의 포스트 목록을 불러옵니다.
GET /posts/author/{authorId}

Request Params

offset: Optional<Number> limit: Optional<Number>

Response

Post[]

포스트(카드) 생성 : /card/create

특정 채널에 포스트를 작성합니다.
POST /posts/create

Request Header

Authorization: bearer JWT토큰

Request Body

FormData
title: String, image: Binary | null, channelId: String

특정 포스트 상세 보기 : /card/{cardId}

특정 포스트의 정보를 불러옵니다.
POST /posts/{postId}

Response

Post

내 포스트(카드) 수정하기 : /card/{cardId}/update

내가 작성한 포스트를 수정합니다.
PUT /posts/update

Request Header

Authorization: bearer JWT토큰

Request Body

FormData 이미지를 삭제하려면 imageToDeletePublicId에 imagePublicId를 넣어주세요.
postId: String title: String image: Binary | null imageToDeletePublicId: Optional<String> channelId: String

내 포스트(카드) 삭제하기 : /card/{cardId} - 삭제

내가 작성한 포스트를 삭제합니다.
DELETE /posts/delete

Request Header

Authorization: bearer JWT토큰

Request Body

{ "id": String }

❤️ 좋아요

특정 포스트 좋아요

특정 포스트에 좋아요합니다.
POST /likes/create

Request Header

Authorization: bearer JWT토큰

Request Body

{ "postId": String }

Response

Like

특정 포스트 좋아요 취소

특정 포스트에 좋아요한 것을 취소합니다.
DELETE /likes/delete

Request Header

Authorization: bearer JWT토큰

Request Body

{ "id": String // 좋아요ID }

Response

Like

⭐️ 즐겨찾기

특정 포스트 즐겨찾기(확인)

나의 정보를 변경합니다.
PUT /settings/update-user

Request Header

Authorization: bearer JWT토큰

Request Body

{ "meta": String }

Response

User

특정 포스트 즐겨찾기 취소(확인)

나의 정보를 변경합니다.
PUT /settings/update-user

Request Header

Authorization: bearer JWT토큰

Request Body

{ "meta": String }

Response

User

💬 댓글

comment 객체
{  id: '1234',  comment: '안녕! 클레오파트라!',  author: '파라오',  createdAt: '2020-10-26T00:33:31.554Z',  updatedAt: '2020-10-32T00:33:31.554Z',  cardId: '6172145b54db072125ad91de'(보류) }
response post 객체
{  "_id": String,  "comment": String,  "author": User,  "post": String, // 포스트 id  "createdAt": String,  "updatedAt": String }

특정 포스트에 댓글 추가

특정 포스트에 댓글을 작성합니다.
POST /comments/create

Request Header

Authorization: bearer JWT토큰

Request Body

{ "comment": String, "postId": String }

Response

Comment

특정 포스트에 댓글 삭제

특정 포스트에 작성한 내 댓글을 삭제합니다.
DELETE /comments/delete

Request Header

Authorization: bearer JWT토큰

Request Body

{ "id": String // comment Id }

Response

Comment

특정 댓글 상세 보기 (확인)

 
 

모델

🧑🏻‍💻 유저

user 객체
{  id: '616d869182a78113d401bedc', ✅  userName: '테스트보이', ✅  emali: 'waffleCard@naver.com', ✅ }
response user 객체
{  "coverImage": String, // 커버 이미지  "image": String, // 프로필 이미지  "role": String,  "emailVerified": Boolean, // 사용되지 않음  "banned": Boolean, // 사용되지 않음  "isOnline": Boolean,  "posts": Post[],  "likes": Like[],  "comments": String[],  "followers": [],  "following": [   {      "_id": "6169e91316cb2265df003c6d",      "user": "6169e58216cb2265df003bf4",      "follower": "6169e206aa57d952c6dc1edd",      "createdAt": "2021-10-15T20:48:19.816Z",      "updatedAt": "2021-10-15T20:48:19.816Z",      "__v": 0   } ],  "notifications": Notification[],  "messages": Message[],  "_id": String,  ✅  "fullName": String,  "userName": String, ✅  "email": String,  ✅  "createdAt": String,  "updatedAt": String }
 

🗂 포스트(카드)

card 객체
{  id: '6172145b54db072125ad91de', ✅  author: '파라오', ✅  emoji: '👽', (meta)  cardColor: 'rgba(92, 107, 192, 1)', (meta)  createdAt: '2021-10-26T00:33:31.554Z', ✅  updatedAt: '2021-10-31T00:33:31.554Z', ✅  bookmarkToggle: false, (유저로부터)  bookmarkCount: 12, (meta)  likeToggle: true, (유저로부터)  likeCount: 27, ✅ (or meta)  hashTags: [ (meta)    '지우개방',    '쏟아내고가',    'ㄴr는 ㄱr끔',    '눈물을 흘린ㄷr',    '이 해시태그는 매우 긴 해시태그 입니다.', ],  comments: [{...}, {...}, {...},], ✅ (+ 일일히 불러와서 재할당 필요) },
response post 객체
{  "likes": Like[], ✅  "comments": Comment[], ✅  "_id": String, ✅ "image": Optional<String>, ❌ "imagePublicId": Optional<String>, ❌  "title": String, ❌  "channel": Channel, ❌  "author": User, ✅  "createdAt": String, ✅  "updatedAt": String, ✅  "meta": Object ✅ (emoji, cardColor, bookmarkCount, likeCount(고려), hashTags) }