API endpoints improvement, #build

- merges adding config key to api return values
- add video progress api endpoint
This commit is contained in:
simon 2022-02-17 18:21:56 +07:00
commit 2044dba700
No known key found for this signature in database
GPG Key ID: 2C15AA5E89985DD4
4 changed files with 74 additions and 1 deletions

View File

@ -23,6 +23,32 @@ response = requests.get(url, headers=headers)
## Video Item View ## Video Item View
/api/video/\<video_id>/ /api/video/\<video_id>/
## Video Progress View
/api/video/\<video_id>/progress
Progress is stored for each user.
### Get last player position of a video
GET /api/video/\<video_id>/progress
```json
{
"youtube_id": "<video_id>",
"user_id": 1,
"position": 100
}
```
### Post player position of video
POST /api/video/\<video_id>/progress
```json
{
"position": 100
}
```
### Delete player position of video
DELETE /api/video/\<video_id>/progress
## Channel List View ## Channel List View
/api/channel/ /api/channel/

View File

@ -7,6 +7,7 @@ from api.views import (
DownloadApiView, DownloadApiView,
PlaylistApiView, PlaylistApiView,
VideoApiView, VideoApiView,
VideoProgressView,
) )
from django.urls import path from django.urls import path
@ -16,6 +17,11 @@ urlpatterns = [
VideoApiView.as_view(), VideoApiView.as_view(),
name="api-video", name="api-video",
), ),
path(
"video/<slug:video_id>/progress/",
VideoProgressView.as_view(),
name="api-video-progress",
),
path( path(
"channel/", "channel/",
ChannelApiListView.as_view(), ChannelApiListView.as_view(),

View File

@ -4,6 +4,7 @@ import requests
from home.src.download.thumbnails import ThumbManager from home.src.download.thumbnails import ThumbManager
from home.src.ta.config import AppConfig from home.src.ta.config import AppConfig
from home.src.ta.helper import UrlListParser from home.src.ta.helper import UrlListParser
from home.src.ta.ta_redis import RedisArchivist
from home.tasks import extrac_dl, subscribe_to from home.tasks import extrac_dl, subscribe_to
from rest_framework.authentication import ( from rest_framework.authentication import (
SessionAuthentication, SessionAuthentication,
@ -34,6 +35,7 @@ class ApiBaseView(APIView):
"es_url": self.default_conf["application"]["es_url"], "es_url": self.default_conf["application"]["es_url"],
"es_auth": self.default_conf["application"]["es_auth"], "es_auth": self.default_conf["application"]["es_auth"],
} }
self.response["config"] = self.default_conf
def get_document(self, document_id): def get_document(self, document_id):
"""get single document from es""" """get single document from es"""
@ -98,6 +100,45 @@ class VideoApiView(ApiBaseView):
return Response(self.response, status=self.status_code) return Response(self.response, status=self.status_code)
class VideoProgressView(APIView):
"""resolves to /api/video/<video_id>/
handle progress status for video
"""
@staticmethod
def get(request, video_id):
"""get progress for a single video"""
user_id = request.user.id
key = f"{user_id}:progress:{video_id}"
video_progress = RedisArchivist().get_message(key)
position = video_progress.get("position", 0)
progress = {
"youtube_id": video_id,
"user_id": user_id,
"position": position,
}
return Response(progress)
@staticmethod
def post(request, video_id):
"""set progress position in redis"""
position = request.data.get("position", 0)
key = f"{request.user.id}:progress:{video_id}"
message = {"position": position}
RedisArchivist().set_message(key, message, expire=False)
return Response(request.data)
@staticmethod
def delete(request, video_id):
"""delete progress position"""
key = f"{request.user.id}:progress:{video_id}"
RedisArchivist().del_message(key)
return Response({"progress-reset": video_id})
class ChannelApiView(ApiBaseView): class ChannelApiView(ApiBaseView):
"""resolves to /api/channel/<channel_id>/ """resolves to /api/channel/<channel_id>/
GET: returns metadata dict of channel GET: returns metadata dict of channel

View File

@ -4,7 +4,7 @@ Django==4.0.2
django-cors-headers==3.11.0 django-cors-headers==3.11.0
djangorestframework==3.13.1 djangorestframework==3.13.1
Pillow==9.0.1 Pillow==9.0.1
redis==4.1.3 redis==4.1.4
requests==2.27.1 requests==2.27.1
ryd-client==0.0.3 ryd-client==0.0.3
uWSGI==2.0.20 uWSGI==2.0.20