"""Initiales Schema: Benutzer, Sitzungen, Benutzer-Einstellungen. Revision ID: 0001 Revises: Create Date: 2026-08-19 """ from alembic import op import sqlalchemy as sa revision = "0001" down_revision = None branch_labels = None depends_on = None def upgrade() -> None: op.create_table( "users", sa.Column("id", sa.Integer(), primary_key=True), sa.Column("username", sa.String(length=64), nullable=False), sa.Column("password_hash", sa.String(length=255), nullable=False), sa.Column("role", sa.String(length=32), nullable=False), sa.Column("display_name", sa.String(length=120), nullable=True), sa.Column("is_active", sa.Boolean(), nullable=False, server_default=sa.text("1")), sa.Column( "must_change_password", sa.Boolean(), nullable=False, server_default=sa.text("0"), ), sa.Column("created_at", sa.DateTime(timezone=True), nullable=True), sa.UniqueConstraint("username", name="uq_users_username"), ) op.create_table( "sessions", sa.Column("id", sa.Integer(), primary_key=True), sa.Column( "user_id", sa.Integer(), sa.ForeignKey("users.id", ondelete="CASCADE"), nullable=False, ), sa.Column("token_hash", sa.String(length=64), nullable=False), sa.Column("created_at", sa.DateTime(timezone=True), nullable=True), sa.Column("expires_at", sa.DateTime(timezone=True), nullable=False), sa.Column("last_seen_at", sa.DateTime(timezone=True), nullable=True), sa.Column("user_agent", sa.String(length=255), nullable=True), ) op.create_index("ix_sessions_user_id", "sessions", ["user_id"]) op.create_index("ix_sessions_token_hash", "sessions", ["token_hash"], unique=True) op.create_table( "user_settings", sa.Column( "user_id", sa.Integer(), sa.ForeignKey("users.id", ondelete="CASCADE"), primary_key=True, ), sa.Column("key", sa.String(length=64), primary_key=True), sa.Column("value", sa.String(length=255), nullable=True), ) def downgrade() -> None: op.drop_table("user_settings") op.drop_index("ix_sessions_token_hash", table_name="sessions") op.drop_index("ix_sessions_user_id", table_name="sessions") op.drop_table("sessions") op.drop_table("users")