chore(payments): remove EFT/bank-transfer method, keep Stripe only
Some checks failed
QA Gate (P0/P1) / Test affected app (pull_request) Has been cancelled

Removes the EFT (havale) payment surface across API, web, i18n, and docs.
Card payment via Stripe is now the only checkout path.

API (apps/api/src):
- Delete payments/bank-accounts/ module (controller + service + module)
- payments.service: drop EFT methods (createEftPayment, uploadEftReceipt,
  approveEft, rejectEft, getActiveBankInfo, getPendingEftPayments) and the
  BankAccountsService dependency
- payments.controller: drop /payments/eft, /payments/eft/:id/{receipt,approve,reject},
  /payments/bank-info, /payments/pending; keep /payments/me
- payments.module: drop BankAccountsModule import
- admin.service: drop pending EFT counter from getDashboardStats; drop
  getPendingPayments (admin EFT approval list)
- admin.controller: drop /admin/payments/pending endpoint
- admin.service.spec: drop the getPendingPayments + pendingPayments assertions

Web (apps/web/src):
- Delete components/payment/bank-transfer-card.tsx
- Delete routes/dashboard/admin/payments.tsx (EFT approval page); regenerate
  routeTree.gen.ts
- subscription/index.tsx: drop EFT tab from PaymentMethodSection, drop the
  paymentMethod state + handleEftCompleted, simplify ConfirmationCard to the
  Stripe-only path, drop unused imports (Tabs, BankTransferCard, Building2)
- billing.tsx: drop "eft" from method filter chips; keep methodLabels.eft and
  the legacy receipt download so historical EFT records still display
- dashboard.tsx + admin/index.tsx: drop /dashboard/admin/payments from the
  sidebar + admin quick-link grid; trim unused icon imports; KEYS_6 → KEYS_5
  for the now-5-card admin stats skeleton
- messages/{tr,en}.json: strip every EFT-only key under payment.* (eftTransfer,
  eftConfirmationDescription, eftPaid, eftStatus, bank.*, uploadReceipt* etc.)

Schema (apps/api/src/database/schema):
- bankAccounts table + payments.bankAccountId column are kept as-is: legacy
  EFT payments remain visible on the billing page and the schema preserves
  historical records.

Docs:
- README.md: "Stripe (kart) + EFT" → "Stripe (kart)"
- CLAUDE.md: stack table + PaymentsModule row + payments table note + route
  list updated; admin EFT approval route removed

Verification:
- pnpm typecheck: green (api + web + shared + config + ui)
- pnpm lint: green
- pnpm test: 20 web tests pass, 173 api tests pass
This commit is contained in:
Fusion
2026-05-15 17:24:06 +03:00
committed by Semih Yesilyurt
parent 1278ef679d
commit 65daf99b2e
20 changed files with 555 additions and 2135 deletions

View File

