diff --git a/app/database/events.py b/app/database/events.py index 59515c8..19fe515 100644 --- a/app/database/events.py +++ b/app/database/events.py @@ -1,9 +1,9 @@ from datetime import UTC, datetime from enum import Enum -import json from typing import TYPE_CHECKING from sqlmodel import ( + JSON, BigInteger, Column, DateTime, @@ -40,7 +40,9 @@ class EventBase(SQLModel): sa_column=Column(DateTime(timezone=True), default=datetime.now(UTC)) ) type: EventType - event_payload: str + event_payload: dict = Field( + exclude=True, default_factory=dict, sa_column=Column(JSON) + ) class Event(EventBase, table=True): @@ -53,15 +55,9 @@ class Event(EventBase, table=True): class EventResp(EventBase): - _payload: dict - def merge_payload(self) -> "EventResp": - parsed = {} - try: - parsed = json.loads(self.event_payload or "{}") - except json.JSONDecodeError: - parsed = {} - for key, value in parsed.items(): + for key, value in self.event_payload.items(): setattr(self, key, value) - self._payload = parsed return self + + pass diff --git a/migrations/versions/f785165a5c0b_convert_event_event_payload_from_str_to_.py b/migrations/versions/f785165a5c0b_convert_event_event_payload_from_str_to_.py new file mode 100644 index 0000000..48827be --- /dev/null +++ b/migrations/versions/f785165a5c0b_convert_event_event_payload_from_str_to_.py @@ -0,0 +1,137 @@ +"""convert Event.event_payload from str to json + +Revision ID: f785165a5c0b +Revises: 881ac7ca01d5 +Create Date: 2025-08-13 06:02:11.911557 + +""" + +from __future__ import annotations + +from collections.abc import Sequence + +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import mysql + +# revision identifiers, used by Alembic. +revision: str = "f785165a5c0b" +down_revision: str | Sequence[str] | None = "881ac7ca01d5" +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.alter_column( + "beatmaps", + "mode", + existing_type=mysql.ENUM("OSU", "TAIKO", "FRUITS", "MANIA", "OSURX", "OSUAP"), + nullable=False, + ) + op.alter_column( + "best_scores", + "gamemode", + existing_type=mysql.ENUM("OSU", "TAIKO", "FRUITS", "MANIA", "OSURX", "OSUAP"), + nullable=False, + ) + op.alter_column( + "lazer_user_statistics", + "mode", + existing_type=mysql.ENUM("OSU", "TAIKO", "FRUITS", "MANIA", "OSURX", "OSUAP"), + nullable=False, + ) + op.alter_column( + "lazer_users", + "playmode", + existing_type=mysql.ENUM("OSU", "TAIKO", "FRUITS", "MANIA", "OSURX", "OSUAP"), + nullable=False, + ) + op.alter_column( + "monthly_playcounts", "count", existing_type=mysql.INTEGER(), nullable=False + ) + op.alter_column( + "score_tokens", + "ruleset_id", + existing_type=mysql.ENUM("OSU", "TAIKO", "FRUITS", "MANIA", "OSURX", "OSUAP"), + nullable=False, + ) + op.alter_column( + "scores", + "gamemode", + existing_type=mysql.ENUM("OSU", "TAIKO", "FRUITS", "MANIA", "OSURX", "OSUAP"), + nullable=False, + ) + op.alter_column( + "total_score_best_scores", + "gamemode", + existing_type=mysql.ENUM("OSU", "TAIKO", "FRUITS", "MANIA", "OSURX", "OSUAP"), + nullable=False, + ) + op.alter_column( + "user_events", + "event_payload", + existing_type=mysql.VARCHAR(length=255), + type_=sa.JSON(), + nullable=True, + ) + # ### end Alembic commands ### + + +def downgrade() -> None: + """Downgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.alter_column( + "user_events", + "event_payload", + existing_type=sa.JSON(), + type_=mysql.VARCHAR(length=255), + nullable=False, + ) + op.alter_column( + "total_score_best_scores", + "gamemode", + existing_type=mysql.ENUM("OSU", "TAIKO", "FRUITS", "MANIA", "OSURX", "OSUAP"), + nullable=True, + ) + op.alter_column( + "scores", + "gamemode", + existing_type=mysql.ENUM("OSU", "TAIKO", "FRUITS", "MANIA", "OSURX", "OSUAP"), + nullable=True, + ) + op.alter_column( + "score_tokens", + "ruleset_id", + existing_type=mysql.ENUM("OSU", "TAIKO", "FRUITS", "MANIA", "OSURX", "OSUAP"), + nullable=True, + ) + op.alter_column( + "monthly_playcounts", "count", existing_type=mysql.INTEGER(), nullable=True + ) + op.alter_column( + "lazer_users", + "playmode", + existing_type=mysql.ENUM("OSU", "TAIKO", "FRUITS", "MANIA", "OSURX", "OSUAP"), + nullable=True, + ) + op.alter_column( + "lazer_user_statistics", + "mode", + existing_type=mysql.ENUM("OSU", "TAIKO", "FRUITS", "MANIA", "OSURX", "OSUAP"), + nullable=True, + ) + op.alter_column( + "best_scores", + "gamemode", + existing_type=mysql.ENUM("OSU", "TAIKO", "FRUITS", "MANIA", "OSURX", "OSUAP"), + nullable=True, + ) + op.alter_column( + "beatmaps", + "mode", + existing_type=mysql.ENUM("OSU", "TAIKO", "FRUITS", "MANIA", "OSURX", "OSUAP"), + nullable=True, + ) + # ### end Alembic commands ###