56 lines
No EOL
1.3 KiB
Python
56 lines
No EOL
1.3 KiB
Python
"""
|
|
Likes API routes - manage locally saved liked videos.
|
|
"""
|
|
|
|
from fastapi import APIRouter, HTTPException
|
|
from pydantic import BaseModel
|
|
from typing import Optional, List
|
|
|
|
from core.local_likes import add_like, remove_like, is_liked, get_likes, clear_likes
|
|
|
|
router = APIRouter(prefix="/likes", tags=["likes"])
|
|
|
|
|
|
class VideoLike(BaseModel):
|
|
id: str
|
|
url: str
|
|
author: str
|
|
description: Optional[str] = None
|
|
thumbnail: Optional[str] = None
|
|
cdn_url: Optional[str] = None
|
|
views: Optional[int] = None
|
|
|
|
|
|
@router.post("")
|
|
async def like_video(video: VideoLike):
|
|
"""Add a video to liked list."""
|
|
result = add_like(video.model_dump())
|
|
return result
|
|
|
|
|
|
@router.delete("/{video_id}")
|
|
async def unlike_video(video_id: str):
|
|
"""Remove a video from liked list."""
|
|
result = remove_like(video_id)
|
|
return result
|
|
|
|
|
|
@router.get("")
|
|
async def get_liked_videos():
|
|
"""Get all liked videos."""
|
|
likes = get_likes()
|
|
return {"videos": likes, "count": len(likes)}
|
|
|
|
|
|
@router.get("/check/{video_id}")
|
|
async def check_liked(video_id: str):
|
|
"""Check if a video is liked."""
|
|
liked = is_liked(video_id)
|
|
return {"video_id": video_id, "liked": liked}
|
|
|
|
|
|
@router.delete("")
|
|
async def clear_all_likes():
|
|
"""Clear all liked videos."""
|
|
result = clear_likes()
|
|
return result |