from fastapi import APIRouter, Query from typing import List from app.services.search import music_searcher from app.schemas.schemas import SearchResult router = APIRouter() @router.get("/", response_model=dict) async def search_music( q: str = Query(..., min_length=1), source: str = Query("all", regex="^(all|youtube|bilibili)$"), limit: int = Query(10, ge=1, le=50) ): """ Search for music across different sources - **q**: Search query (song name, artist, etc.) - **source**: Source to search (all, youtube, bilibili) - **limit**: Maximum number of results per source """ if source == "all": results = await music_searcher.search_all(q, limit) elif source == "youtube": youtube_results = await music_searcher.search_youtube(q, limit) results = {"youtube": youtube_results, "bilibili": []} elif source == "bilibili": bilibili_results = await music_searcher.search_bilibili(q, limit) results = {"youtube": [], "bilibili": bilibili_results} else: results = {"youtube": [], "bilibili": []} return results @router.get("/youtube", response_model=List[SearchResult]) async def search_youtube( q: str = Query(..., min_length=1), limit: int = Query(10, ge=1, le=50) ): """Search YouTube for music""" return await music_searcher.search_youtube(q, limit) @router.get("/bilibili", response_model=List[SearchResult]) async def search_bilibili( q: str = Query(..., min_length=1), limit: int = Query(10, ge=1, le=50) ): """Search Bilibili for music""" return await music_searcher.search_bilibili(q, limit)