From 9d92fa0a68e7eb29eaa2397a23afdd05187dfe31 Mon Sep 17 00:00:00 2001 From: MingxuanGame Date: Sun, 24 Aug 2025 15:52:38 +0000 Subject: [PATCH] fix(score): fix score process --- app/database/score.py | 5 +-- app/service/subscribers/score_processed.py | 5 +-- .../34a563187e47_score_add_processed.py | 34 +++++++++++++++++++ 3 files changed, 40 insertions(+), 4 deletions(-) create mode 100644 migrations/versions/34a563187e47_score_add_processed.py diff --git a/app/database/score.py b/app/database/score.py index 96351f1..869c999 100644 --- a/app/database/score.py +++ b/app/database/score.py @@ -94,6 +94,7 @@ class ScoreBase(AsyncAttrs, SQLModel, UTCBaseModel): type: str beatmap_id: int = Field(index=True, foreign_key="beatmaps.id") maximum_statistics: ScoreStatistics = Field(sa_column=Column(JSON), default_factory=dict) + processed: bool = False # solo_score @field_validator("maximum_statistics", mode="before") @classmethod @@ -211,7 +212,6 @@ class ScoreResp(ScoreBase): is_perfect_combo: bool = False legacy_perfect: bool = False legacy_total_score: int = 0 # FIXME - processed: bool = True # solo_score weight: float = 0.0 best_id: int | None = None ruleset_id: int | None = None @@ -865,6 +865,7 @@ async def process_score( playlist_item_id=item_id, room_id=room_id, maximum_statistics=info.maximum_statistics, + processed=True, ) if can_get_pp: from app.calculator import pre_fetch_and_calculate_pp @@ -892,5 +893,5 @@ async def process_score( await session.refresh(score) await session.refresh(score_token) await session.refresh(user) - await redis.publish("score:processed", str(score.id or 0)) + await redis.publish("osu-channel:score:processed", f'{{"ScoreId": {score.id}}}') return score diff --git a/app/service/subscribers/score_processed.py b/app/service/subscribers/score_processed.py index 9613987..6775b97 100644 --- a/app/service/subscribers/score_processed.py +++ b/app/service/subscribers/score_processed.py @@ -1,5 +1,6 @@ from __future__ import annotations +import json from typing import TYPE_CHECKING from app.database import PlaylistBestScore, Score @@ -15,7 +16,7 @@ if TYPE_CHECKING: from app.signalr.hub import MetadataHub -CHANNEL = "score:processed" +CHANNEL = "osu-channel:score:processed" class ScoreSubscriber(RedisSubscriber): @@ -79,6 +80,6 @@ class ScoreSubscriber(RedisSubscriber): await self.metadata_hub.notify_room_score_processed(event) async def _handler(self, channel: str, data: str): - score_id = int(data) + score_id = json.loads(data)["ScoreId"] if self.metadata_hub: await self._notify_room_score_processed(score_id) diff --git a/migrations/versions/34a563187e47_score_add_processed.py b/migrations/versions/34a563187e47_score_add_processed.py new file mode 100644 index 0000000..cf7e961 --- /dev/null +++ b/migrations/versions/34a563187e47_score_add_processed.py @@ -0,0 +1,34 @@ +"""score: add processed + +Revision ID: 34a563187e47 +Revises: 3f890a76f036 +Create Date: 2025-08-24 15:06:37.226068 + +""" + +from __future__ import annotations + +from collections.abc import Sequence + +from alembic import op +import sqlalchemy as sa + +# revision identifiers, used by Alembic. +revision: str = "34a563187e47" +down_revision: str | Sequence[str] | None = "3f890a76f036" +branch_labels: str | Sequence[str] | None = None +depends_on: str | Sequence[str] | None = None + + +def upgrade() -> None: + """Upgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.add_column("scores", sa.Column("processed", sa.Boolean(), nullable=False, default=1, server_default="1")) + # ### end Alembic commands ### + + +def downgrade() -> None: + """Downgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column("scores", "processed") + # ### end Alembic commands ###