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, BeatmapsetCacheService as OriginBeatmapsetCacheService,
get_beatmapset_cache_service, get_beatmapset_cache_service,
) )
from app.service.user_cache_service import (
UserCacheService as OriginUserCacheService,
get_user_cache_service,
)
from fastapi import Depends from fastapi import Depends
@@ -14,4 +18,9 @@ def get_beatmapset_cache_dependency(redis: Redis) -> OriginBeatmapsetCacheServic
return get_beatmapset_cache_service(redis) 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)] 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 import Beatmap, Beatmapset, BeatmapsetResp, FavouriteBeatmapset, User
from app.database.beatmapset import SearchBeatmapsetsResp from app.database.beatmapset import SearchBeatmapsetsResp
from app.dependencies.beatmap_download import DownloadService 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.database import Database, Redis, with_db
from app.dependencies.fetcher import Fetcher from app.dependencies.fetcher import Fetcher
from app.dependencies.geoip import IPAddress, get_geoip_helper from app.dependencies.geoip import IPAddress, get_geoip_helper

View File

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