"""add users table (dashboard login accounts) Revision ID: 0008 Revises: 0007 Create Date: 2026-09-20 """ from alembic import op import sqlalchemy as sa # revision identifiers, used by Alembic. revision = "0008" down_revision = "0007" branch_labels = None depends_on = None def upgrade() -> None: conn = op.get_bind() exists = conn.execute(sa.text( "SELECT 1 FROM information_schema.tables WHERE table_name='users'" )).fetchone() if exists: return # create_all 로 이미 생성됨 op.create_table( "users", sa.Column("id", sa.Integer(), primary_key=True), sa.Column("username", sa.String(32), nullable=False), sa.Column("password_hash", sa.String(128), nullable=False), sa.Column("is_active", sa.Boolean(), nullable=False, server_default=sa.false()), sa.Column("is_admin", sa.Boolean(), nullable=False, server_default=sa.false()), sa.Column("created_at", sa.DateTime(), nullable=False, server_default=sa.func.now()), sa.Column("last_login_at", sa.DateTime(), nullable=True), ) op.create_index("ix_users_username", "users", ["username"], unique=True) def downgrade() -> None: op.drop_index("ix_users_username", table_name="users") op.drop_table("users")