- src/payments: provider registry and PaymentProvider interface (createCheckout, verifyWebhook/parseWebhook, getTransaction, refund, listTransactions as capabilities), Yoco as the first provider. All four direct Yoco checkout calls go through payments.createCheckout. - Webhook split into the provider part (signature, parsing) and shared processing; same URL (/api/webhooks/yoco), same behaviour. - YocoTransaction renamed in place to ProviderTransaction (+ provider, unique per provider + externalId); Payment.provider added and backfilled to "yoco". Payment.method stays the wallet type so cashups are unchanged. - Site settings → Payments: Enabled toggle and order per provider; Yoco's settings shown while it's enabled. R15 minimum for all online payments. - New endpoint names (/api/payments/checkout, /api/provider-transactions); the old /yoco-checkout and /yoco-transactions paths still work. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
24 lines
1.4 KiB
SQL
24 lines
1.4 KiB
SQL
-- Payment providers (1.36.0). YocoTransaction becomes ProviderTransaction: renamed in place
|
|
-- so every stored transaction is kept (Prisma's generated plan drops and recreates it).
|
|
|
|
-- AlterEnum
|
|
ALTER TYPE "AdminAuditAction" ADD VALUE 'payment_providers_updated';
|
|
|
|
-- Rename YocoTransaction → ProviderTransaction
|
|
ALTER TABLE "YocoTransaction" RENAME TO "ProviderTransaction";
|
|
ALTER TABLE "ProviderTransaction" RENAME CONSTRAINT "YocoTransaction_pkey" TO "ProviderTransaction_pkey";
|
|
ALTER TABLE "ProviderTransaction" RENAME CONSTRAINT "YocoTransaction_paymentId_fkey" TO "ProviderTransaction_paymentId_fkey";
|
|
ALTER INDEX "YocoTransaction_paymentId_idx" RENAME TO "ProviderTransaction_paymentId_idx";
|
|
|
|
-- Which provider sent it; external ids are unique per provider
|
|
ALTER TABLE "ProviderTransaction" ADD COLUMN "provider" TEXT NOT NULL DEFAULT 'yoco';
|
|
DROP INDEX "YocoTransaction_externalId_key";
|
|
CREATE UNIQUE INDEX "ProviderTransaction_provider_externalId_key" ON "ProviderTransaction"("provider", "externalId");
|
|
|
|
-- Payment.provider: every online payment so far came through Yoco (linked to a transaction,
|
|
-- or the donation split off one)
|
|
ALTER TABLE "Payment" ADD COLUMN "provider" TEXT;
|
|
UPDATE "Payment" SET "provider" = 'yoco'
|
|
WHERE "id" IN (SELECT "paymentId" FROM "ProviderTransaction" WHERE "paymentId" IS NOT NULL)
|
|
OR "originalPaymentId" IN (SELECT "paymentId" FROM "ProviderTransaction" WHERE "paymentId" IS NOT NULL);
|