원본 API
👉 바로가기
취업 게시판 채널 id : 64f57dc874128417c268916c
연애 게시판 채널 id : 64f57dd474128417c2689170
인간관계 게시판 채널 id : 64f96db08a4e9a3147d9117a
돈 게시판 채널 id : 64f96d8e8a4e9a3147d91176
limit이 10이고 offset이 0이면 20 ~ 11, offset이 1이면 19 ~ 10, offset이 10이면 10 ~ 1
API Host
https://kdt.frontend.4th.programmers.co.kr
생성된 아이디 목록
테스터1
id : “64f839058a4e9a3147d91003”
token : “eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjY0ZjgzOTA1OGE0ZTlhMzE0N2Q5MTAwMyIsImVtYWlsIjoidGVzdGVyMSJ9LCJpYXQiOjE2OTM5ODkxMjV9.5VAJ4dZFsCEjfZvCAi_D4PA8jopy5X1JaDmMxtNlCAw”
password: "$2b$10$WzO90kI2qUC6E9woeavcq.4SOqd.e/DmAH4XJiRAu1nFTrhIi9oFC”
테스터2
id: “64f840128a4e9a3147d9100f”
token: “eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjY0Zjg0MDEyOGE0ZTlhMzE0N2Q5MTAwZiIsImVtYWlsIjoidGVzdGVyMiJ9LCJpYXQiOjE2OTM5OTA5MzB9.sfLiVe2DsKxeC-hL827zEcb_xr4wXHbZ0bNTPVWZojI”
password: "$2b$10$Bv4EZ/92NuyVFXgT1fyL9.WyO3.iyjPiC7dE7UwdTeQekf3SCA1W.”
송인재
{ "user": { "role": "Regular", "emailVerified": false, "banned": false, "isOnline": false, "posts": [], "likes": [], "comments": [], "followers": [], "following": [], "notifications": [], "messages": [], "_id": "64f966058a4e9a3147d9112c", "fullName": "ISTP", "email": "injae", "password": "$2b$10$HOQdm8mXObn5X2RHvBHvDOk3cuOpAQQ7H7mvPOWk45tx5kFRUJyGO", "createdAt": "2023-09-07T05:56:21.395Z", "updatedAt": "2023-09-07T06:13:02.572Z", "__v": 0, "username": "송인재" }, "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjY0Zjk2NjA1OGE0ZTlhMzE0N2Q5MTEyYyIsImVtYWlsIjoiaW5qYWUifSwiaWF0IjoxNjk0MDY2MTgxfQ.mjcWUouFCo_tGszkJVR27Rih5anC9-ABtHGfXS-qZ5I" }
이종현
{ "user": { "role": "Regular", "emailVerified": false, "banned": false, "isOnline": false, "posts": [], "likes": [], "comments": [], "followers": [], "following": [], "notifications": [], "messages": [], "_id": "64f966868a4e9a3147d91132", "fullName": "ISFP", "email": "jonghyun", "password": "$2b$10$Q0zHxL.p7Ml0RqoEZbRteeBpJG3kuIvSLXe8AJK.EWhNVJnKgKr4q", "createdAt": "2023-09-07T05:58:30.483Z", "updatedAt": "2023-09-07T06:12:17.166Z", "__v": 0, "username": "이종현" }, "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjY0Zjk2Njg2OGE0ZTlhMzE0N2Q5MTEzMiIsImVtYWlsIjoiam9uZ2h5dW4ifSwiaWF0IjoxNjk0MDY2MzEwfQ.EAliOnF-JOX4pI9ryQmc3Gri27ybmFGbKn9eC1rJScA" }
김희석
{ "user": { "role": "Regular", "emailVerified": false, "banned": false, "isOnline": true, "posts": [ "64f58b69409b5d3079afb156" ], "likes": [], "comments": [ "64f591d98a4e9a3147d90d8a" ], "followers": [], "following": [], "notifications": [], "messages": [ "64f069bd7f4f921074b1da87" ], "_id": "64f4397b9936c0166971f618", "fullName": "INTP", "email": "heeseok", "password": "$2b$10$YQ9CejFS/5HzL0BLVzCnkOcB6bG2OyWWZBCyE0aiNpoaP9AvOe6Me", "createdAt": "2023-09-03T07:44:59.066Z", "updatedAt": "2023-09-07T06:15:12.869Z", "__v": 0, "username": "김희석" }, "token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjY0ZjQzOTdiOTkzNmMwMTY2OTcxZjYxOCIsImVtYWlsIjoiaGVlc2VvayJ9LCJpYXQiOjE2OTQwNjcyNzl9.klEKQeVFr-ZXLHV4sT5Hf_r8vSuFbBDDgoJzd-wJDAw" }
정찬욱
{ "user": { "role": "Regular", "emailVerified": false, "banned": false, "isOnline": false, "posts": [], "likes": [], "comments": [], "followers": [], "following": [], "notifications": [], "messages": [], "_id": "64f967168a4e9a3147d9113b", "fullName": "{'nickname': '정찬욱', 'mbti': 'INFJ'}", "email": "seeyoujeong", "password": "$2b$10$zWh1OpLiz2zRXs/UN58yseYuU0hUkFjqoRdeS3CcEGgdBSXNh2/h2", "createdAt": "2023-09-07T06:00:54.628Z", "updatedAt": "2023-09-07T06:00:54.628Z", "__v": 0 }, "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjY0Zjk2NzE2OGE0ZTlhMzE0N2Q5MTEzYiIsImVtYWlsIjoic2VleW91amVvbmcifSwiaWF0IjoxNjk0MDY2NDU0fQ.1HBY7hDChh8ejXK2CGMWCdkfbultX2cZ2-pzrFfygZA" }
이찬
{ "user": { "role": "Regular", "emailVerified": false, "banned": false, "isOnline": false, "posts": [], "likes": [], "comments": [], "followers": [], "following": [], "notifications": [], "messages": [], "_id": "64f9674b8a4e9a3147d91147", "fullName": "ISFP", "email": "leechan", "password": "$2b$10$DFcT8iGettvDO.iKfgDb9eJRC4v.0U0Nu7Dibef5S0okRun7TFsp.", "createdAt": "2023-09-07T06:01:47.815Z", "updatedAt": "2023-09-07T06:10:24.521Z", "__v": 0, "username": "이찬" }, "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjY0Zjk2NzRiOGE0ZTlhMzE0N2Q5MTE0NyIsImVtYWlsIjoibGVlY2hhbiJ9LCJpYXQiOjE2OTQwNjY1MDd9.W3hOcsTFO8d1TaWqaDLvUD-hUjUZa4n5104beK5natk" }
모델
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, "email": String, "createdAt": String, "updatedAt": String }
Channel
{ "authRequired": Boolean, // 사용되지 않음 "posts": String[], "_id": String, "name": String, "description": String, "createdAt": String, "updatedAt": String }
Post
{ "likes": Like[], "comments": Comment[], "_id": String, "image": Optional<String>, "imagePublicId": Optional<String>, "title": String, "channel": Channel, "author": User, "createdAt": String, "updatedAt": String }
Like
{ "_id": String, "user": String, // 사용자 id "post": String, // 포스트 id "createdAt": String, "updatedAt": String }
Comment
{ "_id": String, "comment": String, "author": User, "post": String, // 포스트 id "createdAt": String, "updatedAt": String }
Notification
{ "seen": Boolean, "_id": String, "author": User, "user": User | String, "post": Nullable<String>, // 포스트 id "follow": Optional<String>, // 사용자 id "comment": Optional<Comment>, "message": Optional<String>, // 메시지 id "createdAt": String, "updatedAt": String }
Follow
{ "_id": String, "user": String, // 사용자 id "follower": String, // 사용자 id "createdAt": String, "updatedAt": String }
Conversation
{ "_id": String[], "message": String, "sender": User, "receiver": User, "seen": Boolean, "createdAt": String }
Message
{ "_id": String, "message": String, "sender": User, "receiver": User, "seen": Boolean, "createdAt": String, "updatedAt": String }
API 안내
인증
로그인 - POST /login
Request Body
{ "email": "heeseok", "password": "qwer1234" }
Response
200 OK
{ "user": User, "token": String }
회원가입 - POST /signup
Request Body
{ "email": "heeseok", // id: 5~20자의 영문 소문자, 숫자와 특수기호(_),(-)만 사용 가능 "fullName": "INTP", // mbti "username": "머쓱이", // 닉네임: 2글자 이상 8글자 미만 "password": "qwer1234" // 영어 + 숫자포함 8자 이상 }
Response
200 OK
{ "user": User, "token": String }
로그아웃 - POST /logout
없음
인증 확인 - GET /auth-user
Request Header
// header에 넣어줘야 할 것 Authorization: `bearer ${jwt}`
Response
User
사용자
사용자 목록 GET /users/get-users?offset=0&limit=10
Request Params
offset: Optional 기본값 0 limit: Optional
Response
User[]
사용자 정보 GET /users/{userId}
Request Body
User[]
프로필 이미지 정보 POST /users/upload-photo
Request Header
// header에 넣어줘야 할 것 Authorization: `bearer ${jwt}`
Request Body
FormData
isCover
를 반드시 false
로 넣어야 합니다.isCover: false image: Binary
Response
User
설정
내 정보 변경 PUT /settings/update-user
Request Header
// header에 넣어줘야 할 것 Authorization: `bearer ${jwt}`
Request Body
{ "fullName": String, "username": String }
Response
User
비밀번호 변경 PUT /settings/update-password
Request Header
// header에 넣어줘야 할 것 Authorization: `bearer ${jwt}`
Request Body
{ "password": String }
채널
- 태그별로 생성
포스트
특정 채널의 포스트 목록 GET /posts/channel/{channelId}?offset=${offset}&limit=${limit}
Request Params
offset: Optional<Number> limit: Optional<Number>
Response
Post[]
{ [ { "likes": [], "comments": [], "_id": "64f583f374128417c2689233", "title": "{title:'테스트',body:'테스트',}", "channel": { "authRequired": false, "posts": [ "64f57ed574128417c2689180", "64f583df74128417c26891b5", "64f583e074128417c26891bc", "64f583e074128417c26891c3", "64f583e174128417c26891ca", "64f583e174128417c26891d1", "64f583e174128417c26891d8", "64f583e274128417c26891df", "64f583e274128417c26891e6", "64f583e374128417c26891ed", "64f583e474128417c26891f4", "64f583e474128417c26891fb", "64f583e474128417c2689202", "64f583f074128417c2689209", "64f583f074128417c2689210", "64f583f174128417c2689217", "64f583f174128417c268921e", "64f583f274128417c2689225", "64f583f274128417c268922c", "64f583f374128417c2689233", "64f583f374128417c268923a" ], "_id": "64f57dd474128417c2689170", "name": "연애", "description": "연애게시판", "createdAt": "2023-09-04T06:48:52.503Z", "updatedAt": "2023-09-04T07:14:59.603Z", "__v": 0 }, "author": { "role": "SuperAdmin", "emailVerified": true, "banned": false, "isOnline": false, "posts": [ "64f57ec674128417c2689179", "64f57ed574128417c2689180", "64f583df74128417c26891b5", "64f583e074128417c26891bc", "64f583e074128417c26891c3", "64f583e174128417c26891ca", "64f583e174128417c26891d1", "64f583e174128417c26891d8", "64f583e274128417c26891df", "64f583e274128417c26891e6", "64f583e374128417c26891ed", "64f583e474128417c26891f4", "64f583e474128417c26891fb", "64f583e474128417c2689202", "64f583f074128417c2689209", "64f583f074128417c2689210", "64f583f174128417c2689217", "64f583f174128417c268921e", "64f583f274128417c2689225", "64f583f274128417c268922c", "64f583f374128417c2689233", "64f583f374128417c268923a" ], "likes": [], "comments": [], "followers": [], "following": [], "notifications": [], "messages": [], "_id": "64edba4945b24d125e786ba1", "fullName": "Admin", "email": "admin@programmers.co.kr", "createdAt": "2023-08-29T09:28:41.507Z", "updatedAt": "2023-09-04T07:14:59.604Z" }, "createdAt": "2023-09-04T07:14:59.109Z", "updatedAt": "2023-09-04T07:14:59.109Z", "__v": 0 } ] }
특정 사용자의 포스트 목록 GET /posts/author/{authorId}
Request Params
offset: Optional<Number> limit: Optional<Number>
Response
Post[]
[ { "likes": [], "comments": [], "_id": "64f58b69409b5d3079afb156", "title": "연애고민1", "channel": { "authRequired": false, "posts": [ "64f57ed574128417c2689180", "64f583df74128417c26891b5", "64f583e074128417c26891bc", "64f583e074128417c26891c3", "64f583e174128417c26891ca", "64f583e174128417c26891d1", "64f583e174128417c26891d8", "64f583e274128417c26891df", "64f583e274128417c26891e6", "64f583e374128417c26891ed", "64f583e474128417c26891f4", "64f583e474128417c26891fb", "64f583e474128417c2689202", "64f583f074128417c2689209", "64f583f074128417c2689210", "64f583f174128417c2689217", "64f583f174128417c268921e", "64f583f274128417c2689225", "64f583f274128417c268922c", "64f583f374128417c2689233", "64f583f374128417c268923a", "64f58b69409b5d3079afb156" ], "_id": "64f57dd474128417c2689170", "name": "연애", "description": "연애게시판", "createdAt": "2023-09-04T06:48:52.503Z", "updatedAt": "2023-09-04T07:46:49.639Z", "__v": 0 }, "author": { "role": "Regular", "emailVerified": false, "banned": false, "isOnline": false, "posts": [ "64f58b69409b5d3079afb156" ], "likes": [], "comments": [], "followers": [], "following": [], "notifications": [], "messages": [], "_id": "64f4397b9936c0166971f618", "fullName": "{'name':'hee','mbti':'intp'}", "email": "heeseok", "createdAt": "2023-09-03T07:44:59.066Z", "updatedAt": "2023-09-04T07:47:20.753Z", "__v": 0 }, "createdAt": "2023-09-04T07:46:49.627Z", "updatedAt": "2023-09-04T07:46:49.627Z", "__v": 0 } ]
특정 채널에 포스트 작성하기 POST /posts/create
Request Header
Authorization: bearer JWT토큰
Request Body
FormData
{ "title": String, // "{title:'test',body:'test'}", "image": Binary | null, "channelId": String, // '채널id' }
특정 포스트 상세 보기 GET /posts/{postId}
Response
Post
{ "likes": [], "comments": [ { "_id": "64f591d98a4e9a3147d90d8a", "comment": "그냥 헤어지삼", "author": { "role": "Regular", "emailVerified": false, "banned": false, "isOnline": false, "posts": [ "64f58b69409b5d3079afb156" ], "likes": [], "comments": [ "64f591d98a4e9a3147d90d8a" ], "followers": [], "following": [], "notifications": [], "messages": [], "_id": "64f4397b9936c0166971f618", "fullName": "{'name':'hee','mbti':'intp'}", "email": "heeseok", "createdAt": "2023-09-03T07:44:59.066Z", "updatedAt": "2023-09-04T08:14:17.256Z", "__v": 0 }, "post": "64f58b69409b5d3079afb156", "createdAt": "2023-09-04T08:14:17.233Z", "updatedAt": "2023-09-04T08:14:17.233Z", "__v": 0 } ], "_id": "64f58b69409b5d3079afb156", "title": "{title:'연애고민1',body:'여자친구가 바람을 피웠습니다',}", "channel": { "authRequired": false, "posts": [ "64f583f274128417c268922c", "64f58b69409b5d3079afb156" ], "_id": "64f57dd474128417c2689170", "name": "연애", "description": "연애게시판", "createdAt": "2023-09-04T06:48:52.503Z", "updatedAt": "2023-09-04T08:06:19.294Z", "__v": 0 }, "author": { "role": "Regular", "emailVerified": false, "banned": false, "isOnline": false, "posts": [ "64f58b69409b5d3079afb156" ], "likes": [], "comments": [ "64f591d98a4e9a3147d90d8a" ], "followers": [], "following": [], "notifications": [], "messages": [], "_id": "64f4397b9936c0166971f618", "fullName": "{'name':'hee','mbti':'intp'}", "email": "heeseok", "createdAt": "2023-09-03T07:44:59.066Z", "updatedAt": "2023-09-04T08:14:17.256Z", "__v": 0 }, "createdAt": "2023-09-04T07:46:49.627Z", "updatedAt": "2023-09-04T08:14:17.254Z", "__v": 0 }
내가 작성한 포스트 수정하기 PUT /posts/update
Request Header
Authorization: bearer JWT토큰
Request Body
FormData
이미지를 삭제하려면
imageToDeletePublicId
에 imagePublicId
를 넣어주세요.{ "postId": String "title": String "image": Binary | null "imageToDeletePublicId": Optional // 불필요 "channelId": String }
내가 작성한 포스트 삭제하기 DELETE /posts/delete
Request Header
// header에 넣어줘야 할 것 Authorization: `bearer ${jwt}`
Request Body
{ "id": String }
Response Body
{ "likes": [], "comments": [], "_id": "64f583f374128417c268923a", "title": "{title:'테스트',body:'테스트',}", "channel": "64f57dd474128417c2689170", "author": "64edba4945b24d125e786ba1", "createdAt": "2023-09-04T07:14:59.599Z", "updatedAt": "2023-09-04T07:14:59.599Z", "__v": 0 }
좋아요
특정 포스트 좋아요 POST /likes/create
Request Header
Authorization: bearer JWT토큰
Request Body
{ "postId": String }
Response
Like
특정 포스트 좋아요 취소 DELETE /likes/delete
Request Header
Authorization: bearer JWT토큰
Request Body
{ "postId": String }
Response
Like
댓글
특정 포스트에 댓글 달기 POST /comments/create
Request Header
Authorization: bearer JWT토큰
Request Body
{ "comment": String, "postId": String }
Response Body
Comment
{ "_id": "64f591d98a4e9a3147d90d8a", "comment": "그냥 헤어지삼", "author": { "role": "Regular", "emailVerified": false, "banned": false, "isOnline": false, "posts": [ "64f58b69409b5d3079afb156" ], "likes": [], "comments": [], "followers": [], "following": [], "notifications": [], "messages": [], "_id": "64f4397b9936c0166971f618", "fullName": "{'name':'hee','mbti':'intp'}", "email": "heeseok", "password": "$2b$10$YQ9CejFS/5HzL0BLVzCnkOcB6bG2OyWWZBCyE0aiNpoaP9AvOe6Me", "createdAt": "2023-09-03T07:44:59.066Z", "updatedAt": "2023-09-04T07:47:20.753Z", "__v": 0 }, "post": "64f58b69409b5d3079afb156", "createdAt": "2023-09-04T08:14:17.233Z", "updatedAt": "2023-09-04T08:14:17.233Z", "__v": 0 }
특정 포스트에 작성한 내 댓글 지우기 DELETE /comments/delete
Request Header
Authorization: bearer JWT토큰
Request Body
{ "id": String }
Response
Comment
알림
나의 알림 목록 GET /notifications
Request Header
Authorization: bearer JWT토큰
Response
Notification[]
알림 확인 처리 - PUT /notifications/seen
Request Header
Authorization: bearer JWT토큰
알림 생성 - POST /notifications/create
상대방에게 알림을 보냅니다.
원래는 서버에서 해주는게 맞는 작업이지만 API 호출로 알림을 보낼 수 있도록 작성했습니다.
Request Header
Authorization: bearer JWT토큰
Request Body
notificationTypeId
는 type에 해당하는 객체의 id를 넣어주세요.- COMMENT일 경우엔 댓글 id
- FOLLOW일 경우엔 팔로우 id
- LIKE일 경우엔 좋아요 id
- MESSAGE일 경우엔 메시지 id
postId
는 type이 FOLLOW일 경우엔 null로 보내주세요.{ "notificationType": "COMMENT" | "FOLLOW" | "LIKE" | "MESSAGE", "notificationTypeId": String, "userId": String, "postId": Nullable<String> }
Response
Notification
메시지
나의 메시지함 - GET /messages/conversations
Request Header
Authorization: bearer JWT토큰
Resonse
Conversation[]
특정 사용자와 소통한 메시지 목록 - GET /messages?userId=${userId}
Request Header
Authorization: bearer JWT토큰
특정 사용자에게 메시지 전송 - POST /messages/create
Request Header
Authorization: bearer JWT토큰
Request Body
{ "message": String, "receiver": String // 사용자 id }
메시지 확인 처리 - PUT /messages/update-seen
Request Header
Authorization: bearer JWT토큰
Request Body
{ "sender": String // 사용자 id }
사용자 검색
사용자 검색 - GET /search/users/{query}
전체 검색 (포스트, 사용자) - GET /search/all/{query}
커스텀 API
유저 정보
- fullName: mbti, 자기소개
- 패스워드 : 영어 + 숫자포함 8자 이상
- 아이디 : 아이디: 5~20자의 영문 소문자, 숫자와 특수기호(_),(-)만 사용 가능합니다.
- 닉네임 : 2글자 이상 8글자 미만
알림 & 쪽지
- 알림을 눌렀을때 API를 가져오기
- 댓글, 좋아요 받기
- 쪽지 기능은 시간이 있을때
- 알림 클릭시 페이지로 이동