From 8c0b3d828273c3a7521bc9084814257386613f37 Mon Sep 17 00:00:00 2001 From: hamed <15238-genius.ha@users.noreply.drupalcode.org> Date: Mon, 15 Jun 2026 11:35:23 +0330 Subject: [PATCH] feat(payment): add endpoint for payment configuration and update UI for test mode --- .claude/prompt/payment-test-mode-ui.md | 177 +++++++++++++++++++ assets/admin/pages/SmsWalletPage.tsx | 92 ++++++---- assets/admin/pages/SubscriptionPage.tsx | 81 ++++++--- docs/api/payment.md | 24 +++ src/Payment/Controller/PaymentController.php | 9 + 5 files changed, 322 insertions(+), 61 deletions(-) create mode 100644 .claude/prompt/payment-test-mode-ui.md diff --git a/.claude/prompt/payment-test-mode-ui.md b/.claude/prompt/payment-test-mode-ui.md new file mode 100644 index 00000000..3102e47e --- /dev/null +++ b/.claude/prompt/payment-test-mode-ui.md @@ -0,0 +1,177 @@ +# نمایش درگاه تست در رابط کاربری هنگام فعال بودن حالت آزمایشی + +## زمینه + +سیستم پرداخت یک حالت آزمایشی (`payment_test_mode`) دارد که در `SiteConfig` ذخیره میشود. وقتی این حالت فعال است، backend در `resolveGateway()` (هر دو `PaymentController` و `SmsWalletController`) بجای درگاه واقعی، درگاه `MockGateway` را بهکار میبرد و پول واقعی کسر نمیشود. + +**مشکل:** Frontend هیچ اطلاعی از حالت تست ندارد. کاربر در `SmsWalletPage` و `SubscriptionPage` انتخاب درگاه میبیند (ملت / سپ)، حتی وقتی backend همه را به Mock هدایت میکند. این گیجکننده است. + +**هدف:** وقتی `payment_test_mode = '1'` است: +- انتخابکننده درگاه واقعی پنهان شود +- بجای آن یک نوار زرد/نارنجی نمایش داده شود: «درگاه آزمایشی فعال است — پول واقعی کسر نخواهد شد» + +--- + +## مشکل / هدف + +دو صفحه frontend نیاز به تغییر دارند: +1. `SmsWalletPage.tsx` — modal شارژ کیف پول پیامک +2. `SubscriptionPage.tsx` — modal خرید اشتراک + +همچنین یک endpoint عمومی (برای همه کاربران احراز هویت شده) باید ساخته شود چون `GET /api/v1/admin/settings` فقط برای `ROLE_ADMIN` است. + +--- + +## فایلهای مرتبط + +| فایل | نقش | +|------|-----| +| `src/Config/Controller/SiteConfigController.php` | endpoint تنظیمات — فعلاً فقط ROLE_ADMIN | +| `src/Config/Repository/SiteConfigRepository.php` | خواندن `payment_test_mode` | +| `src/Payment/Controller/PaymentController.php` | `resolveGateway()` — backend قبلاً درست است | +| `assets/admin/pages/SmsWalletPage.tsx` | modal شارژ — نمایشدهنده انتخابکننده درگاه | +| `assets/admin/pages/SubscriptionPage.tsx` | modal اشتراک — نمایشدهنده انتخابکننده درگاه | + +--- + +## وضعیت فعلی + +### Backend — endpoint تنظیمات فقط ادمین است +```php +// src/Config/Controller/SiteConfigController.php +#[IsGranted('ROLE_ADMIN')] +class SiteConfigController extends BaseController +{ + #[Route('/api/v1/admin/settings', methods: ['GET'])] + public function get(): JsonResponse + { + return $this->success($this->configRepo->getAll()); + } +} +``` + +### Frontend — SmsWalletPage modal (خط ۳۴۸–۳۷۳) +```tsx +// همیشه دو گزینه mellat و sep نمایش میدهد +{(['mellat', 'sep'] as const).map((gw) => ( +