refactor(api): use Annotated-style dependency injection
This commit is contained in:
@@ -6,23 +6,20 @@ from urllib.parse import parse_qs
|
||||
|
||||
from app.database import Beatmap, Beatmapset, BeatmapsetResp, FavouriteBeatmapset, User
|
||||
from app.database.beatmapset import SearchBeatmapsetsResp
|
||||
from app.dependencies.beatmap_download import get_beatmap_download_service
|
||||
from app.dependencies.beatmapset_cache import get_beatmapset_cache_dependency
|
||||
from app.dependencies.database import Database, get_redis, with_db
|
||||
from app.dependencies.fetcher import get_fetcher
|
||||
from app.dependencies.geoip import get_client_ip, get_geoip_helper
|
||||
from app.dependencies.user import get_client_user, get_current_user
|
||||
from app.fetcher import Fetcher
|
||||
from app.dependencies.beatmap_download import DownloadService
|
||||
from app.dependencies.beatmapset_cache import BeatmapsetCacheService
|
||||
from app.dependencies.database import Database, Redis, with_db
|
||||
from app.dependencies.fetcher import Fetcher
|
||||
from app.dependencies.geoip import IPAddress, get_geoip_helper
|
||||
from app.dependencies.user import ClientUser, get_current_user
|
||||
from app.models.beatmap import SearchQueryModel
|
||||
from app.service.asset_proxy_helper import process_response_assets
|
||||
from app.service.beatmap_download_service import BeatmapDownloadService
|
||||
from app.service.beatmapset_cache_service import BeatmapsetCacheService, generate_hash
|
||||
from app.service.beatmapset_cache_service import generate_hash
|
||||
|
||||
from .router import router
|
||||
|
||||
from fastapi import (
|
||||
BackgroundTasks,
|
||||
Depends,
|
||||
Form,
|
||||
HTTPException,
|
||||
Path,
|
||||
@@ -53,10 +50,10 @@ async def search_beatmapset(
|
||||
query: Annotated[SearchQueryModel, Query(...)],
|
||||
request: Request,
|
||||
background_tasks: BackgroundTasks,
|
||||
current_user: User = Security(get_current_user, scopes=["public"]),
|
||||
fetcher: Fetcher = Depends(get_fetcher),
|
||||
redis=Depends(get_redis),
|
||||
cache_service: BeatmapsetCacheService = Depends(get_beatmapset_cache_dependency),
|
||||
current_user: Annotated[User, Security(get_current_user, scopes=["public"])],
|
||||
fetcher: Fetcher,
|
||||
redis: Redis,
|
||||
cache_service: BeatmapsetCacheService,
|
||||
):
|
||||
params = parse_qs(qs=request.url.query, keep_blank_values=True)
|
||||
cursor = {}
|
||||
@@ -134,10 +131,10 @@ async def search_beatmapset(
|
||||
async def lookup_beatmapset(
|
||||
db: Database,
|
||||
request: Request,
|
||||
beatmap_id: int = Query(description="谱面 ID"),
|
||||
current_user: User = Security(get_current_user, scopes=["public"]),
|
||||
fetcher: Fetcher = Depends(get_fetcher),
|
||||
cache_service: BeatmapsetCacheService = Depends(get_beatmapset_cache_dependency),
|
||||
beatmap_id: Annotated[int, Query(description="谱面 ID")],
|
||||
current_user: Annotated[User, Security(get_current_user, scopes=["public"])],
|
||||
fetcher: Fetcher,
|
||||
cache_service: BeatmapsetCacheService,
|
||||
):
|
||||
# 先尝试从缓存获取
|
||||
cached_resp = await cache_service.get_beatmap_lookup_from_cache(beatmap_id)
|
||||
@@ -170,10 +167,10 @@ async def lookup_beatmapset(
|
||||
async def get_beatmapset(
|
||||
db: Database,
|
||||
request: Request,
|
||||
beatmapset_id: int = Path(..., description="谱面集 ID"),
|
||||
current_user: User = Security(get_current_user, scopes=["public"]),
|
||||
fetcher: Fetcher = Depends(get_fetcher),
|
||||
cache_service: BeatmapsetCacheService = Depends(get_beatmapset_cache_dependency),
|
||||
beatmapset_id: Annotated[int, Path(..., description="谱面集 ID")],
|
||||
current_user: Annotated[User, Security(get_current_user, scopes=["public"])],
|
||||
fetcher: Fetcher,
|
||||
cache_service: BeatmapsetCacheService,
|
||||
):
|
||||
# 先尝试从缓存获取
|
||||
cached_resp = await cache_service.get_beatmapset_from_cache(beatmapset_id)
|
||||
@@ -203,14 +200,12 @@ async def get_beatmapset(
|
||||
description="\n下载谱面集文件。基于请求IP地理位置智能分流,支持负载均衡和自动故障转移。中国IP使用Sayobot镜像,其他地区使用Nerinyan和OsuDirect镜像。",
|
||||
)
|
||||
async def download_beatmapset(
|
||||
request: Request,
|
||||
beatmapset_id: int = Path(..., description="谱面集 ID"),
|
||||
no_video: bool = Query(True, alias="noVideo", description="是否下载无视频版本"),
|
||||
current_user: User = Security(get_client_user),
|
||||
download_service: BeatmapDownloadService = Depends(get_beatmap_download_service),
|
||||
client_ip: IPAddress,
|
||||
beatmapset_id: Annotated[int, Path(..., description="谱面集 ID")],
|
||||
current_user: ClientUser,
|
||||
download_service: DownloadService,
|
||||
no_video: Annotated[bool, Query(alias="noVideo", description="是否下载无视频版本")] = True,
|
||||
):
|
||||
client_ip = get_client_ip(request)
|
||||
|
||||
geoip_helper = get_geoip_helper()
|
||||
geo_info = geoip_helper.lookup(client_ip)
|
||||
country_code = geo_info.get("country_iso", "")
|
||||
@@ -242,9 +237,12 @@ async def download_beatmapset(
|
||||
)
|
||||
async def favourite_beatmapset(
|
||||
db: Database,
|
||||
beatmapset_id: int = Path(..., description="谱面集 ID"),
|
||||
action: Literal["favourite", "unfavourite"] = Form(description="操作类型:favourite 收藏 / unfavourite 取消收藏"),
|
||||
current_user: User = Security(get_client_user),
|
||||
beatmapset_id: Annotated[int, Path(..., description="谱面集 ID")],
|
||||
action: Annotated[
|
||||
Literal["favourite", "unfavourite"],
|
||||
Form(description="操作类型:favourite 收藏 / unfavourite 取消收藏"),
|
||||
],
|
||||
current_user: ClientUser,
|
||||
):
|
||||
existing_favourite = (
|
||||
await db.exec(
|
||||
|
||||
Reference in New Issue
Block a user