-
Notifications
You must be signed in to change notification settings - Fork 4
API
Node.js의 서버가 켜져 있는 상황에서 React-Native가 get, post 등의 http 메소드로 서버에게 요청을 보내면 Node.js는 React-Native가 보낸 요청에 따라 알맞은 핸들링을 한다.
- URL : /account/signup
- METHOD : /POST
- REQUEST BODY :
{
"name" : "파람",
"email":"param@ajou.ac.kr",
"password":"@2345reqw"
}
- RETURN :
성공
{
"status": "SUCCESS",
"message": "회원가입이 성공적으로 완료되었습니다",
"data": {
"_id": "6127d6d04850b74aacbb781e",
"name": "파람",
"email": "param@ajou.ac.kr",
"password": "$2b$10$Li4vEUF6ghLMR4OLseVhOOTt2YYrL6Y64.KEXh41TL9cgALkXfOg6",
"__v": 0
}
}
실패
- name, email, password 중 한 개라도 비어있을 경우
{
"status": "FAILED",
"message": "빈 문자열입니다.",
}
- 닉네임 양식에 맞지 않을 경우
{
"status": "FAILED",
"message": "영어, 한글, 숫자만 허용하며, 2자 이상 8자 이내여야 합니다.",
}
- 이메일 양식에 맞지 않을 경우
{
"status": "FAILED",
"message": "올바르지 않은 양식입니다.",
}
- 비밀번호 양식에 맞지 않을 경우
{
"status": "FAILED",
"message": "영어, 숫자, 특수문자 혼용 8자 이상이어야 합니다.",
}
- 이미 가입된 사용자인 경우
{
"status": "FAILED",
"message": "이미 가입된 사용자입니다.",
}
- 기타
{
"status": "FAILED",
"message": "(기타 동작) 중 에러가 발생하였습니다.",
}
- URL : /account/signin
- METHOD : /POST
- REQUEST BODY :
{
"email":"param@ajou.ac.kr",
"password":"@2345reqw"
}
- RETURN :
성공
{
"status": "SUCCESS",
"message": "로그인에 성공했습니다.",
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MTI4OWU3ZjU0ZTk2Zjc3ZDRlMWE4YzciLCJuYW1lIjoi7YyM656MIiwiaWF0IjoxNjMwMTQwODExLCJleHAiOjE2MzEzNTA0MTEsInN1YiI6InVzZXJJbmZvIn0.9-oj74u01SFFhxQW7DtCi0qsP2ST5uX3neFqBy4GVsY"
}
실패
- name, email, password 중 한 개라도 비어있을 경우
{
"status": "FAILED",
"message": "빈 문자열입니다.",
}
- 이메일은 있으나 비밀번호가 일치하지 않는 경우
{
"status": "FAILED",
"message": "올바르지 않은 비밀번호입니다.",
}
- 해당 이메일 유저가 존재하지 않을 경우
{
"status": "FAILED",
"message": "가입하지 않은 사용자입니다.",
}
- 기타
{
"status": "FAILED",
"message": "(기타 동작) 중 에러가 발생하였습니다.",
}
- URL : /account/checkEmail
- METHOD : /POST
- REQUEST BODY :
{
"email":"param@ajou.ac.kr"
}
- RETURN :
성공
{
"status": "SUCCESS",
"message": "사용가능한 이메일입니다."
}
실패
{
"status": "FAILED",
"message": "이미 가입된 이메일입니다."
}
- URL : /account/checkName
- METHOD : /POST
- REQUEST BODY :
{
"name":"maxcha98@ajou.ac.kr"
}
- RETURN :
성공
{
"status": "SUCCESS",
"message": "사용가능한 닉네임입니다."
}
실패
{
"status": "FAILED",
"message": "이미 사용중인 닉네임입니다."
}
- URL : /account/regenerateToken
- METHOD : /GET
- HEADERS :
{
"x-access-token" : "만료되지 않은 jwt 토큰"
}
- RETURN :
성공
{
"status": "SUCCESS",
"message": "토큰을 재발행하였습니다.",
"accessToken": "eyJhbGndhSTHK50"
}
- URL : /account/emailAuth
- METHOD : /POST
- REQUEST BODY :
{
"email":"duliesoures@gmail.com"
}
- RETURN :
성공
{
"status": "SUCCESS",
"message": "이메일을 보내기에 성공하였습니다.",
"code": "9573"
}
- URL : /account/images/:destination
- METHOD : /POST
- HEADER :( x-access-token : 토큰 값 ) (key : value)
- PATH VARIABLES : ( destination : thumbnail ) (key : value, 'thumbnail'이라는 문자열로 고정하여 주시면 됩니다. 이미지가 저장될 S3 폴더를 말합니다.)
- REQUEST BODY : form-data 형식
| KEY | VALUE | DESCRIPTION |
|---|---|---|
| images | 사용자가 첨부한 파일(ex. test1.jpg) | 문자열이 아니라 파일이어야 함. 프로필이므로 최대 1개까지 업로드 가능 |
- RETURN :
성공
{
"status": "SUCCESS",
"message": "사용자 이미지를 성공적으로 저장했습니다.",
"data": [
{
"fileName": "thumbnail/16926866294500.webp", // s3에서 해당 이미지를 식별하는 이름
"fileUrl": "https://paramdandelion.s3.ap-northeast-2.amazonaws.com/thumbnail/16926866294500.webp" // s3 링크
}
]
}
- URL : /dandelion/create
- METHOD : /POST
- HEADER :( x-access-token : 토큰 값 ) (key : value)
- REQUEST BODY :
{
"name" : "노천 극장 뒷편",
"location":{
"longitude":127.04546648336702,
"latitude":37.28187449622762
},
"description":"여기가 구경 핫스팟인데"
}
- RETURN :
성공
{
"status": "SUCCESS",
"message": "민들레 생성에 성공했습니다.",
"data": {
"createdAt": "2021-09-19T13:11:52.490Z",
"level": 1,
"_id": "614737180c51e4822031ded5",
"name": "노천 극장 뒷편",
"_creator": "6136538af29fa1655c012668",
"location": {
"type": "Point",
"coordinates": [
127.04546648336702,
37.28187449622762
]
},
"description": "여기가 구경 핫스팟인데",
"__v": 0
}
}
- URL : /dandelion/get
- METHOD : /POST
- HEADER :( x-access-token : 토큰 값 ) (key : value)
- REQUEST BODY :
{
"centerPosition":{
"latitude" : 37.28326843430806,
"longitude":127.04454697578383
},
"maxDistance":100 //maxDistance는 최대 몇 m까지 불러올 것인가
}
- RETURN :
성공
{
"status": "SUCCESS",
"message": "민들레 불러오기에 성공했습니다.",
"data": [
{
"name": "컵밥 먹는 곳",
"level": 1,
"_id": "6145e8d535a2ca50cc2054f6",
"location": {
"longitude": 127.04386746757788,
"latitude": 37.2832631338081
},
"ovelap": false
},
{
"name": "성호관 앞",
"level": 1,
"_id": "6145e95235a2ca50cc2054f8",
"location": {
"longitude": 127.04510657077695,
"latitude": 37.28268537707143
},
"ovelap": false
},
{
"name": "동방들",
"level": 1,
"_id": "6145e98935a2ca50cc2054fa",
"location": {
"longitude": 127.04547963410569,
"latitude": 37.28350695642108
},
"ovelap": false
}
]
}
- URL : /dandelion/getDetail/:dandelionId
- METHOD : /POST
- HEADER :( x-access-token : 토큰 값 ) (key : value)
-
PATH VARIABLES :
- ( dandelionId : 민들레의 ObjectId, 즉 인덱스 ) (key : value)
- REQUEST BODY :
{
"currentPosition":{
"latitude" : 37.278575439309275,
"longitude":127.01521012887963
}
}
- RETURN :
성공
{
"status": "SUCCESS",
"message": "민들레 상세 정보입니다.",
"data": [
{
"_id": "616c086ae27a6c277cbcc00d",
"createdAt": "2021-10-17T11:26:34.845Z",
"level": 1,
"name": "추억의 달고나",
"_creator": {
"_id": "61365d8cd4e22a2dd4df2a6f",
"name": "testUser0907",
"thumbnail": "https://paramdandelion.s3.ap-northeast-2.amazonaws.com/thumbnail/16926866294500.webp"
},
"location": {
"longitude": 127.01521012887963,
"latitude": 37.278575439309265
},
"description": "오징어게임에 나왔던 달고나 핫스팟",
"distance": 5.007103355365494e-10, (미터 단위입니다),
"cumulativeVisitors" : 0 (누적방문자)
"realTimeVisitors" : 0 (실시간방문자)
"events": 1
}
]
}
- URL : /dandelion/visit/:dandelionId
- METHOD : /POST
- HEADER :( x-access-token : 토큰 값 ) (key : value)
-
PATH VARIABLES :
- ( dandelionId : 민들레의 ObjectId, 즉 인덱스 ) (key : value)
- REQUEST BODY :
{
"currentPosition":{
"latitude" : 37.278575439309275,
"longitude":127.01521012887963
}
}
- RETURN :
성공
{
"status": "SUCCESS",
"message": "민들레 방문 정보를 저장하였습니다.",
"data": [
{
"_id": "616c086ae27a6c277cbcc00d",
"createdAt": "2021-10-17T11:26:34.845Z",
"level": 1,
"name": "추억의 달고나",
"_creator": {
"_id": "61365d8cd4e22a2dd4df2a6f",
"name": "testUser0907",
"thumbnail": "https://paramdandelion.s3.ap-northeast-2.amazonaws.com/thumbnail/16926866294500.webp"
},
"location": {
"longitude": 127.01521012887963,
"latitude": 37.278575439309265
},
"description": "오징어게임에 나왔던 달고나 핫스팟",
"cumulativeVisitors": 17,
"realTimeVisitors": 15,
"distance": 5.007103355365494e-10, (미터 단위입니다)
"events": 1,
"recentImages": [
"test1.jpg",
"test2.jpg",
"https://paramdandelion.s3.ap-northeast-2.amazonaws.com/post/7247523409265676.PNG",
"https://paramdandelion.s3.ap-northeast-2.amazonaws.com/post/7247523410409342.PNG"
] (최근 이미지 링크들, 최대 8개)
}
]
}
-
URL : /dandelion/exit/:dandelionId
-
METHOD : /GET
-
HEADER :( x-access-token : 토큰 값 ) (key : value)
-
PATH VARIABLES :
- ( dandelionId : 민들레의 ObjectId, 즉 인덱스 ) (key : value)
-
RETURN :
성공
{
"status": "SUCCESS",
"message": "민들레 실시간 방문자 수가 1 감소하였습니다."
}
- URL : /:dandelionId/post/create
- METHOD : /POST
- HEADER :( x-access-token : 토큰 값 ) (key : value)
- PATH VARIABLES : ( dandelionId : 민들레의 ObjectId, 즉 인덱스 ) (key : value)
- REQUEST BODY :
{
"title":"test2에 첫게시글",
"text":"블라블라",
"location":{
"longitude":127.04275784194242,
"latitude":37.28335975273373
},
"images":["test1.jpg","test2.jpg"]
}
- RETURN :
성공
{
"status": "SUCCESS",
"message": "게시글을 작성하였습니다.",
"data": {
"createdAt": "2021-10-04T08:50:51.405Z",
"updatedAt": "2021-10-04T08:50:45.717Z",
"likes": 0,
"images": [
"test1.jpg",
"test2.jpg"
],
"comments": 0,
"_id": "615ac06b37a3bd4cc0c2f91c",
"_user": "61365d8cd4e22a2dd4df2a6f",
"_dandelion": "614c4ae99aa99a08e0d57c30",
"location": {
"type": "Point",
"coordinates": [
127.04275784194242,
37.28335975273373
]
},
"title": "test2에 첫게시글",
"text": "블라블라",
"__v": 0
}
}
- URL : /:dandelionId/post/
- METHOD : /GET
- HEADER :( x-access-token : 토큰 값 ) (key : value)
- PATH VARIABLES : ( dandelionId : 민들레의 ObjectId, 즉 인덱스 ) (key : value)
-
QUERY PARAMS :
- ( page : 현재 페이지 수 ) (key : value)
- ( maxPost : 페이지마다 가져올 게시글 수 ) (key : value)
- RETURN :
성공
{
"status": "SUCCESS",
"message": "민들레에 해당하는 게시글입니다.",
"data": [
{
"_id": "615ac06b37a3bd4cc0c2f91c",
"location": {
"longitude": 127.04275784194242,
"latitude": 37.28335975273373
},
"createdAt": "2021-10-04T08:50:51.405Z",
"updatedAt": "2021-10-04T09:29:20.810Z",
"_dandelion": "614c4ae99aa99a08e0d57c30",
"_user": {
"_id": "61365d8cd4e22a2dd4df2a6f",
"name": "testUser0907",
"thumbnail":(유저 프사 s3 링크)
},
"title": "test2 게시글 수정",
"text": "blahblah",
"images": [
"one",
"two"
],
"likes": 0,
"comments": 0,
"userLike": true //현재 유저가 해당 게시글 좋아요 눌렀는지 여부
}
]
}
- URL : /:dandelionId/post/update/:postId
- METHOD : /PATCH
- HEADER :( x-access-token : 토큰 값 ) (key : value)
-
PATH VARIABLES :
- ( dandelionId : 민들레의 ObjectId, 즉 인덱스 ) (key : value)
- ( postId : 게시글의 ObjectId, 즉 인덱스 ) (key : value)
- REQUEST BODY :
{
"title":"test2 게시글 수정",
"text":"blahblah",
"images":["one","two"]
}
- RETURN :
성공
{
"status": "SUCCESS",
"message": "게시글이 수정되었습니다."
}
- URL : /:dandelionId/post/delete/:postId
- METHOD : /DELETE
- HEADER :( x-access-token : 토큰 값 ) (key : value)
-
PATH VARIABLES :
- ( dandelionId : 민들레의 ObjectId, 즉 인덱스 ) (key : value)
- ( postId : 게시글의 ObjectId, 즉 인덱스 ) (key : value)
- RETURN :
성공
{
"status": "SUCCESS",
"message": "게시글을 삭제하였습니다."
}
실패
{
"status": "SUCCESS",
"message": (case에 따른 메세지)
}
- 존재하지 않는 민들레 인덱스인 경우
- 존재하지 않는 게시글 인덱스인 경우
- 게시글 인덱스가 민들레 인덱스와 매치하지 않는 경우
- 인덱스 타입이 잘못된 ObjectId인 경우
- URL : /:dandelionId/event/create
- METHOD : /POST
- HEADER :( x-access-token : 토큰 값 ) (key : value)
- PATH VARIABLES : ( dandelionId : 민들레의 ObjectId, 즉 인덱스 ) (key : value)
- REQUEST BODY :
{
"title":"10.21 event test(9)",
"text":"event test",
"location":{
"longitude":127.04275784194242,
"latitude":37.28335975273373
},
"images":["test1.jpg","test2.jpg"],
"rewards":500, //리워드
"firstComeNum":10, //선착순 사람 수
"startDate":"2021-10-20" //시작 날짜
}
- RETURN :
성공
{
"status": "SUCCESS",
"message": "이벤트를 생성하였습니다.",
"data": {
"createdAt": "2021-10-21T23:46:36.516Z",
"updatedAt": "2021-10-21T23:46:36.516Z",
"images": [
"test1.jpg",
"test2.jpg"
],
"isEvent": true,
"status": 0,
"_id": "61717d54c3ae9251b8e650fb",
"_user": "61365d8cd4e22a2dd4df2a6f",
"_dandelion": "614c4ae99aa99a08e0d57c30",
"location": {
"type": "Point",
"coordinates": [
127.04275784194242,
37.28335975273373
]
},
"firstComeNum": 10,
"title": "10.21 event test(9)",
"text": "event test",
"rewards": "500",
"startDate": "2021-10-20T00:00:00.000Z",
"__v": 0
}
}
- URL : /:dandelionId/event/
- METHOD : /GET
- HEADER :( x-access-token : 토큰 값 ) (key : value)
- PATH VARIABLES : ( dandelionId : 민들레의 ObjectId, 즉 인덱스 ) (key : value)
-
QUERY PARAMS :
- ( page : 현재 페이지 수 ) (key : value) (시작은 1부터)
- ( maxPost : 페이지마다 가져올 이벤트 수 ) (key : value)
- RETURN :
성공
{
"status": "SUCCESS",
"message": "민들레에 해당하는 이벤트입니다.",
"data": [
{
"_id": "61717d54c3ae9251b8e650fb",
"createdAt": "2021-10-21T23:46:36.516Z",
"updatedAt": "2021-10-21T23:46:36.516Z",
"images": [
"test1.jpg",
"test2.jpg"
],
"status": 0,
"_user": {
"_id": "61365d8cd4e22a2dd4df2a6f",
"name": "testUser0907"
},
"_dandelion": "614c4ae99aa99a08e0d57c30",
"location": {
"longitude": 127.04275784194242,
"latitude": 37.28335975273373
},
"firstComeNum": 10,
"title": "10.21 event test(9)",
"text": "event test",
"rewards": "500",
"startDate": "2021-10-20T00:00:00.000Z",
"comments": 0,
"likes": 0,
"userLIke":true
}
]
}
- URL : /:dandelionId/event/update/:eventId
- METHOD : /PATCH
- HEADER :( x-access-token : 토큰 값 ) (key : value)
-
PATH VARIABLES :
- ( dandelionId : 민들레의 ObjectId, 즉 인덱스 ) (key : value)
- ( eventId : 이벤트의 ObjectId, 즉 인덱스 ) (key : value)
- REQUEST BODY :
{
"title":"new Event has Changed!!",
"text":"블라블라 location은 아무거나 들어가지 않음~.",
"location":{
"longitude":127.04275784194242,
"latitude":37.28335975273373
},
"images":["test1.jpg","test2.jpg"],
"rewards":400,
"firstComeNum":8,
"startDate":"2021-10-12"
}
- RETURN :
성공
{
"status": "SUCCESS",
"message": "이벤트가 수정되었습니다."
}
- URL : /:dandelionId/event/delete/:eventId
- METHOD : /DELETE
- HEADER :( x-access-token : 토큰 값 ) (key : value)
-
PATH VARIABLES :
- ( dandelionId : 민들레의 ObjectId, 즉 인덱스 ) (key : value)
- ( eventId : 이벤트의 ObjectId, 즉 인덱스 ) (key : value)
- RETURN :
성공
{
"status": "SUCCESS",
"message": "이벤트를 삭제하였습니다."
}
실패
{
"status": "SUCCESS",
"message": (case에 따른 메세지)
}
- 존재하지 않는 민들레 인덱스인 경우
- 존재하지 않는 이벤트 인덱스인 경우
- 이벤트 인덱스가 민들레 인덱스와 매치하지 않는 경우
- 인덱스 타입이 잘못된 ObjectId인 경우
- URL : /:postId/comment/create
- METHOD : /POST
- HEADER :( x-access-token : 토큰 값 ) (key : value)
- PATH VARIABLES : ( postId : 민들레 게시글 혹은 이벤트의 ObjectId. eventId여도 postId 이름으로 보내줄 것. ) (key : value)
- REQUEST BODY :
{
"text":"달고나 댓글 1022"
}
- RETURN :
성공
{
"status": "SUCCESS",
"message": "댓글을 작성하였습니다.",
"data": {
"depth": 1,
"isDeleted": false,
"createdAt": "2021-10-22T00:12:00.443Z",
"updatedAt": "2021-10-22T00:09:38.639Z",
"_id": "6171834068bce21c44dd0d7b",
"_user": "61365d8cd4e22a2dd4df2a6f",
"_post": "616c58c6e31deb2e741afe65",
"text": "달고나 댓글 1022",
"__v": 0
}
}
- URL : /:postId/comment/
- METHOD : /GET
- HEADER :( x-access-token : 토큰 값 ) (key : value)
- PATH VARIABLES : ( postId : 민들레 게시글/이벤트의 ObjectId, 즉 인덱스 ) (key : value)
-
QUERY PARAMS :
- ( page : 현재 페이지 수 ) (key : value) (시작은 1부터)
- ( maxPost : 페이지마다 가져올 댓글 수 ) (key : value)
- RETURN :
성공
{
"status": "SUCCESS",
"message": "게시글에 해당하는 댓글입니다.",
"data": [
{
"_id": "616c5988e31deb2e741afe6b",
"depth": 1, //댓글이면 1, 답글이면 2, (확장성 고려, 추후 다답글은 3 등등)
"createdAt": "2021-10-17T17:12:40.481Z",
"_user": {
"_id": "61365d8cd4e22a2dd4df2a6f",
"name": "testUser0907"
},
"_post": "616c58c6e31deb2e741afe65",
"text": "달고나 두번째 댓글",
"nestedComments": 1 // 답글 개수
},
{
"_id": "616c58ece31deb2e741afe68",
"depth": 1,
"createdAt": "2021-10-17T17:10:04.209Z",
"_user": {
"_id": "61365d8cd4e22a2dd4df2a6f",
"name": "testUser0907"
},
"_post": "616c58c6e31deb2e741afe65",
"text": "달고나 첫 댓글",
"nestedComments": 0
}
]
}
- URL : /:postId/comment/update/:commentId
- METHOD : /PATCH
- HEADER :( x-access-token : 토큰 값 ) (key : value)
-
PATH VARIABLES :
- ( postId : 민들레 게시글/이벤트의 ObjectId, 즉 인덱스 ) (key : value)
- ( commentId : 댓글의 ObjectId, 즉 인덱스 ) (key : value)
- REQUEST BODY :
{
"text":"수정됨222"
}
- RETURN :
성공
{
"status": "SUCCESS",
"message": "덧글이 수정되었습니다."
}
- URL : /:postId/comment/delete/:commentId
- METHOD : /DELETE
- HEADER :( x-access-token : 토큰 값 ) (key : value)
-
PATH VARIABLES :
- ( postId : 민들레 게시글/이벤트의 ObjectId, 즉 인덱스 ) (key : value)
- ( commentId : 댓글의 ObjectId, 즉 인덱스 ) (key : value)
- RETURN :
성공
{
"status": "SUCCESS",
"message": "댓글을 삭제하였습니다."
}
실패
{
"status": "SUCCESS",
"message": (case에 따른 메세지)
}
- 존재하지 않는 게시글/이벤트 인덱스인 경우
- 존재하지 않는 댓글 인덱스인 경우
- 게시글/이벤트 인덱스가 댓글 인덱스와 매치하지 않는 경우
- 인덱스 타입이 잘못된 ObjectId인 경우
- 작성자가 아닌 경우에 수정/삭제하려는 경우
- URL : /:parentCommentId/nestedComment/create
- METHOD : /POST
- HEADER :( x-access-token : 토큰 값 ) (key : value)
- PATH VARIABLES : ( parentCommentId : 댓글의 ObjectId ) (key : value)
- REQUEST BODY :
{
"text":"달고나 댓글 1022"
}
- RETURN :
성공
{
"status": "SUCCESS",
"message": "답글을 작성하였습니다.",
"data": {
"depth": 2,
"isDeleted": false,
"createdAt": "2021-10-22T00:24:12.759Z",
"updatedAt": "2021-10-22T00:24:12.759Z",
"_id": "61718725eb364c490c846b3c",
"_post": "615f10fc81bde2745cecaefc",
"_user": "61365d8cd4e22a2dd4df2a6f",
"_parentComment": "616484d4072c963f5c5c3f7b",
"text": "첫 댓글에 대한 답글",
"__v": 0
}
}
- URL : /:parentCommentId/nestedComment/
- METHOD : /GET
- HEADER :( x-access-token : 토큰 값 ) (key : value)
- PATH VARIABLES : ( parentCommentId : 댓글의 ObjectId ) (key : value)
-
QUERY PARAMS :
- ( page : 현재 페이지 수 ) (key : value) (시작은 1부터)
- ( maxPost : 페이지마다 가져올 답글 수 ) (key : value)
- RETURN :
성공
{
"status": "SUCCESS",
"message": "댓글에 해당하는 답글입니다.",
"data": [
{
"_id": "61718725eb364c490c846b3c",
"depth": 2,
"createdAt": "2021-10-22T00:24:12.759Z",
"updatedAt": "2021-10-22T00:24:12.759Z",
"_post": "615f10fc81bde2745cecaefc",
"_user": {
"_id": "61365d8cd4e22a2dd4df2a6f",
"name": "testUser0907"
},
"_parentComment": "616484d4072c963f5c5c3f7b",
"text": "첫 댓글에 대한 답글"
}
]
}
- URL : /:parentCommentId/nestedComment/update/:commentId
- METHOD : /PATCH
- HEADER :( x-access-token : 토큰 값 ) (key : value)
-
PATH VARIABLES :
- ( parentCommentId : 댓글의 ObjectId ) (key : value)
- ( commentId : 답글의 ObjectId ) (key : value)
- REQUEST BODY :
{
"text":"수정됨222"
}
- RETURN :
성공
{
"status": "SUCCESS",
"message": "답글이 수정되었습니다."
}
- URL : /:parentCommentId/nestedComment/delete/:commentId
- METHOD : /DELETE
- HEADER :( x-access-token : 토큰 값 ) (key : value)
-
PATH VARIABLES :
- ( parentCommentId : 댓글의 ObjectId ) (key : value)
- ( commentId : 답글의 ObjectId ) (key : value)
- RETURN :
성공
{
"status": "SUCCESS",
"message": "답글을 삭제하였습니다."
}
실패
{
"status": "SUCCESS",
"message": (case에 따른 메세지)
}
- 존재하지 않는 댓글 인덱스인 경우
- 존재하지 않는 답글 인덱스인 경우
- 답글 인덱스가 댓글 인덱스와 매치하지 않는 경우
- 인덱스 타입이 잘못된 ObjectId인 경우
- 작성자가 아닌 경우에 삭제/수정하려는 경우
-
URL : /:dandelionId/:postId/like
-
METHOD : /POST
-
HEADER :( x-access-token : 토큰 값 ) (key : value)
-
PATH VARIABLES :
- ( dandelionId : 민들레의 ObjectId, 즉 인덱스 ) (key : value)
- ( postId : 게시글/이벤트의 ObjectId, 즉 인덱스 ) (key : value)
-
RETURN :
성공
- 좋아요
{
"status": "SUCCESS",
"message": "좋아요를 완료하였습니다.",
"data": {
"currentLikeStatus": true //현재 사용자의 해당 게시글에 대한 좋아요 상태
}
}
- 좋아요 취소
{
"status": "SUCCESS",
"message": "좋아요를 취소했습니다.",
"data": {
"currentLikeStatus": false
}
}
-
URL : /:dandelionId/:postId/detail
-
METHOD : /GET
-
HEADER :( x-access-token : 토큰 값 ) (key : value)
-
PATH VARIABLES :
- ( dandelionId : 민들레의 ObjectId, 즉 인덱스 ) (key : value)
- ( postId : 게시글/이벤트의 ObjectId, 즉 인덱스 ) (key : value)
-
RETURN :
성공
{
"status": "SUCCESS",
"message": "게시글 상세 정보입니다.",
"data": {
"_id": "6171719d593f7647dc230f91",
"createdAt": "2021-10-21T13:56:45.000Z",
"updatedAt": "2021-10-21T13:56:30.716Z",
"images": [
"test1.jpg",
"test2.jpg"
],
"isEvent": true, //게시글이면 false
"_user": {
"_id": "61365d8cd4e22a2dd4df2a6f",
"name": "testUser0907"
},
"_dandelion": "614c4ae99aa99a08e0d57c30",
"location": {
"longitude": 127.04275784194242,
"latitude": 37.28335975273373
},
"title": "10.21 event test",
"text": "event test",
"comments": 0,
"likes": 1,
"userLike":true
}
}
- URL : /dandelion/images/:destination
- METHOD : /POST
- HEADER :( x-access-token : 토큰 값 ) (key : value)
- PATH VARIABLES : ( destination : post ) (key : value, 'post'이라는 문자열로 고정하여 주시면 됩니다. 이미지가 저장될 S3 폴더를 말합니다.)
- REQUEST BODY : form-data 형식
| KEY | VALUE | DESCRIPTION |
|---|---|---|
| images | 사용자가 첨부한 파일(ex. test1.jpg) | 문자열이 아니라 파일이어야 함. 최대 10개까지 업로드 가능 |
| postId | ex.6187f9dcb7da7625008b5c5c | 게시글/이벤트의 Object ID |
- RETURN :
성공
{
"status": "SUCCESS",
"message": "이미지를 성공적으로 저장했습니다.",
"data": [
{
"fileName": "post/16745287686200.png",
"fileUrl": "https://paramdandelion.s3.ap-northeast-2.amazonaws.com/post/16745287686200.png"
},
{
"fileName": "post/16745290394400.PNG",
"fileUrl": "https://paramdandelion.s3.ap-northeast-2.amazonaws.com/post/16745290394400.PNG"
},
{
"fileName": "post/16745291647000.PNG",
"fileUrl": "https://paramdandelion.s3.ap-northeast-2.amazonaws.com/post/16745291647000.PNG"
},
{
"fileName": "post/16745302380600.PNG",
"fileUrl": "https://paramdandelion.s3.ap-northeast-2.amazonaws.com/post/16745302380600.PNG"
}
]
}
-
URL : /dandelion/post/get/mine
-
METHOD : /GET
-
HEADER :( x-access-token : 토큰 값 ) (key : value)
-
QUERY PARAMS :
- ( page : 현재 페이지 수 ) (key : value) (시작은 1부터)
- ( maxPost : 페이지마다 가져올 게시글 수 ) (key : value)
-
RETURN :
성공
{
"status": "SUCCESS",
"message": "내가 작성한 게시글입니다.",
"data": [
{
"_id": "616c58c6e31deb2e741afe65",
"createdAt": "2021-10-17T17:09:26.064Z",
"updatedAt": "2021-10-17T11:43:39.681Z",
"images": [
"test1.jpg",
"test2.jpg"
],
"isEvent": false,
"_user": {
"_id": "61365d8cd4e22a2dd4df2a6f",
"name": "testUser0907"
},
"_dandelion": "616c086ae27a6c277cbcc00d",
"location": {
"longitude": 127.01521012887964,
"latitude": 37.278575439309265
},
"title": "달고나 게시글",
"text": "location은 아무거나 들어감.",
"comments": 2,
"likes": 0,
"userLike":true //현재 유저가 해당 게시글을 좋아요 했는지의 여부
},
]
}
- URL : /dandelion/get/mine
- METHOD : /POST
- HEADER :( x-access-token : 토큰 값 ) (key : value)
-
QUERY PARAMS :
- ( page : 현재 페이지 수 ) (key : value) (시작은 1부터)
- ( maxPost : 페이지마다 가져올 민들레 수 ) (key : value)
- REQUEST BODY :
{
"currentPosition":{
"latitude" : 37.28326843430806,
"longitude":127.04454697578383
} //사용자 현재 위치
}
- RETURN :
성공
{
"status": "SUCCESS",
"message": "내가 심은 민들레입니다.",
"data": [
{
"_id": "615a92e6b74ebb4dc8ebcb7d",
"createdAt": "2021-10-04T05:36:38.403Z",
"level": 1,
"name": "실험",
"_creator": {
"_id": "61365d8cd4e22a2dd4df2a6f",
"name": "testUser0907",
"thumbnail":(유저 프사 s3 링크)
},
"location": {
"longitude": 127.04271614831424,
"latitude": 37.283268525520704
},
"description": "실험시러",
"distance": 2491.6923360161572, //사용자 현재 위치로부터 민들레까지의 거리(m)
"events": 0 //이벤트 개수
"cumulativeVisitors": 1 //누적방문자수 (아직 방문 api와 테스트 데이터가 없어 실제 데이터에는 표시 되지 않을 것. 그러나 이후 이렇게 구현할 예정.)
},
{
"_id": "615a924b4564ef6ee0909ddd",
"createdAt": "2021-10-04T05:34:03.127Z",
"level": 1,
"name": "기숙사 매점",
"_creator": {
"_id": "61365d8cd4e22a2dd4df2a6f",
"name": "testUser0907",
"thumbnail":(유저 프사 s3 링크)
},
"location": {
"longitude": 127.04560343208409,
"latitude": 37.284512523458666
},
"description": "기매 맛잇졍",
"distance": 2771.9652301615392,
"events": 0,
"cumulativeVisitors": 3
}
]
}
생성/수정할 때 해당 api들을 이용하게 된다. 예를 들어, 사용자가 사진이 있는 게시글/이벤트를 생성할 때, 기존 api를 사용해 게시글/이벤트를 먼저 생성하고 얻은 postID로 6-3. 게시글/이벤트 이미지 업로드를 호출한다. 수정할 때 이미지 업로드 API에서는 DB에 접근하여 기존 이미지들의 정보를 알아내 s3에서 삭제하고, 클라이언트가 보내준 사진들을 s3에 업로드한다.
불러오기에서는 s3링크를 사용해 이미지를 렌더링하면 된다.
- URL : /dandelion/get/hotspot/local
- METHOD : /POST
- HEADER :( x-access-token : 토큰 값 ) (key : value)
-
QUERY PARAMS :
- ( page : 현재 페이지 수 ) (key : value) (시작은 1부터)
- ( maxPost : 페이지마다 가져올 민들레 수 ) (key : value)
- REQUEST BODY :
{
"currentPosition":{
"latitude" : 37.28326843430806,
"longitude":127.04454697578383
}, //사용자 현재 위치
"maxDistance" : 300 // 미터 단위
}
- RETURN :
성공
{
"status": "SUCCESS",
"message": "내 주변 민들레 핫스팟입니다.",
"data": [
{
"_id": "6193dd5be752e567bb1d0a70",
"level": 4,
"cumulativeVisitors": 223,
"realTimeVisitors": 122,
"name": "인마상",
"location": {
"longitude": 127.043495,
"latitude": 37.28236
},
"description": "왜 인마상일까요?",
"distance": 2.4579438848212036,
"events": 2
},
{
"_id": "6193da36e752e567bb1d0a29",
"level": 4,
"cumulativeVisitors": 102,
"realTimeVisitors": 60,
"name": "중앙도서관",
"location": {
"longitude": 127.044195,
"latitude": 37.28144
},
"description": "#최초_민들레_생성",
"distance": 119.19073980870387,
"events": 2
}
]
}
- URL : /dandelion/get/hotspot/national
- METHOD : /POST
- HEADER :( x-access-token : 토큰 값 ) (key : value)
-
QUERY PARAMS :
- ( page : 현재 페이지 수 ) (key : value) (시작은 1부터)
- ( maxPost : 페이지마다 가져올 민들레 수 ) (key : value)
- REQUEST BODY :
{
"currentPosition":{
"latitude" : 37.28326843430806,
"longitude":127.04454697578383
} //사용자 현재 위치
}
- RETURN :
성공
{
"status": "SUCCESS",
"message": "내 주변 민들레 핫스팟입니다.",
"data": [
{
"_id": "6193dd5be752e567bb1d0a70",
"level": 4,
"cumulativeVisitors": 223,
"realTimeVisitors": 122,
"name": "인마상",
"location": {
"longitude": 127.043495,
"latitude": 37.28236
},
"description": "왜 인마상일까요?",
"distance": 2.4579438848212036,
"events": 2
},
{
"_id": "6193da36e752e567bb1d0a29",
"level": 4,
"cumulativeVisitors": 102,
"realTimeVisitors": 60,
"name": "중앙도서관",
"location": {
"longitude": 127.044195,
"latitude": 37.28144
},
"description": "#최초_민들레_생성",
"distance": 119.19073980870387,
"events": 2
}
]
}