25 lines
975 B
Python
25 lines
975 B
Python
|
|
from fastapi import APIRouter, Depends, HTTPException
|
||
|
|
from sqlalchemy.orm import Session
|
||
|
|
|
||
|
|
from app.core.auth_dependency import require_session
|
||
|
|
from app.db import get_db
|
||
|
|
from app.models.channel import Channel
|
||
|
|
from app.models.video import Video
|
||
|
|
from app.services.video_presentation import channel_categories_map, serialize_video
|
||
|
|
|
||
|
|
router = APIRouter(dependencies=[Depends(require_session)])
|
||
|
|
|
||
|
|
|
||
|
|
@router.get("/videos/{youtube_video_id}")
|
||
|
|
def get_video(youtube_video_id: str, db: Session = Depends(get_db)) -> dict:
|
||
|
|
video = db.query(Video).filter(Video.youtube_video_id == youtube_video_id).one_or_none()
|
||
|
|
if video is None:
|
||
|
|
raise HTTPException(status_code=404, detail="Video not found")
|
||
|
|
|
||
|
|
channel = db.get(Channel, video.channel_id)
|
||
|
|
if channel is None:
|
||
|
|
raise HTTPException(status_code=404, detail="Channel not found")
|
||
|
|
|
||
|
|
categories = channel_categories_map(db, [channel.id]).get(channel.id, [])
|
||
|
|
return serialize_video(video, channel, categories)
|