diff --git a/app/main.py b/app/main.py index 2ed48bb317be5f1c5606579db930bcc5b9f05bab..d9cf3ddab285db44013799f3b5a2e991d5ba9810 100644 --- a/app/main.py +++ b/app/main.py @@ -5,7 +5,7 @@ from fastapi import FastAPI, Request, Response from app.journal import JournalInterceptorRoute from app.routers import labbooks, modify_comment_segment, modify_labbook, modify_labbook_entry, \ modify_labeled_segment, modify_tape, search, tapes, top, OrchiveAPIRouter, audio_segments, orca_sequences, \ - modify_orca_sequence, modify_audio_segment + modify_orca_sequence, modify_audio_segment, playlists from app.elastic_search import * @@ -27,6 +27,7 @@ app.include_router(modify_labeled_segment.router, tags=["Modify Labeled Segment" app.include_router(modify_comment_segment.router, tags=["Modify Comment Segment"]) app.include_router(modify_audio_segment.router, tags=["Modify Audio Segment"]) app.include_router(modify_orca_sequence.router, tags=["Modify Orca Sequence"]) +app.include_router(playlists.router, tags=["Saved Playlists"]) app_router = OrchiveAPIRouter(route_class=JournalInterceptorRoute) diff --git a/app/routers/playlists.py b/app/routers/playlists.py new file mode 100644 index 0000000000000000000000000000000000000000..5951920eb331ef6b115d4b651e2a48b234fd83d4 --- /dev/null +++ b/app/routers/playlists.py @@ -0,0 +1,41 @@ +from datetime import date +from enum import Enum +from typing import List, Optional + +from fastapi.responses import JSONResponse + +from pydantic import BaseModel + +import app.routers.top +from app.routers import Message, OrchiveAPIRouter + +import redis + +router = OrchiveAPIRouter() + +redis_client = redis.StrictRedis(host='redis', port=6379, db=0) + + +class PlaylistEntry(BaseModel): + user_name: str + sequences_str: Optional[int] = None + +@router.put("/playlists") +async def set_playlist(playlist: PlaylistEntry): + """Adds or updates a user playlist""" + if playlist.sequences_str: + redis_client.set(playlist.user_name, playlist.sequences_str) + else: + redis_client.delete(playlist.user_name) + return JSONResponse(status_code=200, content={"message": playlist.json()}) + +@router.get("/playlists", response_model=PlaylistEntry) +async def set_playlist(playlist: PlaylistEntry): + """gets the playlist or returns empty string otherwise""" + value = redis_client.get(playlist.user_name) + if value is not None: + playlist.sequences_str = value + else: + playlist.sequences_str = '' + + return JSONResponse(status_code=200, content=playlist.json()) diff --git a/requirements.txt b/requirements.txt index 891b3a77be5e762a4807644745d77703e86cbe35..67b5e1d080fba3e6fd13b882bba0d25716f3be10 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ fastapi==0.65.1 uvicorn[standard]==0.13.4 elasticsearch==7.12.1 +redis \ No newline at end of file