๐Ÿ“„

API๋ฌธ์„œ - SNS

 
postman api์—์„œ importํ•˜๊ธฐ ์ด์ƒ, ์ถ”๊ฐ€ โ‡’ ์ง„ํ™˜์—๊ฒŒ
 
 
# ์†Œ์…œ ๋„คํŠธ์›Œํฌ ํ”„๋กœ์ ํŠธ React ํ˜น์€ Vue.js๋ฅผ ์ด์šฉํ•˜์—ฌ ์†Œ์…œ ๋„คํŠธ์›Œํฌ ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์ธ ์„œ๋ฒ„ API๋Š” ์ œ๊ณต๋˜๋ฉฐ ๋””์ž์ธ๊ณผ ์•„ํ‚คํ…์ฒ˜๋Š” ์ž์œ ๋กญ๊ฒŒ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์ค‘ ์ฑ„๋„์€ ์„œ๋ฒ„์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ๊ณต๋˜๋Š” ์ฑ„๋„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. * React * Vue * JavaScript * ๋ง›์ง‘ * ์งˆ์˜์‘๋‹ต * ๊ฐ ํŒ€ ์ฑ„๋„ > ์„œ๋ฒ„ API๋Š” ๋ชจ๋“  ํŒ€์ด ๊ณต์šฉ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž‘์„ฑํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฃผ์˜ํ•ด์ฃผ์„ธ์š”! ## ๊ธฐ๋ณธ ์š”๊ตฌ์‚ฌํ•ญ **ํ•„์ˆ˜** - ์‚ฌ์šฉ์ž๋Š” ํšŒ์›๊ฐ€์ž…๊ณผ ๋กœ๊ทธ์ธ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - ๊ฐ€์ž…, ๋กœ๊ทธ์ธ, ์ธ์ฆ ๊ฒ€์‚ฌ - ์‚ฌ์šฉ์ž๋Š” ์ฑ„๋„์— ์˜ฌ๋ผ์˜จ ๊ธ€์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - ๊ธ€์“ฐ๊ธฐ, ์ฑ„๋„ ๋ชฉ๋ก, ์ฑ„๋„ ๋‚ด ๊ธ€ ๋ชฉ๋ก - ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๋Š” ์ฑ„๋„์— ์˜ฌ๋ผ์˜จ ๊ธ€์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๋Š” ์ฑ„๋„์— ํฌ์ŠคํŠธ๋ฅผ ๋‚จ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๋Š” ํฌ์ŠคํŠธ๋ฅผ ์ข‹์•„์š” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๋Š” ํฌ์ŠคํŠธ์— ๋Œ“๊ธ€์„ ๋‚จ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - SPA ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”. - ์—‰๋šฑํ•œ ํŽ˜์ด์ง€์— ์ ‘์†ํ•˜๋ฉด 404 ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ์„ธ์š”. **์„ ํƒ** * ์‚ฌ์šฉ์ž๋Š” ํ˜„์žฌ ์ ‘์† ์ค‘์ธ ์‚ฌ์šฉ์ž๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. * ์‚ฌ์šฉ์ž๋Š” ๊ฐ€์ž…์ž ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. * ์‚ฌ์šฉ์ž๋Š” ๊ฐ€์ž…์ž๋ฅผ ์ด๋ฆ„์œผ๋กœ ๊ฒ€์ƒ‰์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. * ์‚ฌ์šฉ์ž๋Š” ๊ฐ€์ž…์ž์˜ ์ •๋ณด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. * ์‚ฌ์šฉ์ž๋Š” ํฌ์ŠคํŠธ ํ˜น์€ ๊ฐ€์ž…์ž๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. * ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๋Š” ์ž์‹ ์˜ ์ •๋ณด๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. * ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๋Š” ์ž์‹ ์˜ ์•Œ๋ฆผ ๋ชฉ๋ก์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. * ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๋Š” ๋‹ค๋ฅธ ๊ฐ€์ž…์ž์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. * ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๋Š” ์ž์‹ ์—๊ฒŒ ์˜จ ๋ฉ”์‹œ์ง€ ๋ชฉ๋ก์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. * ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๋Š” ํŠน์ • ์‚ฌ์šฉ์ž์™€์˜ ๋ฉ”์‹œ์ง€ ๋Œ€ํ™” ๋‚ด์—ญ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ## ๋ณด๋„ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ * ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๋Š” ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ๋ณ€๊ฒฝ ๋ฐ ํฌ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์ด๋ฏธ์ง€๋ฅผ ์ฒจ๋ถ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ ์—…๋กœ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด์„ธ์š”. * ๋‹คํฌ ๋ชจ๋“œ๋ฅผ ์ ์šฉํ•ด๋ณด์„ธ์š”. * WebSocket์„ ์ด์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ›์•„๋ณด์„ธ์š”. * WebSocket์„ ์ด์šฉํ•˜์—ฌ ์•Œ๋ฆผ์„ ๋ฐ›๊ณ  ์•Œ๋ฆผ์„ Context์™€ localStorage๋กœ ๊ด€๋ฆฌํ•ด๋ณด์„ธ์š”. ## API ์•ˆ๋‚ด API Host๋Š” `http://13.209.30.200` ์ž…๋‹ˆ๋‹ค. API ์‚ฌ์šฉ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ฌธ์˜๋ฐ”๋ž๋‹ˆ๋‹ค. * ์ฃผ์˜ํ•  ์ ์œผ๋กœ API์— ์˜ˆ์™ธ์ฒ˜๋ฆฌ๊ฐ€ ์•ˆ๋˜์–ด์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ํ”„๋ก ํŠธ์—”๋“œ์—์„œ Form Validation์„ ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. * ์‘๋‹ต์ด ๋ชจ๋ธ๋กœ ๋˜์–ด์žˆ๋Š” ๊ฒฝ์šฐ ํ•˜๋‹จ ๋ชจ๋ธ ์•ˆ๋‚ด๋ฅผ ํ™•์ธํ•ด์ฃผ์„ธ์š”. * Optional<Type>์œผ๋กœ ์ ํ˜€์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ’์„ ๋„ฃ์ง€ ์•Š์•„๋„ ๋™์ž‘ํ•˜๋Š” ํ•„๋“œ์ž…๋‹ˆ๋‹ค. * Nullable<Type>์œผ๋กœ ์ ํ˜€์žˆ๋Š” ๊ฒฝ์šฐ null์ด ๋‚ด๋ ค์˜ฌ ์ˆ˜ ์žˆ๋Š” ํ•„๋“œ์ž…๋‹ˆ๋‹ค. * []๋Š” ๋ฆฌ์ŠคํŠธ ํƒ€์ž…์ž…๋‹ˆ๋‹ค. * API URL์— ์ค‘๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ์ ธ ์žˆ๋Š” ๋ถ€๋ถ„์€ Path Variable ์ž…๋‹ˆ๋‹ค. ### ์ธ์ฆ #### ๋กœ๊ทธ์ธ ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฉ”์ผ๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ์„œ๋น„์Šค์— ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค. > POST /login ##### Request Body ```json { "email": String, "password": String } ``` ##### Response 200 OK ```json { "user": User, "token": String } ``` #### ํšŒ์›๊ฐ€์ž… ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฉ”์ผ๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ์„œ๋น„์Šค์— ๊ฐ€์ž…ํ•ฉ๋‹ˆ๋‹ค. > POST /signup ##### Request Body ```json { "email": String, "fullName": String, "password": String } ``` ##### Response 200 OK ```json { "user": User, "token": String } ``` #### ๋กœ๊ทธ์•„์›ƒ ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์•„์›ƒ ํ•ฉ๋‹ˆ๋‹ค. > POST /logout #### ์ธ์ฆ ํ™•์ธ ์‚ฌ์šฉ์ž๊ฐ€ ์ธ์ฆ์ด ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. > GET /auth-user ##### Request Header ``` Authorization: bearer JWTํ† ํฐ ``` ##### Response ``` User ``` ### ์‚ฌ์šฉ์ž #### ์‚ฌ์šฉ์ž ๋ชฉ๋ก ์‚ฌ์šฉ์ž ๋ชฉ๋ก์„ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค. > GET /users/get-users ##### Request Params ``` offset: Optional<Number> limit: Optional<Number> ``` ##### Response ``` User[] ``` #### ํ˜„์žฌ ์ ‘์† ์ค‘์ธ ์‚ฌ์šฉ์ž ๋ชฉ๋ก ํ˜„์žฌ ์ ‘์† ์ค‘์ธ ์‚ฌ์šฉ์ž ๋ชฉ๋ก์„ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค. > GET /users/online-users ##### Response ``` User[] ``` #### ์‚ฌ์šฉ์ž ์ •๋ณด ํŠน์ • ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค. > GET /users/{userId} ##### Response ``` User ``` #### ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ๋ณ€๊ฒฝ ๋‚˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. > POST /users/upload-photo ##### Request Header ``` Authorization: bearer JWTํ† ํฐ ``` ##### Request Body FormData `isCover`๋ฅผ ๋ฐ˜๋“œ์‹œ `false`๋กœ ๋„ฃ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ``` isCover: false image: Binary ``` ##### Response ``` User ``` #### ์ปค๋ฒ„ ์ด๋ฏธ์ง€ ๋ณ€๊ฒฝ ๋‚˜์˜ ์ปค๋ฒ„ ์ด๋ฏธ์ง€๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. > POST /users/upload-photo ##### Request Header ``` Authorization: bearer JWTํ† ํฐ ``` ##### Request Body FormData `isCover`๋ฅผ ๋ฐ˜๋“œ์‹œ `true`๋กœ ๋„ฃ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ``` isCover: true image: Binary ``` ##### Response ``` User ``` ### ์„ค์ • #### ๋‚ด ์ •๋ณด ๋ณ€๊ฒฝ ๋‚˜์˜ ์ •๋ณด๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. > PUT /settings/update-user ##### Request Header ``` Authorization: bearer JWTํ† ํฐ ``` ##### Request Body ```json { "fullName": String, "username": String } ``` ##### Response ``` User ``` #### ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ๋‚ด ๊ณ„์ • ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. > PUT /settings/update-password ##### Request Header ``` Authorization: bearer JWTํ† ํฐ ``` ##### Request Body ```json { "password": String } ``` ### ์ฑ„๋„ #### ์ฑ„๋„ ๋ชฉ๋ก ์ฑ„๋„ ๋ชฉ๋ก์„ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค. > GET /channels ##### Response ``` Channel[] ``` #### ์ฑ„๋„ ์ •๋ณด ํŠน์ • ์ฑ„๋„ ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค. > GET /channels/{channelName} ##### Response ``` Channel ``` ### ํฌ์ŠคํŠธ #### ํŠน์ • ์ฑ„๋„์˜ ํฌ์ŠคํŠธ ๋ชฉ๋ก ํŠน์ • ์ฑ„๋„์˜ ํฌ์ŠคํŠธ ๋ชฉ๋ก์„ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค. > GET /posts/channel/{channelId} ##### Request Params ```json offset: Optional<Number> limit: Optional<Number> ``` ##### Response ``` Post[] ``` #### ํŠน์ • ์‚ฌ์šฉ์ž์˜ ํฌ์ŠคํŠธ ๋ชฉ๋ก ํŠน์ • ์‚ฌ์šฉ์ž์˜ ํฌ์ŠคํŠธ ๋ชฉ๋ก์„ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค. > GET /posts/author/{authorId} ##### Request Params ```json offset: Optional<Number> limit: Optional<Number> ``` ##### Response ``` Post[] ``` #### ํŠน์ • ์ฑ„๋„์— ํฌ์ŠคํŠธ ์ž‘์„ฑํ•˜๊ธฐ ํŠน์ • ์ฑ„๋„์— ํฌ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. > POST /posts/create ##### Request Header ``` Authorization: bearer JWTํ† ํฐ ``` ##### Request Body FormData ``` title: String, image: Binary | null, channelId: String ``` #### ํŠน์ • ํฌ์ŠคํŠธ ์ƒ์„ธ ๋ณด๊ธฐ ํŠน์ • ํฌ์ŠคํŠธ์˜ ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค. > POST /posts/{postId} ##### Response ``` Post ``` #### ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ํฌ์ŠคํŠธ ์ˆ˜์ •ํ•˜๊ธฐ ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ํฌ์ŠคํŠธ๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. > 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 ``` #### ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ํฌ์ŠคํŠธ ์‚ญ์ œํ•˜๊ธฐ ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ํฌ์ŠคํŠธ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. > DELETE /posts/delete ##### Request Header ``` Authorization: bearer JWTํ† ํฐ ``` ##### Request Body ```json { "id": String } ``` ### ์ข‹์•„์š” #### ํŠน์ • ํฌ์ŠคํŠธ ์ข‹์•„์š” ํŠน์ • ํฌ์ŠคํŠธ์— ์ข‹์•„์š”ํ•ฉ๋‹ˆ๋‹ค. > POST /likes/create ##### Request Header ``` Authorization: bearer JWTํ† ํฐ ``` ##### Request Body ```json { "postId": String } ``` ##### Response ``` Like ``` #### ํŠน์ • ํฌ์ŠคํŠธ ์ข‹์•„์š” ์ทจ์†Œ ํŠน์ • ํฌ์ŠคํŠธ์— ์ข‹์•„์š”ํ•œ ๊ฒƒ์„ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค. > DELETE /likes/delete ##### Request Header ``` Authorization: bearer JWTํ† ํฐ ``` ##### Request Body ```json { "id": String } ``` ##### Response ``` Like ``` ### ๋Œ“๊ธ€ #### ํŠน์ • ํฌ์ŠคํŠธ์— ๋Œ“๊ธ€ ๋‹ฌ๊ธฐ ํŠน์ • ํฌ์ŠคํŠธ์— ๋Œ“๊ธ€์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. > POST /comments/create ##### Request Header ``` Authorization: bearer JWTํ† ํฐ ``` ##### Request Body ```json { "comment": String, "postId": String } ``` ##### Response ``` Comment ``` #### ํŠน์ • ํฌ์ŠคํŠธ์— ์ž‘์„ฑํ•œ ๋‚ด ๋Œ“๊ธ€ ์ง€์šฐ๊ธฐ ํŠน์ • ํฌ์ŠคํŠธ์— ์ž‘์„ฑํ•œ ๋‚ด ๋Œ“๊ธ€์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. > DELETE /comments/delete ##### Request Header ``` Authorization: bearer JWTํ† ํฐ ``` ##### Request Body ```json { "id": String } ``` ##### Response ``` Comment ``` ### ์•Œ๋ฆผ #### ๋‚˜์˜ ์•Œ๋ฆผ ๋ชฉ๋ก ๋‚˜์˜ ์•Œ๋ฆผ ๋ชฉ๋ก์„ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค. > GET /notifications ##### Request Header ``` Authorization: bearer JWTํ† ํฐ ``` ##### Response ``` Notification[] ``` #### ์•Œ๋ฆผ ํ™•์ธ ์ฒ˜๋ฆฌ ๋‚˜์—๊ฒŒ ์˜จ ์•Œ๋ฆผ์„ ์ฝ์Œ์ฒ˜๋ฆฌ ํ•ฉ๋‹ˆ๋‹ค. > GET /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๋กœ ๋ณด๋‚ด์ฃผ์„ธ์š”. ```json { "notificationType": "COMMENT" | "FOLLOW" | "LIKE" | "MESSAGE", "notificationTypeId": String, "userId": String, "postId": Nullable<String> } ``` ##### Response ``` Notification ``` ### ํŒ”๋กœ์šฐ #### ํŠน์ • ์œ ์ € ํŒ”๋กœ์šฐ ํŠน์ • ์œ ์ €๋ฅผ ํŒ”๋กœ์šฐํ•ฉ๋‹ˆ๋‹ค. > POST /follow/create ##### Request Header ``` Authorization: bearer JWTํ† ํฐ ``` ##### Request Body ```json { "userId": String } ``` ##### Response ``` Follow ``` #### ํŠน์ • ์œ ์ € ์–ธํŒ” ํŠน์ • ์œ ์ €๋ฅผ ์–ธํŒ”ํ•ฉ๋‹ˆ๋‹ค. > DELETE /follow/delete ##### Request Header ``` Authorization: bearer JWTํ† ํฐ ``` ##### Request Body ```json { "id": String } ``` ##### Response ``` Follow ``` ### ๋ฉ”์‹œ์ง€ #### ๋‚˜์˜ ๋ฉ”์‹œ์ง€ํ•จ (์†Œํ†ตํ•œ ์œ ์ € ๋ชฉ๋ก) ๋‚˜์™€ ๋ฉ”์‹œ์ง€ํ•จ์„ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค. > GET /messages/conversations ##### Request Header ``` Authorization: bearer JWTํ† ํฐ ``` ##### Response ```json Conversation[] ``` #### ํŠน์ • ์‚ฌ์šฉ์ž์™€ ์†Œํ†ตํ•œ ๋ฉ”์‹œ์ง€ ๋ชฉ๋ก ํŠน์ • ์‚ฌ์šฉ์ž์™€ ์†Œํ†ตํ•œ ๋ฉ”์‹œ์ง€ ๋ชฉ๋ก์„ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค. > GET /messages ##### Request Header ``` Authorization: bearer JWTํ† ํฐ ``` ##### Request Params ``` userId: String ``` ##### Response ``` Message[] ``` #### ํŠน์ • ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฉ”์‹œ์ง€ ์ „์†ก ํŠน์ • ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. > POST /messages/create ##### Request Header ``` Authorization: bearer JWTํ† ํฐ ``` ##### Request Body ```json { "message": String, "receiver": String // ์‚ฌ์šฉ์ž id } ``` ##### Response ``` Message ``` #### ๋ฉ”์‹œ์ง€ ํ™•์ธ ์ฒ˜๋ฆฌ ํŠน์ • ์‚ฌ์šฉ์ž์™€ ๋‚˜๋ˆˆ ๋ฉ”์‹œ์ง€๋ฅผ ์ฝ์Œ์ฒ˜๋ฆฌ ํ•ฉ๋‹ˆ๋‹ค. > PUT /messages/update-seen ##### Request Header ``` Authorization: bearer JWTํ† ํฐ ``` ##### Request Body ```json { "sender": String // ์‚ฌ์šฉ์ž id } ``` ## ๊ฒ€์ƒ‰ #### ์‚ฌ์šฉ์ž ๊ฒ€์ƒ‰ ์‚ฌ์šฉ์ž๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. > GET /search/users/{query} ##### Response ``` User[] ``` #### ์ „์ฒด ๊ฒ€์ƒ‰ (ํฌ์ŠคํŠธ, ์‚ฌ์šฉ์ž) ํฌ์ŠคํŠธ์™€ ์‚ฌ์šฉ์ž๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. > GET /search/all/{query} ##### Response ``` (User | Post)[] ``` ## WebSocket ์•ˆ๋‚ด ### on ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. #### SEND_MESSAGE ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ``` Message[] ``` #### CREATE_NOTIFICATION_REQUEST ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ƒ์„ฑ๋œ ์•Œ๋ฆผ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. ``` Notification[] ``` ### emit ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค. #### CREATE_MESSAGE ``` Message ``` #### CREATE_NOTIFICATION ``` Notification ``` ## ๋ชจ๋ธ ์•ˆ๋‚ด API์— ๋”ฐ๋ผ ๋ชจ๋ธ ํ•„๋“œ์—์„œ ์ผ๋ถ€๋ถ„์ด ๋น ์ง„ ์ƒํƒœ๋กœ ๋‚ด๋ ค์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. `ex) ๋กœ๊ทธ์ธ ํ›„ ๋‚ด๋ ค์˜ค๋Š” User์—๋Š” ํ”„๋กœํ•„ ์ด๋ฏธ์ง€์™€ ์ปค๋ฒ„ ์ด๋ฏธ์ง€ ํ•„๋“œ๊ฐ€ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.` ### User ```json { "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 ```json { "authRequired": Boolean, // ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ "posts": String[], "_id": String, "name": String, "description": String, "createdAt": String, "updatedAt": String } ``` ### Post ```json { "likes": Like[], "comments": Comment[], "_id": String, "image": Optional<String>, "imagePublicId": Optional<String>, "title": String, "channel": Channel, "author": User, "createdAt": String, "updatedAt": String } ``` ### Like ```json { "_id": String, "user": String, // ์‚ฌ์šฉ์ž id "post": String, // ํฌ์ŠคํŠธ id "createdAt": String, "updatedAt": String } ``` ### Comment ```json { "_id": String, "comment": String, "author": User, "post": String, // ํฌ์ŠคํŠธ id "createdAt": String, "updatedAt": String } ``` ### Notification ```json { "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 ```json { "_id": String, "user": String, // ์‚ฌ์šฉ์ž id "follower": String, // ์‚ฌ์šฉ์ž id "createdAt": String, "updatedAt": String } ``` ### Conversation ```json { "_id": String[], "message": String, "sender": User, "receiver": User, "seen": Boolean, "createdAt": String } ``` ### Message ```json { "_id": String, "message": String, "sender": User, "receiver": User, "seen": Boolean, "createdAt": String, "updatedAt": String } ```