@@ -273,7 +273,6 @@
"totalAmount": "Total Amount",
"paymentMethod": "Payment Method",
"creditCard": "Credit Card",
"eftTransfer": "EFT/Wire Transfer",
"payWithCard": "Pay with Card",
"paying": "Processing payment...",
"bankDetails": "Bank Details",
@@ -282,30 +281,15 @@
"iban": "IBAN",
"description": "Description",
"paymentDescription": "Sase.tr Subscription Payment",
"uploadReceipt": "Upload Receipt",
"uploadReceiptDescription": "Upload your receipt after EFT/Wire transfer.",
"dragDrop": "Drag and drop a file or click to browse",
"supportedFormats": "PNG, JPG, or PDF (max 5MB)",
"uploading": "Uploading...",
"receiptUploaded": "Receipt uploaded successfully. Waiting for approval.",
"uploadFailed": "Receipt upload failed.",
"paymentStatus": "Payment Status",
"waitingApproval": "Waiting for Approval",
"approved": "Approved",
"step1": "Plan & Brands",
"step2": "Payment",
"step3": "Confirmation",
"confirmation": "Payment received!",
"confirmationDescription": "Your subscription has been activated successfully.",
"eftConfirmationDescription": "Your EFT/Wire receipt has been received. Your subscription will be activated after approval.",
"goToDashboard": "Go to Dashboard",
"initializeFailed": "Payment initialization failed. Please try again.",
"processingPayment": "Processing payment...",
"eftPaid": "I Made EFT/Wire Transfer",
"eftStatus": {
"created": "EFT/Wire transfer record created",
"receiptUploaded": "Receipt uploaded"
},
"paymentFailed": "Payment failed. Please try again.",
"stripe": {
"secureCheckoutTitle": "Secure payment with 3D Secure",
@@ -315,31 +299,6 @@
"verifyingTitle": "Verifying your payment",
"verifyingDescription": "Your subscription will activate as soon as Stripe confirms. Stay on this page for a few seconds.",
"trustProvider": "Stripe payment infrastructure"
},
"bank": {
"bankLabel": "Bank",
"accountHolderLabel": "Account holder",
"ibanLabel": "IBAN",
"kolayAdresLabel": "Easy Address",
"kolayAdresType": {
"email": "Email",
"phone": "Phone",
"tckn": "TR ID"
},
"descriptionLabel": "Reference",
"amountLabel": "Amount",
"copyIban": "Copy IBAN",
"copyKolayAdres": "Copy easy address",
"copyDescription": "Copy reference",
"qrAlt": "Mobile banking QR code",
"qrHint": "Scan in your bank app",
"qrUnavailable": "QR coming soon",
"reveal": "Show",
"hide": "Hide",
"previewDescription": "Fills in once your payment is created",
"proceedToUpload": "I made the transfer — upload receipt",
"unavailableTitle": "Bank transfer unavailable",
"unavailableDescription": "Please use card payment or try again shortly."
}
},
"billing": {

View File

@@ -273,7 +273,6 @@
"totalAmount": "Toplam Tutar",
"paymentMethod": "Ödeme Yöntemi",
"creditCard": "Kredi Kartı",
"eftTransfer": "EFT/Havale",
"payWithCard": "Kartla Öde",
"paying": "Ödeme yapılıyor...",
"bankDetails": "Banka Bilgileri",
@@ -282,30 +281,15 @@
"iban": "IBAN",
"description": "Açıklama",
"paymentDescription": "Sase.tr Abonelik Ödemesi",
"uploadReceipt": "Dekont Yükle",
"uploadReceiptDescription": "EFT/Havale sonrası dekontunuzu yükleyin.",
"dragDrop": "Dosyayı sürükleyip bırakın veya tıklayın",
"supportedFormats": "PNG, JPG veya PDF (maks. 5MB)",
"uploading": "Yükleniyor...",
"receiptUploaded": "Dekont başarıyla yüklendi. Onay bekleniyor.",
"uploadFailed": "Dekont yükleme başarısız.",
"paymentStatus": "Ödeme Durumu",
"waitingApproval": "Onay Bekleniyor",
"approved": "Onaylandı",
"step1": "Plan ve Markalar",
"step2": "Ödeme",
"step3": "Onay",
"confirmation": "Ödemeniz alındı!",
"confirmationDescription": "Aboneliğiniz başarıyla aktifleştirildi.",
"eftConfirmationDescription": "EFT/Havale dekontunuz alındı. Onay sonrası aboneliğiniz aktifleştirilecektir.",
"goToDashboard": "Panele Git",
"initializeFailed": "Ödeme başlatılamadı. Lütfen tekrar deneyin.",
"processingPayment": "Ödeme işleniyor...",
"eftPaid": "EFT/Havale Yaptım",
"eftStatus": {
"created": "EFT/Havale kaydı oluşturuldu",
"receiptUploaded": "Dekont yüklendi"
},
"paymentFailed": "Ödeme başarısız oldu. Lütfen tekrar deneyin.",
"stripe": {
"secureCheckoutTitle": "3D Secure ile güvenli ödeme",
@@ -315,31 +299,6 @@
"verifyingTitle": "Ödemen doğrulanıyor",
"verifyingDescription": "Stripe onayı geldiğinde aboneliğin otomatik aktifleşecek. Bu sayfayı kapatmadan birkaç saniye bekle.",
"trustProvider": "Stripe ödeme altyapısı"
},
"bank": {
"bankLabel": "Banka",
"accountHolderLabel": "Hesap Sahibi",
"ibanLabel": "IBAN",
"kolayAdresLabel": "Kolay Adres",
"kolayAdresType": {
"email": "E-posta",
"phone": "Telefon",
"tckn": "TCKN"
},
"descriptionLabel": "Açıklama",
"amountLabel": "Tutar",
"copyIban": "IBAN'ı kopyala",
"copyKolayAdres": "Kolay Adres'i kopyala",
"copyDescription": "Açıklamayı kopyala",
"qrAlt": "Mobil bankacılık QR kodu",
"qrHint": "Bankan ile tara",
"qrUnavailable": "QR yakında",
"reveal": "Göster",
"hide": "Gizle",
"previewDescription": "Ödeme oluştuğunda burası dolar",
"proceedToUpload": "Havaleyi yaptım, dekont yükle",
"unavailableTitle": "Havale şu an aktif değil",
"unavailableDescription": "Kart ile ödemeyi tercih edebilir veya birazdan tekrar denersin."
}
},
"billing": {