추가기능 API - sooktube/sooktube GitHub Wiki
08.20 추가된 기능 API 목록
목록
영상 추천
- 동영상이 어떤 재생목록에 추가되어 있을 경우
[GET]/api/video/inlist/{videoID}
동영상이 재생목록에 추가되어 있는 영상임과 동시에 추천+비추천 수가 5 이상인 영상이라면 해당 재생목록의 다른 영상(추천+비추천 수가 5 이상인 영상) 리턴, 어떠한 재생목록에도 추가되어 있지 않은 영상이거나 재생목록에 추가되어 있지만 충분한 추천수를 받지 못해 가영상 상태로 남아 있는 영상이라면 null 리턴
[
{
"videoID": 88,
"videoTitle": "Cute Puppy",
"videoDesc": "Bichon Frise.. i love dog..",
"videoDate": "2020-08-07T22:38:19.000+0000",
"username": "hye",
"uploadFileName": "hye1596839378134",
"videoPath": "https://storage.googleapis.com/soktube.appspot.com...",
"listID": 14,
"listName": "Harry Potter",
"listDesc": "love harry potter .. wanna go to hogwarts"
},
{
"videoID": 89,
"videoTitle": "Brown Poodle",
"videoDesc": "give me some food..",
"videoDate": "2020-08-07T22:40:08.000+0000",
"username": "hye",
"uploadFileName": "hye1596839933439",
"videoPath": "https://storage.googleapis.com/soktube.appspot....",
"listID": 14,
"listName": "Harry Potter",
"listDesc": "love harry potter .. wanna go to hogwarts"
}
]
{videoID}
79인 영상이 여러 개의 재생목록에 들어가 있을 경우를 대비해(위의 경우,{videoID}
가 79인 영상은{listID}
가 1, 3인 재생목록에 중복으로 들어가 있음)"listID"
와"listName"
으로 재생목록 구분 필요
"videoPath"
: 해당 영상의 url
- 해당 영상의 업로더가 올린 다른 영상 추천
[GET]/api/video/recommend/byUploader/{videoID}
[
{
"videoID": 87,
"videoTitle": "Park in Paris",
"videoDesc": "talking people..",
"videoDate": "2020-08-07T22:18:13.000+0000",
"username": "hye",
"uploadFileName": "hye1596838521301",
"videoPath": "https://storage.googleapis.com/..."
},
{
"videoID": 88,
"videoTitle": "Cute Puppy",
"videoDesc": "Bichon Frise.. i love dog..",
"videoDate": "2020-08-07T22:38:19.000+0000",
"username": "hye",
"uploadFileName": "hye1596839378134",
"videoPath": "https://storage.googleapis.com/..."
},
...
]
"username"
: 사용자가 현재 시청하고 있는 영상의 업로더({videoID}
의 업로더)
"videoPath"
: 해당 영상의 url
영상 댓글
- 영상 댓글 입력(대댓글이 아닌 일반 댓글)
[POST]/api/video/comment
대댓글이 아닌 일반 댓글을 작성할 경우 seq는 무조건 1로 백엔드에서 DB에 insert됨
videoID:86
username:hye
userComment:testComment
POST 전송 시 content type: application/x-www-form-urlencoded
입력한 댓글 내용 리턴(commentID는 auto_increment이므로 POST 요청에서 보낼 필요 없음)
{
"commentID": 4,
"videoID": 86,
"userComment": "testComment",
"username": "hye",
"commentDate": null,
"seq":0
}
commentDate는 DB에는 제대로 저장되어 있음.(조회 시 올바른 시간 값 조회)
seq또한 DB에 1로 저장됨.
- 영상 대댓글 입력
[POST]/api/video/recomment/{parent}/{seq}
이미 작성되어 있는 일반 댓글에 대한 대댓글 작성.(대댓글의 대댓글 작성은 불가능.)
videoID:86
username:hye
userComment:testComment
위의 내용만 POST. POST 전송 시 content type: application/x-www-form-urlencoded
리턴 결과:
{
"commentID": 69,
"videoID": 86,
"userComment": "테스트입니다.",
"username": "test123",
"commentDate": null,
"parent": 68,
"seq": 2
}
"parent"
: 대댓글이 달린 일반 댓글의commetID
"seq"
: 해당 댓글의 순서(일반 댓글->대댓글 순. 일반 댓글의 경우seq
는 무조건 1, 대댓글은 달린 순서대로seq
가 2, 3, 4...으로 변화해야 함.)
- 영상 댓글 수정
[PUT]/api/video/comment/update/{commentID}/{videoID}/{username}
댓글 내용("userComment")만 수정 가능. 댓글 수정 날짜는 백엔드에서 삽입.
ex. /api/video/comment/update/3/86/hj
userComment:댓글수정했음2
PUT 전송 시 content type: application/x-www-form-urlencoded
수정된 댓글 내용 리턴
{
"commentID": 3,
"videoID": 86,
"userComment": "댓글수정했음2",
"username": "hj",
"commentDate": "2020-08-07T04:27:06.000+0000"
}
- 영상 댓글 삭제
[DELETE]/api/video/comment/delete/{commentID}/{videoID}/{seq}/{username}
사용자가 삭제하려는 댓글에 따라 삭제 결과 달라짐.
-
대댓글이 달려 있지 않은 일반 댓글 삭제 -> 해당 댓글만 삭제
-
대댓글이 달려 있는 일반 댓글 삭제 -> 선택한 일반 댓글과 대댓글 모두 삭제
-
일반 댓글에 달려 있는 대댓글 삭제 -> 선택한 대댓글만 삭제. 일반 댓글과 다른 대댓글은 삭제되지 않음.
위 경우의 결과에 따라 댓글이 삭제되고 난 후의 댓글 결과를 댓글 조회 API(/api/video/comment/videoID/{videoID}
의 결과와 같이 리턴)
- 영상별(videoID별) 댓글 조회
[GET]/api/video/comment/videoID/{videoID}
각 videoID별 댓글을 commentID순, 댓글-대댓글 순으로 조회(사용자가 댓글 수정 시 작성 시간이 수정되므로 시간순은 아닐 수도 있음)
ex. /api/video/comment/videoID/86
videoID가 86인 영상에 있는 댓글을 모두 조회(사용자 프로필 사진 url 포함)
[
{
"commentID": 3,
"videoID": 86,
"userComment": "댓글수정했음2",
"username": "hj",
"commentDate": "2020-08-07T04:55:24.000+0000",
"profileUrl": "https://storage.googleapis.com/soktube.a...",
"parent": 0,
"seq": 1
},
{
"commentID": 68,
"videoID": 86,
"userComment": "테스트입니다.",
"username": "test123",
"commentDate": "2020-08-21T07:10:27.000+0000",
"profileUrl": "https://storage.googleapis.com/soktube.a...",
"parent": 0,
"seq": 1
},
{
"commentID": 69,
"videoID": 86,
"userComment": "테스트입니다.",
"username": "test123",
"commentDate": "2020-08-21T07:14:51.000+0000",
"profileUrl": "https://storage.googleapis.com/soktube.appspot....",
"parent": 68,
"seq": 2
}
]
"profileUrl": 사용자의 프로필 사진 이미지 url
"seq"가 1이고 parent가 0인 댓글: 일반 댓글
"parent"가 0이 아니고 "seq"가 2, 3, 4..등인 댓글: commentID가 parent값과 같은 댓글에 달린 대댓글
재생목록 댓글
- 재생목록 댓글 입력
[POST]/api/list/comment
대댓글이 아닌 일반 댓글을 작성할 경우 seq는 무조건 1로 백엔드에서 DB에 insert됨
listID:2
username:hj
userComment:재생목록 댓글 댓글 댓글
POST 전송 시 content type: application/x-www-form-urlencoded
입력한 댓글 내용 리턴(commentID는 auto_increment이므로 POST 요청에서 보낼 필요 없음)
{
"commentID": 6,
"listID": 2,
"userComment": "재생목록 댓글 댓글 댓글",
"username": "hj",
"commentDate": null
}
commentDate는 DB에는 제대로 저장되어 있음.(조회 시 올바른 시간 값 조회)
seq또한 DB에 1로 저장됨.
- 재생목록 댓글 수정
[PUT]/api/list/comment/update/{commentID}/{listID}/{username}
댓글 내용("userComment")만 수정 가능. 댓글 수정 날짜는 백엔드에서 삽입.
ex. /api/list/comment/update/6/2/hj
userComment:수정수정수정수정
PUT 전송 시 content type: application/x-www-form-urlencoded
수정된 댓글 내용 리턴(commentID는 auto_increment이므로 POST 요청에서 보낼 필요 없음)
{
"commentID": 3,
"videoID": 86,
"userComment": "댓글수정했음2",
"username": "hj",
"commentDate": "2020-08-07T04:27:06.000+0000"
}
- 재생목록 댓글 삭제
[DELETE]/api/list/comment/delete/{commentID}/{listID}/{seq}/{username}
사용자가 삭제하려는 댓글에 따라 삭제 결과 달라짐.
-
대댓글이 달려 있지 않은 일반 댓글 삭제 -> 해당 댓글만 삭제
-
대댓글이 달려 있는 일반 댓글 삭제 -> 선택한 일반 댓글과 대댓글 모두 삭제
-
일반 댓글에 달려 있는 대댓글 삭제 -> 선택한 대댓글만 삭제. 일반 댓글과 다른 대댓글은 삭제되지 않음.
위 경우의 결과에 따라 댓글이 삭제되고 난 후의 댓글 결과를 댓글 조회 API(/api/video/comment/videoID/{videoID}
의 결과와 같이 리턴)
- 각 재생목록에 대한 댓글 조회
[GET]/api/list/comment/listID/{listID}
각 listID별 댓글을 commentID순, 댓글-대댓글 순으로 조회(사용자가 댓글 수정 시 작성 시간이 수정되므로 시간순은 아닐 수도 있음)
ex. /api/list/comment/listID/2
listID가 2인 재생목록에 있는 댓글을 모두 조회(사용자의 프로필 사진 url 포함)
[
{
"commentID": 52,
"listID": 2,
"userComment": "comments",
"username": "test123",
"commentDate": "2020-08-21T06:54:34.000+0000",
"profileUrl": "https://storage.googleapis.com/soktube...",
"parent": 0,
"seq": 1
},
{
"commentID": 53,
"listID": 2,
"userComment": "comments",
"username": "test123",
"commentDate": "2020-08-21T06:56:17.000+0000",
"profileUrl": "https://storage.googleapis.com/soktube....",
"parent": 52,
"seq": 2
},
{
"commentID": 54,
"listID": 2,
"userComment": "대댓글입니다ㅏ",
"username": "hye",
"commentDate": "2020-08-21T06:56:49.000+0000",
"profileUrl": "https://storage.googleapis.com/soktube.appsp...c",
"parent": 52,
"seq": 3
}
]
"profileUrl": 사용자의 프로필 사진 이미지 url
"seq"가 1이고 parent가 0인 댓글: 일반 댓글
"parent"가 0이 아니고 "seq"가 2, 3, 4..등인 댓글: commentID가 parent값과 같은 댓글에 달린 대댓글
재생목록 복사
DB설계서의 listInfo
테이블 참조
변경된 - 기존 재생목록의 모든 동영상을 복사한 새로운 재생목록 만들기
2가지 API 필요
1. 복사된 재생목록의 이름, 설명, 썸네일 등 설정하기
[POST]/api/video/list/copy/newcopy
listName:복사 테스트
listDesc:재생목록 복사
thumbnail:test1231596689656838
username:hj
과 같이 재생목록 정보 POST. isPublic과 copied 컬럼은 자동으로 DB에 삽입됨. (복사된 재생목록은 공유 불가능하므로 isPublic:0
, 복사된 재생목록임을 나타내기 위해 copied:1
)
{
"listID": 23,
"listName": "복사 테스트",
"listDesc": "재생목록 복사 ",
"isPublic": 0,
"thumbnail": "test1231596689656838",
"username": "hj",
"copied": 1
}
생성된 재생목록 정보 결과가 리턴됨
2. 새로 복사한 재생목록에 기존 재생목록의 영상(listID-videoID) 복사
[POST]/api/video/list/copy/{copyFrom}/{copyTo}
{copyFrom}
: 사용자가 복사하겠다고 선택한 재생목록의 listID
(원본 재생목록)
{copyTo}
: 사용자가 복사를 위해 새로 생성한 재생목록의 listID
ex. 사용자가 listID
가 3인 재생목록 내의 영상들을 3을 복사한 새로운 재생목록(listID
가 23)에 복사하려면
=> /api/video/list/copy/3/23
호출
- 원본 재생목록의
listID
가져오기
[GET]/api/video/copy/isCopiedFrom/{listID}
현재 복사된 재생목록("copied":1
인 재생목록)의 원본 재생목록 listID
리턴
ex. /api/video/list/copy/3/23
으로 만들어진 재생목록인 listID:23
의 원본 재생목록 확인을 위해
/api/video/copy/isCopiedFrom/23
호출 => integer 형태의 3 리턴