diff --git a/alembic/versions/008_add_donation_columns.py b/alembic/versions/008_add_donation_columns.py new file mode 100644 index 0000000..12ed604 --- /dev/null +++ b/alembic/versions/008_add_donation_columns.py @@ -0,0 +1,55 @@ +"""add_donation_columns + +Revision ID: 008_add_donations +Revises: 007_add_sub_fields +Create Date: 2026-01-04 + +Fixes: +- Add missing Stripe payment columns to donations table +""" +from typing import Sequence, Union +from alembic import op +import sqlalchemy as sa +from sqlalchemy import inspect + + +# revision identifiers, used by Alembic. +revision: str = '008_add_donations' +down_revision: Union[str, None] = '007_add_sub_fields' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + """Add missing columns to donations table (skip if already exists)""" + + # Get database connection + conn = op.get_bind() + inspector = inspect(conn) + existing_columns = {col['name'] for col in inspector.get_columns('donations')} + + # Stripe payment columns + if 'stripe_checkout_session_id' not in existing_columns: + op.add_column('donations', sa.Column('stripe_checkout_session_id', sa.String(), nullable=True)) + + if 'stripe_payment_intent_id' not in existing_columns: + op.add_column('donations', sa.Column('stripe_payment_intent_id', sa.String(), nullable=True)) + + if 'payment_method' not in existing_columns: + op.add_column('donations', sa.Column('payment_method', sa.String(), nullable=True)) + + if 'notes' not in existing_columns: + op.add_column('donations', sa.Column('notes', sa.Text(), nullable=True)) + + if 'updated_at' not in existing_columns: + op.add_column('donations', sa.Column('updated_at', sa.DateTime(timezone=True), nullable=True)) + + +def downgrade() -> None: + """Remove added columns (rollback)""" + + op.drop_column('donations', 'updated_at') + op.drop_column('donations', 'notes') + op.drop_column('donations', 'payment_method') + op.drop_column('donations', 'stripe_payment_intent_id') + op.drop_column('donations', 'stripe_checkout_session_id')