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,
|
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)]
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user