mirror of
https://github.com/StepanovPlaton/torrent_backend.git
synced 2026-04-03 12:20:38 +04:00
62 lines
2.8 KiB
Python
62 lines
2.8 KiB
Python
from sqlalchemy.ext.asyncio import AsyncSession
|
|
from fastapi import APIRouter, Depends, HTTPException, status
|
|
|
|
import database as db
|
|
from file_handler import *
|
|
from routes.auth import get_user
|
|
|
|
audiobooks_router = APIRouter(prefix="/audiobooks", tags=["Audiobooks"])
|
|
|
|
|
|
@audiobooks_router.get("", response_model=list[db.Audiobook])
|
|
async def get_audiobooks(db_session: AsyncSession = Depends(db.get_session)):
|
|
return await db.get_audiobooks(db_session)
|
|
|
|
|
|
@audiobooks_router.post("", response_model=db.Audiobook)
|
|
async def add_audiobook(audiobook: db.AudiobookCreate,
|
|
user: db.User = Depends(get_user),
|
|
db_session: AsyncSession = Depends(db.get_session)):
|
|
return await db.add_audiobook(db_session, audiobook, user.id)
|
|
|
|
|
|
@audiobooks_router.get("/cards", response_model=list[db.AudiobookCard])
|
|
async def get_audiobooks_cards(db_session: AsyncSession = Depends(db.get_session)):
|
|
return await db.get_audiobooks(db_session)
|
|
|
|
|
|
@audiobooks_router.get("/{audiobook_id}", response_model=db.Audiobook)
|
|
async def get_audiobook(audiobook_id: int, db_session: AsyncSession = Depends(db.get_session)):
|
|
return await db.get_audiobook(db_session, audiobook_id)
|
|
|
|
|
|
@audiobooks_router.put("/{audiobook_id}", response_model=db.Audiobook)
|
|
async def edit_audiobook(audiobook_id: int,
|
|
audiobook: db.AudiobookCreate,
|
|
user: db.User = Depends(get_user),
|
|
db_session: AsyncSession = Depends(db.get_session)):
|
|
audiobook_db = await db.get_audiobook(db_session, audiobook_id)
|
|
if (audiobook_db is None):
|
|
raise HTTPException(status.HTTP_404_NOT_FOUND,
|
|
detail=f"Audiobook with id={audiobook_id} not found")
|
|
if (user.id != audiobook_db.owner_id):
|
|
raise HTTPException(status.HTTP_401_UNAUTHORIZED,
|
|
detail=f"Audiobook can only be edited "
|
|
"by the owner (creator)")
|
|
return await db.edit_audiobook(db_session, audiobook_id, audiobook)
|
|
|
|
|
|
@audiobooks_router.delete("/{audiobook_id}", response_model=db.Audiobook)
|
|
async def delete_audiobook(audiobook_id: int,
|
|
user: db.User = Depends(get_user),
|
|
db_session: AsyncSession = Depends(db.get_session)):
|
|
audiobook_db = await db.get_audiobook(db_session, audiobook_id)
|
|
if (audiobook_db is None):
|
|
raise HTTPException(status.HTTP_404_NOT_FOUND,
|
|
detail=f"Audiobook with id={audiobook_id} not found")
|
|
if (user.id != audiobook_db.owner_id):
|
|
raise HTTPException(status.HTTP_401_UNAUTHORIZED,
|
|
detail=f"Audiobook can only be deleted "
|
|
"by the owner (creator)")
|
|
return await db.delete_audiobook(db_session, audiobook_id)
|