추가기능 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}

사용자가 삭제하려는 댓글에 따라 삭제 결과 달라짐.

  1. 대댓글이 달려 있지 않은 일반 댓글 삭제 -> 해당 댓글만 삭제

  2. 대댓글이 달려 있는 일반 댓글 삭제 -> 선택한 일반 댓글과 대댓글 모두 삭제

  3. 일반 댓글에 달려 있는 대댓글 삭제 -> 선택한 대댓글만 삭제. 일반 댓글과 다른 대댓글은 삭제되지 않음.

위 경우의 결과에 따라 댓글이 삭제되고 난 후의 댓글 결과를 댓글 조회 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}

사용자가 삭제하려는 댓글에 따라 삭제 결과 달라짐.

  1. 대댓글이 달려 있지 않은 일반 댓글 삭제 -> 해당 댓글만 삭제

  2. 대댓글이 달려 있는 일반 댓글 삭제 -> 선택한 일반 댓글과 대댓글 모두 삭제

  3. 일반 댓글에 달려 있는 대댓글 삭제 -> 선택한 대댓글만 삭제. 일반 댓글과 다른 대댓글은 삭제되지 않음.

위 경우의 결과에 따라 댓글이 삭제되고 난 후의 댓글 결과를 댓글 조회 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 리턴