First commit
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
"""Phase 10: Customer password-setup workflow
|
||||
|
||||
Adds three columns to the users table to support the
|
||||
invitation-based customer account creation flow:
|
||||
|
||||
password_set — False until the customer completes set-password
|
||||
set_password_token — one-time URL token (64-char hex, nullable)
|
||||
set_password_token_expires — UTC expiry datetime (nullable)
|
||||
|
||||
Revision ID: phase10_customer_password_setup
|
||||
Revises: phase9_user_full_name
|
||||
Create Date: 2026-04-02
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
revision = 'phase10_customer_password_setup'
|
||||
down_revision = 'phase9_user_full_name'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
bind = op.get_bind()
|
||||
inspector = sa.inspect(bind)
|
||||
columns = [c['name'] for c in inspector.get_columns('users')]
|
||||
|
||||
if 'password_set' not in columns:
|
||||
op.add_column('users',
|
||||
sa.Column('password_set', sa.Boolean, nullable=False, server_default='1'))
|
||||
|
||||
if 'set_password_token' not in columns:
|
||||
op.add_column('users',
|
||||
sa.Column('set_password_token', sa.String(64), nullable=True))
|
||||
|
||||
if 'set_password_token_expires' not in columns:
|
||||
op.add_column('users',
|
||||
sa.Column('set_password_token_expires', sa.DateTime, nullable=True))
|
||||
|
||||
|
||||
def downgrade():
|
||||
op.drop_column('users', 'set_password_token_expires')
|
||||
op.drop_column('users', 'set_password_token')
|
||||
op.drop_column('users', 'password_set')
|
||||
Reference in New Issue
Block a user