refactor(database): use a new 'On-Demand' design (#86)
Technical Details: https://blog.mxgame.top/2025/11/22/An-On-Demand-Design-Within-SQLModel/
This commit is contained in:
@@ -0,0 +1,498 @@
|
||||
"""project: remove unused fields in database
|
||||
|
||||
Revision ID: 23707640303c
|
||||
Revises: 3f0f22f38c3d
|
||||
Create Date: 2025-11-23 08:14:05.284238
|
||||
|
||||
"""
|
||||
|
||||
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 = "23707640303c"
|
||||
down_revision: str | Sequence[str] | None = "3f0f22f38c3d"
|
||||
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",
|
||||
"TAIKORX",
|
||||
"FRUITSRX",
|
||||
"SENTAKKI",
|
||||
"TAU",
|
||||
"RUSH",
|
||||
"HISHIGATA",
|
||||
"SOYOKAZE",
|
||||
),
|
||||
nullable=False,
|
||||
)
|
||||
op.drop_column("beatmaps", "current_user_playcount")
|
||||
op.alter_column("beatmapsync", "updated_at", existing_type=mysql.DATETIME(), nullable=True)
|
||||
op.alter_column(
|
||||
"best_scores",
|
||||
"gamemode",
|
||||
existing_type=mysql.ENUM(
|
||||
"OSU",
|
||||
"TAIKO",
|
||||
"FRUITS",
|
||||
"MANIA",
|
||||
"OSURX",
|
||||
"OSUAP",
|
||||
"TAIKORX",
|
||||
"FRUITSRX",
|
||||
"SENTAKKI",
|
||||
"TAU",
|
||||
"RUSH",
|
||||
"HISHIGATA",
|
||||
"SOYOKAZE",
|
||||
),
|
||||
nullable=False,
|
||||
)
|
||||
op.alter_column(
|
||||
"lazer_user_statistics",
|
||||
"mode",
|
||||
existing_type=mysql.ENUM(
|
||||
"OSU",
|
||||
"TAIKO",
|
||||
"FRUITS",
|
||||
"MANIA",
|
||||
"OSURX",
|
||||
"OSUAP",
|
||||
"TAIKORX",
|
||||
"FRUITSRX",
|
||||
"SENTAKKI",
|
||||
"TAU",
|
||||
"RUSH",
|
||||
"HISHIGATA",
|
||||
"SOYOKAZE",
|
||||
),
|
||||
nullable=False,
|
||||
)
|
||||
op.alter_column("lazer_user_statistics", "ranked_score", existing_type=mysql.BIGINT(), nullable=True)
|
||||
op.alter_column(
|
||||
"lazer_users",
|
||||
"playmode",
|
||||
existing_type=mysql.ENUM(
|
||||
"OSU",
|
||||
"TAIKO",
|
||||
"FRUITS",
|
||||
"MANIA",
|
||||
"OSURX",
|
||||
"OSUAP",
|
||||
"TAIKORX",
|
||||
"FRUITSRX",
|
||||
"SENTAKKI",
|
||||
"TAU",
|
||||
"RUSH",
|
||||
"HISHIGATA",
|
||||
"SOYOKAZE",
|
||||
),
|
||||
nullable=False,
|
||||
)
|
||||
op.alter_column(
|
||||
"lazer_users",
|
||||
"g0v0_playmode",
|
||||
existing_type=mysql.ENUM(
|
||||
"OSU",
|
||||
"TAIKO",
|
||||
"FRUITS",
|
||||
"MANIA",
|
||||
"OSURX",
|
||||
"OSUAP",
|
||||
"TAIKORX",
|
||||
"FRUITSRX",
|
||||
"SENTAKKI",
|
||||
"TAU",
|
||||
"RUSH",
|
||||
"HISHIGATA",
|
||||
"SOYOKAZE",
|
||||
),
|
||||
nullable=False,
|
||||
)
|
||||
op.drop_column("lazer_users", "beatmap_playcounts_count")
|
||||
op.alter_column("login_sessions", "is_new_device", existing_type=mysql.TINYINT(display_width=1), nullable=False)
|
||||
op.alter_column(
|
||||
"rank_history",
|
||||
"mode",
|
||||
existing_type=mysql.ENUM(
|
||||
"OSU",
|
||||
"TAIKO",
|
||||
"FRUITS",
|
||||
"MANIA",
|
||||
"OSURX",
|
||||
"OSUAP",
|
||||
"TAIKORX",
|
||||
"FRUITSRX",
|
||||
"SENTAKKI",
|
||||
"TAU",
|
||||
"RUSH",
|
||||
"HISHIGATA",
|
||||
"SOYOKAZE",
|
||||
),
|
||||
nullable=False,
|
||||
)
|
||||
op.alter_column(
|
||||
"rank_top",
|
||||
"mode",
|
||||
existing_type=mysql.ENUM(
|
||||
"OSU",
|
||||
"TAIKO",
|
||||
"FRUITS",
|
||||
"MANIA",
|
||||
"OSURX",
|
||||
"OSUAP",
|
||||
"TAIKORX",
|
||||
"FRUITSRX",
|
||||
"SENTAKKI",
|
||||
"TAU",
|
||||
"RUSH",
|
||||
"HISHIGATA",
|
||||
"SOYOKAZE",
|
||||
),
|
||||
nullable=False,
|
||||
)
|
||||
op.alter_column(
|
||||
"rooms",
|
||||
"type",
|
||||
existing_type=mysql.ENUM("PLAYLISTS", "HEAD_TO_HEAD", "TEAM_VERSUS", "MATCHMAKING"),
|
||||
nullable=False,
|
||||
)
|
||||
op.execute("UPDATE rooms SET channel_id = 0 WHERE channel_id IS NULL")
|
||||
op.alter_column("rooms", "channel_id", existing_type=mysql.INTEGER(), nullable=False)
|
||||
op.alter_column(
|
||||
"score_tokens",
|
||||
"ruleset_id",
|
||||
existing_type=mysql.ENUM(
|
||||
"OSU",
|
||||
"TAIKO",
|
||||
"FRUITS",
|
||||
"MANIA",
|
||||
"OSURX",
|
||||
"OSUAP",
|
||||
"TAIKORX",
|
||||
"FRUITSRX",
|
||||
"SENTAKKI",
|
||||
"TAU",
|
||||
"RUSH",
|
||||
"HISHIGATA",
|
||||
"SOYOKAZE",
|
||||
),
|
||||
nullable=False,
|
||||
)
|
||||
op.alter_column(
|
||||
"scores",
|
||||
"gamemode",
|
||||
existing_type=mysql.ENUM(
|
||||
"OSU",
|
||||
"TAIKO",
|
||||
"FRUITS",
|
||||
"MANIA",
|
||||
"OSURX",
|
||||
"OSUAP",
|
||||
"TAIKORX",
|
||||
"FRUITSRX",
|
||||
"SENTAKKI",
|
||||
"TAU",
|
||||
"RUSH",
|
||||
"HISHIGATA",
|
||||
"SOYOKAZE",
|
||||
),
|
||||
nullable=False,
|
||||
)
|
||||
op.alter_column(
|
||||
"teams",
|
||||
"playmode",
|
||||
existing_type=mysql.ENUM(
|
||||
"OSU",
|
||||
"TAIKO",
|
||||
"FRUITS",
|
||||
"MANIA",
|
||||
"OSURX",
|
||||
"OSUAP",
|
||||
"TAIKORX",
|
||||
"FRUITSRX",
|
||||
"SENTAKKI",
|
||||
"TAU",
|
||||
"RUSH",
|
||||
"HISHIGATA",
|
||||
"SOYOKAZE",
|
||||
),
|
||||
nullable=False,
|
||||
)
|
||||
op.alter_column(
|
||||
"total_score_best_scores",
|
||||
"gamemode",
|
||||
existing_type=mysql.ENUM(
|
||||
"OSU",
|
||||
"TAIKO",
|
||||
"FRUITS",
|
||||
"MANIA",
|
||||
"OSURX",
|
||||
"OSUAP",
|
||||
"TAIKORX",
|
||||
"FRUITSRX",
|
||||
"SENTAKKI",
|
||||
"TAU",
|
||||
"RUSH",
|
||||
"HISHIGATA",
|
||||
"SOYOKAZE",
|
||||
),
|
||||
nullable=False,
|
||||
)
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
"""Downgrade schema."""
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.alter_column(
|
||||
"total_score_best_scores",
|
||||
"gamemode",
|
||||
existing_type=mysql.ENUM(
|
||||
"OSU",
|
||||
"TAIKO",
|
||||
"FRUITS",
|
||||
"MANIA",
|
||||
"OSURX",
|
||||
"OSUAP",
|
||||
"TAIKORX",
|
||||
"FRUITSRX",
|
||||
"SENTAKKI",
|
||||
"TAU",
|
||||
"RUSH",
|
||||
"HISHIGATA",
|
||||
"SOYOKAZE",
|
||||
),
|
||||
nullable=True,
|
||||
)
|
||||
op.alter_column(
|
||||
"teams",
|
||||
"playmode",
|
||||
existing_type=mysql.ENUM(
|
||||
"OSU",
|
||||
"TAIKO",
|
||||
"FRUITS",
|
||||
"MANIA",
|
||||
"OSURX",
|
||||
"OSUAP",
|
||||
"TAIKORX",
|
||||
"FRUITSRX",
|
||||
"SENTAKKI",
|
||||
"TAU",
|
||||
"RUSH",
|
||||
"HISHIGATA",
|
||||
"SOYOKAZE",
|
||||
),
|
||||
nullable=True,
|
||||
)
|
||||
op.alter_column(
|
||||
"scores",
|
||||
"gamemode",
|
||||
existing_type=mysql.ENUM(
|
||||
"OSU",
|
||||
"TAIKO",
|
||||
"FRUITS",
|
||||
"MANIA",
|
||||
"OSURX",
|
||||
"OSUAP",
|
||||
"TAIKORX",
|
||||
"FRUITSRX",
|
||||
"SENTAKKI",
|
||||
"TAU",
|
||||
"RUSH",
|
||||
"HISHIGATA",
|
||||
"SOYOKAZE",
|
||||
),
|
||||
nullable=True,
|
||||
)
|
||||
op.alter_column(
|
||||
"score_tokens",
|
||||
"ruleset_id",
|
||||
existing_type=mysql.ENUM(
|
||||
"OSU",
|
||||
"TAIKO",
|
||||
"FRUITS",
|
||||
"MANIA",
|
||||
"OSURX",
|
||||
"OSUAP",
|
||||
"TAIKORX",
|
||||
"FRUITSRX",
|
||||
"SENTAKKI",
|
||||
"TAU",
|
||||
"RUSH",
|
||||
"HISHIGATA",
|
||||
"SOYOKAZE",
|
||||
),
|
||||
nullable=True,
|
||||
)
|
||||
op.alter_column("rooms", "channel_id", existing_type=mysql.INTEGER(), nullable=True)
|
||||
op.alter_column(
|
||||
"rooms",
|
||||
"type",
|
||||
existing_type=mysql.ENUM("PLAYLISTS", "HEAD_TO_HEAD", "TEAM_VERSUS", "MATCHMAKING"),
|
||||
nullable=True,
|
||||
)
|
||||
op.alter_column(
|
||||
"rank_top",
|
||||
"mode",
|
||||
existing_type=mysql.ENUM(
|
||||
"OSU",
|
||||
"TAIKO",
|
||||
"FRUITS",
|
||||
"MANIA",
|
||||
"OSURX",
|
||||
"OSUAP",
|
||||
"TAIKORX",
|
||||
"FRUITSRX",
|
||||
"SENTAKKI",
|
||||
"TAU",
|
||||
"RUSH",
|
||||
"HISHIGATA",
|
||||
"SOYOKAZE",
|
||||
),
|
||||
nullable=True,
|
||||
)
|
||||
op.alter_column(
|
||||
"rank_history",
|
||||
"mode",
|
||||
existing_type=mysql.ENUM(
|
||||
"OSU",
|
||||
"TAIKO",
|
||||
"FRUITS",
|
||||
"MANIA",
|
||||
"OSURX",
|
||||
"OSUAP",
|
||||
"TAIKORX",
|
||||
"FRUITSRX",
|
||||
"SENTAKKI",
|
||||
"TAU",
|
||||
"RUSH",
|
||||
"HISHIGATA",
|
||||
"SOYOKAZE",
|
||||
),
|
||||
nullable=True,
|
||||
)
|
||||
op.alter_column("login_sessions", "is_new_device", existing_type=mysql.TINYINT(display_width=1), nullable=True)
|
||||
op.add_column(
|
||||
"lazer_users", sa.Column("beatmap_playcounts_count", mysql.INTEGER(), autoincrement=False, nullable=False)
|
||||
)
|
||||
op.alter_column(
|
||||
"lazer_users",
|
||||
"g0v0_playmode",
|
||||
existing_type=mysql.ENUM(
|
||||
"OSU",
|
||||
"TAIKO",
|
||||
"FRUITS",
|
||||
"MANIA",
|
||||
"OSURX",
|
||||
"OSUAP",
|
||||
"TAIKORX",
|
||||
"FRUITSRX",
|
||||
"SENTAKKI",
|
||||
"TAU",
|
||||
"RUSH",
|
||||
"HISHIGATA",
|
||||
"SOYOKAZE",
|
||||
),
|
||||
nullable=True,
|
||||
)
|
||||
op.alter_column(
|
||||
"lazer_users",
|
||||
"playmode",
|
||||
existing_type=mysql.ENUM(
|
||||
"OSU",
|
||||
"TAIKO",
|
||||
"FRUITS",
|
||||
"MANIA",
|
||||
"OSURX",
|
||||
"OSUAP",
|
||||
"TAIKORX",
|
||||
"FRUITSRX",
|
||||
"SENTAKKI",
|
||||
"TAU",
|
||||
"RUSH",
|
||||
"HISHIGATA",
|
||||
"SOYOKAZE",
|
||||
),
|
||||
nullable=True,
|
||||
)
|
||||
op.alter_column("lazer_user_statistics", "ranked_score", existing_type=mysql.BIGINT(), nullable=False)
|
||||
op.alter_column(
|
||||
"lazer_user_statistics",
|
||||
"mode",
|
||||
existing_type=mysql.ENUM(
|
||||
"OSU",
|
||||
"TAIKO",
|
||||
"FRUITS",
|
||||
"MANIA",
|
||||
"OSURX",
|
||||
"OSUAP",
|
||||
"TAIKORX",
|
||||
"FRUITSRX",
|
||||
"SENTAKKI",
|
||||
"TAU",
|
||||
"RUSH",
|
||||
"HISHIGATA",
|
||||
"SOYOKAZE",
|
||||
),
|
||||
nullable=True,
|
||||
)
|
||||
op.alter_column(
|
||||
"best_scores",
|
||||
"gamemode",
|
||||
existing_type=mysql.ENUM(
|
||||
"OSU",
|
||||
"TAIKO",
|
||||
"FRUITS",
|
||||
"MANIA",
|
||||
"OSURX",
|
||||
"OSUAP",
|
||||
"TAIKORX",
|
||||
"FRUITSRX",
|
||||
"SENTAKKI",
|
||||
"TAU",
|
||||
"RUSH",
|
||||
"HISHIGATA",
|
||||
"SOYOKAZE",
|
||||
),
|
||||
nullable=True,
|
||||
)
|
||||
op.alter_column("beatmapsync", "updated_at", existing_type=mysql.DATETIME(), nullable=False)
|
||||
op.add_column("beatmaps", sa.Column("current_user_playcount", mysql.INTEGER(), autoincrement=False, nullable=False))
|
||||
op.alter_column(
|
||||
"beatmaps",
|
||||
"mode",
|
||||
existing_type=mysql.ENUM(
|
||||
"OSU",
|
||||
"TAIKO",
|
||||
"FRUITS",
|
||||
"MANIA",
|
||||
"OSURX",
|
||||
"OSUAP",
|
||||
"TAIKORX",
|
||||
"FRUITSRX",
|
||||
"SENTAKKI",
|
||||
"TAU",
|
||||
"RUSH",
|
||||
"HISHIGATA",
|
||||
"SOYOKAZE",
|
||||
),
|
||||
nullable=True,
|
||||
)
|
||||
# ### end Alembic commands ###
|
||||
Reference in New Issue
Block a user