mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-04 23:17:20 +08:00
refactor: 推进后端分层架构治理
This commit is contained in:
@@ -2,13 +2,16 @@ from typing import Any, Awaitable, List, Optional
|
||||
|
||||
from fastapi import Depends, HTTPException, status
|
||||
|
||||
from app import schemas
|
||||
from app.schemas.event import RecommendMediaSource as _SchemaRecommendMediaSource
|
||||
from app.schemas.token import TokenPayload as _SchemaTokenPayload
|
||||
from app.schemas.transfer import MusicInfo as _SchemaMusicInfo
|
||||
from app.schemas.workflow import MediaInfo as _SchemaMediaInfo
|
||||
from app.api.response import ResponseAPIRouter
|
||||
from app.chain.recommend import RecommendChain
|
||||
from app.runtime.events import eventmanager
|
||||
from app.application.security.access import verify_token
|
||||
from app.schemas.exception import TMDbException
|
||||
from app.schemas import RecommendSourceEventData
|
||||
from app.schemas.event import RecommendSourceEventData
|
||||
from app.schemas.types import ChainEventType
|
||||
|
||||
router = ResponseAPIRouter()
|
||||
@@ -28,9 +31,9 @@ async def _require_tmdb_result(operation: Awaitable[List[Any]]) -> List[Any]:
|
||||
@router.get(
|
||||
"/source",
|
||||
summary="获取推荐数据源",
|
||||
response_model=List[schemas.RecommendMediaSource],
|
||||
response_model=List[_SchemaRecommendMediaSource],
|
||||
)
|
||||
def source(_: schemas.TokenPayload = Depends(verify_token)) -> Any:
|
||||
def source(_: _SchemaTokenPayload = Depends(verify_token)) -> Any:
|
||||
"""
|
||||
获取推荐数据源
|
||||
"""
|
||||
@@ -48,12 +51,12 @@ def source(_: schemas.TokenPayload = Depends(verify_token)) -> Any:
|
||||
@router.get(
|
||||
"/bangumi_calendar",
|
||||
summary="Bangumi每日放送",
|
||||
response_model=List[schemas.MediaInfo],
|
||||
response_model=List[_SchemaMediaInfo],
|
||||
)
|
||||
async def bangumi_calendar(
|
||||
page: Optional[int] = 1,
|
||||
count: Optional[int] = 30,
|
||||
_: schemas.TokenPayload = Depends(verify_token),
|
||||
_: _SchemaTokenPayload = Depends(verify_token),
|
||||
) -> Any:
|
||||
"""
|
||||
浏览Bangumi每日放送
|
||||
@@ -64,12 +67,12 @@ async def bangumi_calendar(
|
||||
@router.get(
|
||||
"/music_weekly",
|
||||
summary="ListenBrainz 本周热门音乐",
|
||||
response_model=List[schemas.MusicInfo],
|
||||
response_model=List[_SchemaMusicInfo],
|
||||
)
|
||||
async def music_weekly(
|
||||
page: Optional[int] = 1,
|
||||
count: Optional[int] = 30,
|
||||
_: schemas.TokenPayload = Depends(verify_token),
|
||||
_: _SchemaTokenPayload = Depends(verify_token),
|
||||
) -> Any:
|
||||
"""浏览本周全站热门音乐。"""
|
||||
return await RecommendChain().async_music_weekly(page=page, count=count)
|
||||
@@ -78,24 +81,24 @@ async def music_weekly(
|
||||
@router.get(
|
||||
"/music_douban",
|
||||
summary="豆瓣音乐推荐",
|
||||
response_model=List[schemas.MusicInfo],
|
||||
response_model=List[_SchemaMusicInfo],
|
||||
)
|
||||
async def music_douban(
|
||||
page: Optional[int] = 1,
|
||||
count: Optional[int] = 30,
|
||||
_: schemas.TokenPayload = Depends(verify_token),
|
||||
_: _SchemaTokenPayload = Depends(verify_token),
|
||||
) -> Any:
|
||||
"""浏览豆瓣音乐推荐合集。"""
|
||||
return await RecommendChain().async_music_douban(page=page, count=count)
|
||||
|
||||
|
||||
@router.get(
|
||||
"/douban_showing", summary="豆瓣正在热映", response_model=List[schemas.MediaInfo]
|
||||
"/douban_showing", summary="豆瓣正在热映", response_model=List[_SchemaMediaInfo]
|
||||
)
|
||||
async def douban_showing(
|
||||
page: Optional[int] = 1,
|
||||
count: Optional[int] = 30,
|
||||
_: schemas.TokenPayload = Depends(verify_token),
|
||||
_: _SchemaTokenPayload = Depends(verify_token),
|
||||
) -> Any:
|
||||
"""
|
||||
浏览豆瓣正在热映
|
||||
@@ -104,14 +107,14 @@ async def douban_showing(
|
||||
|
||||
|
||||
@router.get(
|
||||
"/douban_movies", summary="豆瓣电影", response_model=List[schemas.MediaInfo]
|
||||
"/douban_movies", summary="豆瓣电影", response_model=List[_SchemaMediaInfo]
|
||||
)
|
||||
async def douban_movies(
|
||||
sort: Optional[str] = "R",
|
||||
tags: Optional[str] = "",
|
||||
page: Optional[int] = 1,
|
||||
count: Optional[int] = 30,
|
||||
_: schemas.TokenPayload = Depends(verify_token),
|
||||
_: _SchemaTokenPayload = Depends(verify_token),
|
||||
) -> Any:
|
||||
"""
|
||||
浏览豆瓣电影信息
|
||||
@@ -121,13 +124,13 @@ async def douban_movies(
|
||||
)
|
||||
|
||||
|
||||
@router.get("/douban_tvs", summary="豆瓣剧集", response_model=List[schemas.MediaInfo])
|
||||
@router.get("/douban_tvs", summary="豆瓣剧集", response_model=List[_SchemaMediaInfo])
|
||||
async def douban_tvs(
|
||||
sort: Optional[str] = "R",
|
||||
tags: Optional[str] = "",
|
||||
page: Optional[int] = 1,
|
||||
count: Optional[int] = 30,
|
||||
_: schemas.TokenPayload = Depends(verify_token),
|
||||
_: _SchemaTokenPayload = Depends(verify_token),
|
||||
) -> Any:
|
||||
"""
|
||||
浏览豆瓣剧集信息
|
||||
@@ -140,12 +143,12 @@ async def douban_tvs(
|
||||
@router.get(
|
||||
"/douban_movie_top250",
|
||||
summary="豆瓣电影TOP250",
|
||||
response_model=List[schemas.MediaInfo],
|
||||
response_model=List[_SchemaMediaInfo],
|
||||
)
|
||||
async def douban_movie_top250(
|
||||
page: Optional[int] = 1,
|
||||
count: Optional[int] = 30,
|
||||
_: schemas.TokenPayload = Depends(verify_token),
|
||||
_: _SchemaTokenPayload = Depends(verify_token),
|
||||
) -> Any:
|
||||
"""
|
||||
浏览豆瓣剧集信息
|
||||
@@ -156,12 +159,12 @@ async def douban_movie_top250(
|
||||
@router.get(
|
||||
"/douban_tv_weekly_chinese",
|
||||
summary="豆瓣国产剧集周榜",
|
||||
response_model=List[schemas.MediaInfo],
|
||||
response_model=List[_SchemaMediaInfo],
|
||||
)
|
||||
async def douban_tv_weekly_chinese(
|
||||
page: Optional[int] = 1,
|
||||
count: Optional[int] = 30,
|
||||
_: schemas.TokenPayload = Depends(verify_token),
|
||||
_: _SchemaTokenPayload = Depends(verify_token),
|
||||
) -> Any:
|
||||
"""
|
||||
中国每周剧集口碑榜
|
||||
@@ -172,12 +175,12 @@ async def douban_tv_weekly_chinese(
|
||||
@router.get(
|
||||
"/douban_tv_weekly_global",
|
||||
summary="豆瓣全球剧集周榜",
|
||||
response_model=List[schemas.MediaInfo],
|
||||
response_model=List[_SchemaMediaInfo],
|
||||
)
|
||||
async def douban_tv_weekly_global(
|
||||
page: Optional[int] = 1,
|
||||
count: Optional[int] = 30,
|
||||
_: schemas.TokenPayload = Depends(verify_token),
|
||||
_: _SchemaTokenPayload = Depends(verify_token),
|
||||
) -> Any:
|
||||
"""
|
||||
全球每周剧集口碑榜
|
||||
@@ -188,12 +191,12 @@ async def douban_tv_weekly_global(
|
||||
@router.get(
|
||||
"/douban_tv_animation",
|
||||
summary="豆瓣动画剧集",
|
||||
response_model=List[schemas.MediaInfo],
|
||||
response_model=List[_SchemaMediaInfo],
|
||||
)
|
||||
async def douban_tv_animation(
|
||||
page: Optional[int] = 1,
|
||||
count: Optional[int] = 30,
|
||||
_: schemas.TokenPayload = Depends(verify_token),
|
||||
_: _SchemaTokenPayload = Depends(verify_token),
|
||||
) -> Any:
|
||||
"""
|
||||
热门动画剧集
|
||||
@@ -202,12 +205,12 @@ async def douban_tv_animation(
|
||||
|
||||
|
||||
@router.get(
|
||||
"/douban_movie_hot", summary="豆瓣热门电影", response_model=List[schemas.MediaInfo]
|
||||
"/douban_movie_hot", summary="豆瓣热门电影", response_model=List[_SchemaMediaInfo]
|
||||
)
|
||||
async def douban_movie_hot(
|
||||
page: Optional[int] = 1,
|
||||
count: Optional[int] = 30,
|
||||
_: schemas.TokenPayload = Depends(verify_token),
|
||||
_: _SchemaTokenPayload = Depends(verify_token),
|
||||
) -> Any:
|
||||
"""
|
||||
热门电影
|
||||
@@ -216,12 +219,12 @@ async def douban_movie_hot(
|
||||
|
||||
|
||||
@router.get(
|
||||
"/douban_tv_hot", summary="豆瓣热门电视剧", response_model=List[schemas.MediaInfo]
|
||||
"/douban_tv_hot", summary="豆瓣热门电视剧", response_model=List[_SchemaMediaInfo]
|
||||
)
|
||||
async def douban_tv_hot(
|
||||
page: Optional[int] = 1,
|
||||
count: Optional[int] = 30,
|
||||
_: schemas.TokenPayload = Depends(verify_token),
|
||||
_: _SchemaTokenPayload = Depends(verify_token),
|
||||
) -> Any:
|
||||
"""
|
||||
热门电视剧
|
||||
@@ -229,7 +232,7 @@ async def douban_tv_hot(
|
||||
return await RecommendChain().async_douban_tv_hot(page=page, count=count)
|
||||
|
||||
|
||||
@router.get("/tmdb_movies", summary="TMDB电影", response_model=List[schemas.MediaInfo])
|
||||
@router.get("/tmdb_movies", summary="TMDB电影", response_model=List[_SchemaMediaInfo])
|
||||
async def tmdb_movies(
|
||||
sort_by: Optional[str] = "popularity.desc",
|
||||
with_genres: Optional[str] = "",
|
||||
@@ -240,7 +243,7 @@ async def tmdb_movies(
|
||||
vote_count: Optional[int] = 0,
|
||||
release_date: Optional[str] = "",
|
||||
page: Optional[int] = 1,
|
||||
_: schemas.TokenPayload = Depends(verify_token),
|
||||
_: _SchemaTokenPayload = Depends(verify_token),
|
||||
) -> Any:
|
||||
"""
|
||||
浏览TMDB电影信息
|
||||
@@ -261,7 +264,7 @@ async def tmdb_movies(
|
||||
)
|
||||
|
||||
|
||||
@router.get("/tmdb_tvs", summary="TMDB剧集", response_model=List[schemas.MediaInfo])
|
||||
@router.get("/tmdb_tvs", summary="TMDB剧集", response_model=List[_SchemaMediaInfo])
|
||||
async def tmdb_tvs(
|
||||
sort_by: Optional[str] = "popularity.desc",
|
||||
with_genres: Optional[str] = "",
|
||||
@@ -272,7 +275,7 @@ async def tmdb_tvs(
|
||||
vote_count: Optional[int] = 0,
|
||||
release_date: Optional[str] = "",
|
||||
page: Optional[int] = 1,
|
||||
_: schemas.TokenPayload = Depends(verify_token),
|
||||
_: _SchemaTokenPayload = Depends(verify_token),
|
||||
) -> Any:
|
||||
"""
|
||||
浏览TMDB剧集信息
|
||||
@@ -294,10 +297,10 @@ async def tmdb_tvs(
|
||||
|
||||
|
||||
@router.get(
|
||||
"/tmdb_trending", summary="TMDB流行趋势", response_model=List[schemas.MediaInfo]
|
||||
"/tmdb_trending", summary="TMDB流行趋势", response_model=List[_SchemaMediaInfo]
|
||||
)
|
||||
async def tmdb_trending(
|
||||
page: Optional[int] = 1, _: schemas.TokenPayload = Depends(verify_token)
|
||||
page: Optional[int] = 1, _: _SchemaTokenPayload = Depends(verify_token)
|
||||
) -> Any:
|
||||
"""
|
||||
TMDB流行趋势
|
||||
|
||||
Reference in New Issue
Block a user