-
Stefy Lanza (nextime / spora ) authored
Several payment code paths referenced database schema that no migration ever created, so they failed at runtime: - distributed_locks: created the table used by PaymentScheduler._acquire_lock / _release_lock (it was referenced but never defined anywhere). - email_notification_queue: the queue code uses context_json + retry_count, but the table was defined with recipient_email/subject/body. Redefined the table to match the code. - crypto_consolidation_queue: WalletConsolidator writes user_id/from_address/ to_address/amount, but the table had total_balance/address_count. Redefined to match the code. - payment_methods.gateway: the base DatabaseManager schema creates payment_methods without a gateway column, so the migration's CREATE TABLE IF NOT EXISTS was a no-op and the column (read by the renewal processor) was missing. Added an idempotent ALTER. Added cross-DB helpers (_table_exists/_column_exists work on both SQLite via PRAGMA and MySQL via INFORMATION_SCHEMA). The two transient queue tables hold only regenerable rows, so a legacy-shape table is dropped and recreated rather than ALTERed column-by-column (avoids fragile cross-dialect constraint changes); the gateway add is a plain additive ALTER guarded by _column_exists. Co-Authored-By:Claude Opus 4.8 <noreply@anthropic.com>
9ab81894