APIs: - GET `/api/private/user/preferences`: Get current user's preferences. - PATCH `/api/private/user/preferences`: Modify current user's preferences. (body: Preferences) - PUT `/api/private/user/preferences`: Overwrite current user's preferences. (body: Preferences) - DELETE `/api/private/user/preferences`: Reset current user's preferences. (body: list[str]) - body specifies the content to be reset. If body is empty, reset all preferences. User: - `User.g0v0_playmode`: show the special ruleset like `OSURX`, and custom rulesets in the future. --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
67 lines
2.8 KiB
Python
67 lines
2.8 KiB
Python
"""user: add user_preference
|
|
|
|
Revision ID: fa4952dc70df
|
|
Revises: 425b91532cb4
|
|
Create Date: 2025-10-06 04:13:47.131043
|
|
|
|
"""
|
|
|
|
from collections.abc import Sequence
|
|
|
|
from alembic import op
|
|
import sqlalchemy as sa
|
|
from sqlalchemy.dialects import mysql
|
|
import sqlmodel
|
|
|
|
# revision identifiers, used by Alembic.
|
|
revision: str = "fa4952dc70df"
|
|
down_revision: str | Sequence[str] | None = "425b91532cb4"
|
|
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.create_table(
|
|
"userpreference",
|
|
sa.Column("user_id", sa.BigInteger(), nullable=False),
|
|
sa.Column("theme", sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column("language", sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column("extra", sa.JSON(), nullable=True),
|
|
sa.Column("audio_autoplay", sa.Boolean(), nullable=False),
|
|
sa.Column("audio_muted", sa.Boolean(), nullable=False),
|
|
sa.Column("audio_volume", sa.Float(), nullable=False),
|
|
sa.Column("beatmapset_card_size", sa.Enum("NORMAL", "EXTRA", name="beatmapcardsize"), nullable=False),
|
|
sa.Column("beatmap_download", sa.Enum("ALL", "NO_VIDEO", "direct", name="beatmapdownload"), nullable=False),
|
|
sa.Column("beatmapset_show_nsfw", sa.Boolean(), nullable=False),
|
|
sa.Column("extras_order", sa.JSON(), nullable=True),
|
|
sa.Column("legacy_score_only", sa.Boolean(), nullable=False),
|
|
sa.Column("profile_cover_expanded", sa.Boolean(), nullable=False),
|
|
sa.Column("scoring_mode", sa.Enum("STANDARDISED", "CLASSIC", name="scoringmode"), nullable=False),
|
|
sa.Column("user_list_filter", sa.Enum("ALL", "ONLINE", "OFFLINE", name="userlistfilter"), nullable=False),
|
|
sa.Column("user_list_sort", sa.Enum("LAST_VISIT", "RANK", "USERNAME", name="userlistsort"), nullable=False),
|
|
sa.Column("user_list_view", sa.Enum("CARD", "LIST", "BRICK", name="userlistview"), nullable=False),
|
|
sa.ForeignKeyConstraint(["user_id"], ["lazer_users.id"], ondelete="CASCADE"),
|
|
sa.PrimaryKeyConstraint("user_id"),
|
|
)
|
|
op.add_column(
|
|
"lazer_users",
|
|
sa.Column(
|
|
"g0v0_playmode",
|
|
sa.Enum("OSU", "TAIKO", "FRUITS", "MANIA", "OSURX", "OSUAP", "TAIKORX", "FRUITSRX", name="gamemode"),
|
|
nullable=False,
|
|
),
|
|
)
|
|
op.drop_column("lazer_users", "profile_order")
|
|
# ### end Alembic commands ###
|
|
|
|
|
|
def downgrade() -> None:
|
|
"""Downgrade schema."""
|
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
op.add_column("lazer_users", sa.Column("profile_order", mysql.JSON(), nullable=True))
|
|
op.drop_column("lazer_users", "g0v0_playmode")
|
|
op.drop_table("userpreference")
|
|
# ### end Alembic commands ###
|