"""Paiement de la cotisation via l'API SumUp (remplace le lien Yapla) Revision ID: 0016_sumup_payment Revises: 0015_form_yapla_url Create Date: 2026-09-29 `form_template.yapla_url` (simple lien externe statique) est remplacé par un vrai suivi via l'API SumUp : identifiants marchand (`sumup_merchant_code`, `sumup_api_key`) et montant (`sumup_fee_amount`) configurés par édition, plus le statut de paiement par bénévole (`volunteer.fee_checkout_id`, `fee_payment_status`, `fee_paid_at`), tenu à jour par le webhook SumUp — voir `app/sumup/` et `app/api/forms.py`. """ from collections.abc import Sequence import sqlalchemy as sa from alembic import op revision: str = "0016_sumup_payment" down_revision: str | None = "0015_form_yapla_url" branch_labels: str | Sequence[str] | None = None depends_on: str | Sequence[str] | None = None def upgrade() -> None: op.drop_column("form_template", "yapla_url") op.add_column( "form_template", sa.Column("sumup_merchant_code", sa.String(), nullable=True) ) op.add_column( "form_template", sa.Column("sumup_api_key", sa.String(), nullable=True) ) op.add_column( "form_template", sa.Column("sumup_fee_amount", sa.Float(), nullable=True) ) op.add_column( "volunteer", sa.Column("fee_checkout_id", sa.String(), nullable=True) ) op.create_index( "ix_volunteer_fee_checkout_id", "volunteer", ["fee_checkout_id"] ) op.add_column( "volunteer", sa.Column( "fee_payment_status", sa.Enum( "PENDING", "PAID", "FAILED", "EXPIRED", name="feepaymentstatus", native_enum=False, ), nullable=True, ), ) op.add_column( "volunteer", sa.Column("fee_paid_at", sa.DateTime(), nullable=True) ) def downgrade() -> None: op.drop_column("volunteer", "fee_paid_at") op.drop_column("volunteer", "fee_payment_status") op.drop_index("ix_volunteer_fee_checkout_id", table_name="volunteer") op.drop_column("volunteer", "fee_checkout_id") op.drop_column("form_template", "sumup_fee_amount") op.drop_column("form_template", "sumup_api_key") op.drop_column("form_template", "sumup_merchant_code") op.add_column("form_template", sa.Column("yapla_url", sa.String(), nullable=True))