refactor(assets_proxy): use decorators to simplify code

This commit is contained in:
MingxuanGame
2025-10-03 17:12:28 +00:00
parent d490239f46
commit 046f894407
53 changed files with 151 additions and 313 deletions

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from datetime import timedelta
from typing import Annotated, Literal
@@ -19,10 +17,10 @@ from app.database.user import SEARCH_INCLUDED
from app.dependencies.api_version import APIVersion
from app.dependencies.database import Database, get_redis
from app.dependencies.user import get_current_user
from app.helpers.asset_proxy_helper import asset_proxy_response
from app.log import log
from app.models.score import GameMode
from app.models.user import BeatmapsetType
from app.service.asset_proxy_helper import process_response_assets
from app.service.user_cache_service import get_user_cache_service
from app.utils import utcnow
@@ -47,6 +45,7 @@ class BatchUserResponse(BaseModel):
)
@router.get("/users/lookup", response_model=BatchUserResponse, include_in_schema=False)
@router.get("/users/lookup/", response_model=BatchUserResponse, include_in_schema=False)
@asset_proxy_response
async def get_users(
session: Database,
request: Request,
@@ -89,28 +88,25 @@ async def get_users(
# 异步缓存,不阻塞响应
background_task.add_task(cache_service.cache_user, user_resp)
# 处理资源代理
response = BatchUserResponse(users=cached_users)
processed_response = await process_response_assets(response)
return processed_response
return response
else:
searched_users = (await session.exec(select(User).limit(50))).all()
users = []
for searched_user in searched_users:
if searched_user.id != BANCHOBOT_ID:
user_resp = await UserResp.from_db(
searched_user,
session,
include=SEARCH_INCLUDED,
)
users.append(user_resp)
# 异步缓存
background_task.add_task(cache_service.cache_user, user_resp)
if searched_user.id == BANCHOBOT_ID:
continue
user_resp = await UserResp.from_db(
searched_user,
session,
include=SEARCH_INCLUDED,
)
users.append(user_resp)
# 异步缓存
background_task.add_task(cache_service.cache_user, user_resp)
# 处理资源代理
response = BatchUserResponse(users=users)
processed_response = await process_response_assets(response)
return processed_response
return response
@router.get(
@@ -176,6 +172,7 @@ async def get_user_kudosu(
description="通过用户 ID 或用户名获取单个用户的详细信息,并指定特定 ruleset。",
tags=["用户"],
)
@asset_proxy_response
async def get_user_info_ruleset(
session: Database,
background_task: BackgroundTasks,
@@ -224,6 +221,7 @@ async def get_user_info_ruleset(
description="通过用户 ID 或用户名获取单个用户的详细信息。",
tags=["用户"],
)
@asset_proxy_response
async def get_user_info(
background_task: BackgroundTasks,
session: Database,
@@ -239,9 +237,7 @@ async def get_user_info(
user_id_int = int(user_id)
cached_user = await cache_service.get_user_from_cache(user_id_int)
if cached_user:
# 处理资源代理
processed_user = await process_response_assets(cached_user)
return processed_user
return cached_user
searched_user = (
await session.exec(
@@ -262,9 +258,7 @@ async def get_user_info(
# 异步缓存结果
background_task.add_task(cache_service.cache_user, user_resp)
# 处理资源代理
processed_user = await process_response_assets(user_resp)
return processed_user
return user_resp
@router.get(
@@ -274,6 +268,7 @@ async def get_user_info(
description="获取指定用户特定类型的谱面集列表,如最常游玩、收藏等。",
tags=["用户"],
)
@asset_proxy_response
async def get_user_beatmapsets(
session: Database,
background_task: BackgroundTasks,
@@ -354,6 +349,7 @@ async def get_user_beatmapsets(
),
tags=["用户"],
)
@asset_proxy_response
async def get_user_scores(
request: Request,
session: Database,
@@ -381,8 +377,7 @@ async def get_user_scores(
user_id, type, include_fails, mode, limit, offset, is_legacy_api
)
if cached_scores is not None:
processed_scores = await process_response_assets(cached_scores)
return processed_scores
return cached_scores
db_user = await session.get(User, user_id)
if not db_user or db_user.id == BANCHOBOT_ID:
@@ -437,6 +432,4 @@ async def get_user_scores(
is_legacy_api,
)
# 处理资源代理
processed_scores = await process_response_assets(score_responses)
return processed_scores
return score_responses