From b366baa64cec12237f8231279d38d8f59d4ed8d5 Mon Sep 17 00:00:00 2001 From: hamed <15238-genius.ha@users.noreply.drupalcode.org> Date: Wed, 1 Jul 2026 11:53:16 +0330 Subject: [PATCH] feat(sms): simplify SMS settings to use only KAVENEGAR_API_KEY from env, remove other SMS-related fields from config --- .../prompt/sms-settings-apikey-env-only.md | 311 ++++++++++++++++++ .env.coolify.example | 7 +- .env.example | 6 +- .env.liara.example | 4 +- assets/admin/pages/SettingsPage.tsx | 66 +--- config/services.yaml | 6 - docs/api/sms.md | 12 +- .../Controller/SiteConfigController.php | 12 +- .../Repository/SiteConfigRepository.php | 7 - src/Sms/Controller/SmsWalletController.php | 4 +- src/Sms/Provider/KavehNegarProvider.php | 9 +- 11 files changed, 352 insertions(+), 92 deletions(-) create mode 100644 .claude/prompt/sms-settings-apikey-env-only.md diff --git a/.claude/prompt/sms-settings-apikey-env-only.md b/.claude/prompt/sms-settings-apikey-env-only.md new file mode 100644 index 00000000..ebf66df7 --- /dev/null +++ b/.claude/prompt/sms-settings-apikey-env-only.md @@ -0,0 +1,311 @@ +# سادهسازی «تنظیمات پیامک (SMS)» — فقط API Key از env + +## پروژه + +`clinicpro` (Backend Symfony + پنل ادمین React) + +## زمینه + +در پنل ادمین (`https://clinic-pro.ddev.site/admin` → صفحه تنظیمات) بخش **«تنظیمات پیامک (SMS)»** الان چهار مورد قابلویرایش دارد که همه در جدول DB `site_config` ذخیره میشوند: + +- `sms_provider` (انتخاب سرویس: کاوهنگار / رنگینه) +- `sms_price_rials` (قیمت هر پیامک) +- `kavenegar_api_key` (کلید API) +- `kavenegar_sender` (شماره فرستنده) + +مقدار API Key عملاً باید یک راز (secret) باشد و جای آن env است، نه دیتابیس یا فرم قابلویرایش پنل. تصمیم نهایی: + +- **تنها `KAVENEGAR_API_KEY` در env بماند.** بقیه env های SMS حذف شوند. +- در پنل، کلید فقط **read-only** نمایش داده شود (وضعیت «تنظیمشده / تنظیمنشده») و از env خوانده شود؛ دیگر در DB ذخیره نشود. +- سه مورد دیگر (provider، price، sender) از **UI و Backend بهطور کامل حذف** شوند. +- خودِ کارت/بخش «تنظیمات پیامک (SMS)» باقی بماند. + +## هدف + +1. API Key فقط از env (`KAVENEGAR_API_KEY`) — read-only در پنل، بدون ذخیره در DB. +2. حذف کامل `sms_provider`، `sms_price_rials`، `kavenegar_sender` (و کلیدهای rangineh) از UI و Backend config. +3. Provider همیشه `kavenegar`. Sender خالی → کاوهنگار از خط پیشفرض حساب استفاده میکند. +4. `sms_price_rials` که قبلاً از config خوانده میشد، تبدیل به ثابت (constant) شود تا کیفپول پیامک نشکند. +5. همه فایلهای env بهروزرسانی شوند: فقط `KAVENEGAR_API_KEY` بماند. + +## فایلهای مرتبط + +| فایل | نقش | تغییر | +|------|-----|-------| +| `assets/admin/pages/SettingsPage.tsx` | فرم تنظیمات پنل | حذف ۳ فیلد، تبدیل API Key به read-only status | +| `assets/admin/types/index.ts` | تایپها | حذف `sms_price_rials` | +| `src/Config/Controller/SiteConfigController.php` | endpoint `/api/v1/admin/settings` | حذف کلیدهای SMS از `ALLOWED_KEYS`؛ افزودن flag read-only | +| `src/Config/Repository/SiteConfigRepository.php` | مقادیر پیشفرض config | حذف کلیدهای SMS از `DEFAULTS` | +| `src/Sms/Provider/KavehNegarProvider.php` | provider کاوهنگار | خواندن key/sender فقط از env، نه configRepo | +| `src/Sms/Controller/SmsWalletController.php` | balance/price | `sms_price_rials` از ثابت بهجای config | +| `config/services.yaml` | wiring provider | تنظیم binding های env | +| `.env` و بقیه `.env.*` | متغیرهای محیطی | فقط `KAVENEGAR_API_KEY` | +| `docs/api/sms.md` | مستندات | ذکر منبع جدید API Key | + +--- + +## وضعیت فعلی (کد واقعی) + +### ۱. فرم پنل — `assets/admin/pages/SettingsPage.tsx` + +Zod schema (خطوط ۴۰–۴۳): + +```tsx + sms_provider: z.string(), + kavenegar_api_key: z.string(), + kavenegar_sender: z.string(), + sms_price_rials: z.string(), +``` + +interface (خطوط ۶۵–۶۸) + reset defaults (۱۲۳–۱۲۶) + reset onClick (۵۴۴–۵۴۷) هم همین ۴ کلید را دارند. + +بخش UI (خطوط ۴۷۱–۵۲۰): + +```tsx + {/* تنظیمات پیامک */} +
+ کلید API فقط از طریق متغیر محیطی سرور مدیریت میشود و در این پنل قابل ویرایش نیست. +
++ کلید API فقط از طریق متغیر محیطی سرور مدیریت میشود و در این پنل قابل ویرایش نیست. +