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) }