fix(event): trigger rank when submitting score
This commit is contained in:
@@ -224,31 +224,6 @@ class ScoreResp(ScoreBase):
|
|||||||
)
|
)
|
||||||
or None
|
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 = (
|
s.rank_country = (
|
||||||
await get_score_position_by_id(
|
await get_score_position_by_id(
|
||||||
session,
|
session,
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from datetime import UTC, date, datetime
|
from datetime import UTC, date, datetime
|
||||||
|
import math
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from app.calculator import clamp
|
from app.calculator import clamp
|
||||||
@@ -16,6 +17,7 @@ from app.database import (
|
|||||||
User,
|
User,
|
||||||
)
|
)
|
||||||
from app.database.counts import ReplayWatchedCount
|
from app.database.counts import ReplayWatchedCount
|
||||||
|
from app.database.events import Event, EventType
|
||||||
from app.database.playlist_attempts import ItemAttemptsCount
|
from app.database.playlist_attempts import ItemAttemptsCount
|
||||||
from app.database.playlist_best_score import (
|
from app.database.playlist_best_score import (
|
||||||
PlaylistBestScore,
|
PlaylistBestScore,
|
||||||
@@ -123,7 +125,31 @@ async def submit_score(
|
|||||||
)
|
)
|
||||||
score = (await db.exec(select(Score).where(Score.id == score_id))).first()
|
score = (await db.exec(select(Score).where(Score.id == score_id))).first()
|
||||||
assert score is not None
|
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):
|
class BeatmapScores(BaseModel):
|
||||||
|
|||||||
Reference in New Issue
Block a user