CREATE TABLE IF NOT EXISTS payment_orders ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, public_id TEXT NOT NULL, user_id INTEGER NOT NULL, recharge_record_id INTEGER, provider TEXT NOT NULL, payment_method TEXT NOT NULL DEFAULT 'stripe', provider_session_id TEXT, provider_payment_id TEXT, amount_usd REAL NOT NULL, amount_minor INTEGER NOT NULL, currency TEXT NOT NULL DEFAULT 'usd', status TEXT NOT NULL DEFAULT 'pending', checkout_url TEXT, success_url TEXT, cancel_url TEXT, note TEXT, metadata TEXT, created_at TEXT DEFAULT (datetime('now')), updated_at TEXT DEFAULT (datetime('now')), paid_at TEXT, completed_at TEXT, expires_at TEXT, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, FOREIGN KEY (recharge_record_id) REFERENCES user_recharge_records(id) ON DELETE SET NULL ); CREATE UNIQUE INDEX IF NOT EXISTS payment_orders_public_id_unique ON payment_orders (public_id); CREATE UNIQUE INDEX IF NOT EXISTS payment_orders_provider_session_unique ON payment_orders (provider, provider_session_id) WHERE provider_session_id IS NOT NULL; CREATE INDEX IF NOT EXISTS payment_orders_user_created_idx ON payment_orders (user_id, created_at DESC); CREATE INDEX IF NOT EXISTS payment_orders_status_idx ON payment_orders (status);