feat(recalculate): add scheduled job to recalculate failed scores

This commit is contained in:
MingxuanGame
2025-08-28 16:53:15 +00:00
parent fdb08fe31f
commit 224e890e31
4 changed files with 71 additions and 10 deletions

View File

@@ -11,6 +11,7 @@ from app.calculator import (
calculate_weighted_acc,
calculate_weighted_pp,
clamp,
pre_fetch_and_calculate_pp,
)
from app.database.team import TeamMember
from app.dependencies.database import get_redis
@@ -880,15 +881,16 @@ async def process_score(
maximum_statistics=info.maximum_statistics,
processed=True,
)
successed = True
if can_get_pp:
from app.calculator import pre_fetch_and_calculate_pp
pp = await pre_fetch_and_calculate_pp(score, beatmap_id, session, redis, fetcher)
pp, successed = await pre_fetch_and_calculate_pp(score, session, redis, fetcher)
score.pp = pp
session.add(score)
user_id = user.id
await session.commit()
await session.refresh(score)
if not successed:
await redis.rpush("score:need_recalculate", score.id) # pyright: ignore[reportGeneralTypeIssues]
if can_get_pp and score.pp != 0:
previous_pp_best = await get_user_best_pp_in_beatmap(session, beatmap_id, user_id, score.gamemode)
if previous_pp_best is None or score.pp > previous_pp_best.pp: