feat(user-preference): add user preference support (#55)
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>
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
"""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 ###
|
||||
Reference in New Issue
Block a user