From 3f31785428638652ba13846c56128683e3b61c43 Mon Sep 17 00:00:00 2001 From: chenjintang-shrimp Date: Wed, 13 Aug 2025 17:17:39 +0000 Subject: [PATCH] =?UTF-8?q?feat(database):=20=E6=B7=BB=E5=8A=A0=E5=85=A8?= =?UTF-8?q?=E7=90=83=E6=8E=92=E5=90=8D=E4=BA=8B=E4=BB=B6=E8=A7=A6=E5=8F=91?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 ScoreResp 类中添加逻辑,判断玩家是否进入全球前 50 或前 1% 排名 --- app/database/score.py | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/app/database/score.py b/app/database/score.py index 88111ad..41b6893 100644 --- a/app/database/score.py +++ b/app/database/score.py @@ -13,7 +13,8 @@ from app.calculator import ( calculate_weighted_pp, clamp, ) -from app.config import settings +from app.config import Settings, settings +from app.database.events import Event, EventType from app.database.team import TeamMember from app.models.model import ( CurrentUserAttributes, @@ -225,6 +226,31 @@ 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": str(Settings.frontend_url) + "/users/" + str(score.user.id), + }, + } + session.add(rank_event) + await session.commit() s.rank_country = ( await get_score_position_by_id( session,