fix(event): trigger rank when submitting score

This commit is contained in:
MingxuanGame
2025-08-14 14:11:52 +00:00
parent 7fb7c094fd
commit 155905f652
2 changed files with 27 additions and 26 deletions

View File

@@ -224,31 +224,6 @@ class ScoreResp(ScoreBase):
)
or None
)
total_users = (
await session.exec(select(func.count()).select_from(User))
).first()
assert total_users is not None
if s.rank_global is not None and s.rank_global <= min(
math.ceil(float(total_users) * 0.01), 50
):
rank_event = Event(
created_at=datetime.now(UTC),
type=EventType.RANK,
user_id=score.user_id,
user=score.user,
)
rank_event.event_payload = {
"scorerank": str(score.rank),
"rank": s.rank_global,
"mode": str(s.beatmap.mode),
"beatmap": {"title": s.beatmap.version, "url": s.beatmap.url},
"user": {
"username": score.user.username,
"url": settings.web_url + "users/" + str(score.user.id),
},
}
session.add(rank_event)
await session.commit()
s.rank_country = (
await get_score_position_by_id(
session,

View File

@@ -1,6 +1,7 @@
from __future__ import annotations
from datetime import UTC, date, datetime
import math
import time
from app.calculator import clamp
@@ -16,6 +17,7 @@ from app.database import (
User,
)
from app.database.counts import ReplayWatchedCount
from app.database.events import Event, EventType
from app.database.playlist_attempts import ItemAttemptsCount
from app.database.playlist_best_score import (
PlaylistBestScore,
@@ -123,7 +125,31 @@ async def submit_score(
)
score = (await db.exec(select(Score).where(Score.id == score_id))).first()
assert score is not None
return await ScoreResp.from_db(db, score)
resp = await ScoreResp.from_db(db, score)
total_users = (await db.exec(select(func.count()).select_from(User))).first()
assert total_users is not None
if resp.rank_global is not None and resp.rank_global <= min(
math.ceil(float(total_users) * 0.01), 50
):
rank_event = Event(
created_at=datetime.now(UTC),
type=EventType.RANK,
user_id=score.user_id,
user=score.user,
)
rank_event.event_payload = {
"scorerank": str(score.rank),
"rank": resp.rank_global,
"mode": str(resp.beatmap.mode), # pyright: ignore[reportOptionalMemberAccess]
"beatmap": {"title": resp.beatmap.version, "url": resp.beatmap.url}, # pyright: ignore[reportOptionalMemberAccess]
"user": {
"username": score.user.username,
"url": settings.web_url + "users/" + str(score.user.id),
},
}
db.add(rank_event)
await db.commit()
return resp
class BeatmapScores(BaseModel):