File size: 3,025 Bytes
d2726bc |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
from fastapi import (
APIRouter,
Depends,
HTTPException,
status,
Security,
)
from models.music import Album, BaseAlbum
from db.supabase_service import get_supabase
from typing import Annotated, List, Tuple
from supabase import Client
from utils.auth import get_id
from fastapi.encoders import jsonable_encoder
from utils.exceptions import BAD_REQUEST
router = APIRouter(tags=["Album"], prefix="/album")
@router.post("", description="Create album")
async def create_album(
supabase: Annotated[Client, Depends(get_supabase)],
user_id: Annotated[str, Security(get_id)],
album: BaseAlbum,
):
try:
supabase.table("albums").insert(
{"name": album.name, "description": album.description, "user_id": user_id}
).execute()
return {"detail": "Album created"}
except:
raise BAD_REQUEST
# delete album
@router.delete("", description="Delete album")
async def delete_album(
supabase: Annotated[Client, Depends(get_supabase)],
user_id: Annotated[str, Security(get_id)],
album_id: int,
):
try:
supabase.table("albums").delete().eq("id", album_id).execute()
return {"detail": "Album deleted"}
except:
raise BAD_REQUEST
# get list of all album
@router.get("/all", description="Get list of all album", response_model=List[Album])
async def get_all_album(
supabase: Annotated[Client, Depends(get_supabase)],
user_id: Annotated[str, Security(get_id)],
) -> List[Album]:
try:
res = supabase.table("albums").select("*").execute().dict()["data"]
return res
except:
raise BAD_REQUEST
# modify album
@router.patch("", description="Modify album")
async def modify_album(
supabase: Annotated[Client, Depends(get_supabase)],
user_id: Annotated[str, Security(get_id)],
album: Album,
songs: List[int],
):
try:
if album.user_id != user_id:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="You are not the owner of this album",
)
supabase.table("albums").update(
jsonable_encoder(album, exclude={"id", "user_id", "created_at"})
).eq("id", album.id).execute()
supabase.table("songs").update({"album_id": None}).eq(
"album_id", album.id
).execute()
supabase.table("songs").update({"album_id": album.id}).in_(
"id", songs
).execute()
return {"detail": "Album modified"}
except:
raise BAD_REQUEST
# get album and its songs
@router.get("", description="Get album and its songs")
async def get_album(
supabase: Annotated[Client, Depends(get_supabase)],
user_id: Annotated[str, Security(get_id)],
album_id: int,
):
try:
res = (
supabase.table("albums")
.select("*, songs(*)")
.eq("id", album_id)
.execute()
.dict()["data"][0]
)
return res
except:
raise BAD_REQUEST
|