feat(score): invalidate cache when pin/unpin/reorder scores

This commit is contained in:
MingxuanGame
2025-10-08 06:12:12 +00:00
parent 6af0f814aa
commit a32976857f
3 changed files with 19 additions and 4 deletions

View File

@@ -5,6 +5,10 @@ from app.service.beatmapset_cache_service import (
BeatmapsetCacheService as OriginBeatmapsetCacheService,
get_beatmapset_cache_service,
)
from app.service.user_cache_service import (
UserCacheService as OriginUserCacheService,
get_user_cache_service,
)
from fastapi import Depends
@@ -14,4 +18,9 @@ def get_beatmapset_cache_dependency(redis: Redis) -> OriginBeatmapsetCacheServic
return get_beatmapset_cache_service(redis)
def get_user_cache_dependency(redis: Redis) -> OriginUserCacheService:
return get_user_cache_service(redis)
BeatmapsetCacheService = Annotated[OriginBeatmapsetCacheService, Depends(get_beatmapset_cache_dependency)]
UserCacheService = Annotated[OriginUserCacheService, Depends(get_user_cache_dependency)]

View File

@@ -5,7 +5,7 @@ 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 DownloadService
from app.dependencies.beatmapset_cache import BeatmapsetCacheService
from app.dependencies.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

View File

@@ -33,6 +33,7 @@ from app.database.score import (
process_user,
)
from app.dependencies.api_version import APIVersion
from app.dependencies.cache import UserCacheService
from app.dependencies.database import Database, Redis, get_redis, with_db
from app.dependencies.fetcher import Fetcher, get_fetcher
from app.dependencies.storage import StorageService
@@ -730,8 +731,9 @@ async def get_user_playlist_score(
)
async def pin_score(
db: Database,
score_id: Annotated[int, Path(description="成绩 ID")],
current_user: ClientUser,
user_cache_service: UserCacheService,
score_id: Annotated[int, Path(description="成绩 ID")],
):
# 立即获取用户ID避免懒加载问题
user_id = current_user.id
@@ -763,6 +765,7 @@ async def pin_score(
or 0
) + 1
score_record.pinned_order = next_order
await user_cache_service.invalidate_user_scores_cache(user_id, score_record.gamemode)
await db.commit()
@@ -775,6 +778,7 @@ async def pin_score(
)
async def unpin_score(
db: Database,
user_cache_service: UserCacheService,
score_id: Annotated[int, Path(description="成绩 ID")],
current_user: ClientUser,
):
@@ -799,6 +803,7 @@ async def unpin_score(
for s in changed_score:
s.pinned_order -= 1
score_record.pinned_order = 0
await user_cache_service.invalidate_user_scores_cache(user_id, score_record.gamemode)
await db.commit()
@@ -811,8 +816,9 @@ async def unpin_score(
)
async def reorder_score_pin(
db: Database,
score_id: Annotated[int, Path(description="成绩 ID")],
user_cache_service: UserCacheService,
current_user: ClientUser,
score_id: Annotated[int, Path(description="成绩 ID")],
after_score_id: Annotated[int | None, Body(description="放在该成绩之后")] = None,
before_score_id: Annotated[int | None, Body(description="放在该成绩之前")] = None,
):
@@ -882,7 +888,7 @@ async def reorder_score_pin(
score_to_update.pinned_order = new_order
score_record.pinned_order = final_target
await user_cache_service.invalidate_user_scores_cache(user_id, score_record.gamemode)
await db.commit()