feat(score): invalidate cache when pin/unpin/reorder scores
This commit is contained in:
@@ -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)]
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user