refactor: 推进后端分层架构治理

This commit is contained in:
jxxghp
2026-08-18 00:29:14 +08:00
parent 5d0bacabd5
commit 5128ae9e1e
363 changed files with 34179 additions and 6019 deletions
+37 -34
View File
@@ -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流行趋势