Files

4.5 KiB

جریان کاربری — تسک ۱۴: پنل پیامکی

جریان شارژ کیف پول پیامک

کاربر وارد صفحه تنظیمات → تب «پیامک» می‌شود
          │
          ▼
GET /api/v1/sms/wallet/balance
  → موجودی: ۱۵۰,۰۰۰ ریال (≈ ۶۰۰ پیامک)
          │
          ▼
کاربر روی «شارژ کیف پول» کلیک می‌کند
فرم: مبلغ شارژ + انتخاب gateway
          │
          ▼
POST /api/v1/sms/wallet/charge { gateway: 'mellat', amount_rials: 500000 }
          │
          ▼
PaymentController → ایجاد Payment با type='sms_wallet'
          │
          ▼
redirect به gateway بانک
          │
          ▼
callback → SmsWalletService::charge()
  → balance_rials += 500000
  → ثبت credit transaction
          │
          ▼
redirect به /admin/sms-settings?charged=1

جریان تنظیمات یادآوری خودکار

GET /api/v1/sms/settings → فرم پر می‌شود
          │
          ▼
┌─────────────────────────────────────────────┐
│  تنظیمات پیامک                              │
├─────────────────────────────────────────────┤
│ یادآوری نوبت                                │
│  [✅] فعال                                  │
│  چند ساعت قبل: [3 ساعت ▼]                  │
├─────────────────────────────────────────────┤
│ پیامک بعد از ویزیت                          │
│  [☐] فعال                                  │
│  متن پیامک: [______________________________]│
└─────────────────────────────────────────────┘
│ [ذخیره تنظیمات]                             │
          │
          ▼
PATCH /api/v1/sms/settings
  { reminder_enabled: true, reminder_hours_before: 3,
    post_visit_enabled: false, post_visit_text: null }

جریان کسر خودکار هنگام ارسال یادآوری

Scheduler/Cronjob اجرا می‌شود (هر ساعت)
          │
          ▼
نوبت‌هایی که در X ساعت آینده هستند پیدا می‌شوند
          │
          ▼
برای هر نوبت:
  entity_type/entity_id پیدا می‌شود
          │
          ▼
SmsWallet پیدا می‌شود
          │
          ├─► balance < sms_price_rials:
          │   لاگ خطا: «موجودی ناکافی» — پیامک ارسال نشد
          │
          └─► balance کافی:
              SmsService::send(phone, message, entityType, entityId)
              → ارسال پیامک
              → deduct balance
              → ثبت debit transaction با description='یادآوری نوبت'

نمایش در Frontend

┌─────────────────────────────────────────────────┐
│  تنظیمات پیامک                                  │
├──────────────────────┬──────────────────────────┤
│ کیف پول پیامک        │ تنظیمات ارسال            │
│                      │                          │
│ موجودی:              │ یادآوری: ✅ ۳ ساعت قبل   │
│ ۱۵۰,۰۰۰ ریال        │                          │
│ ≈ ۶۰۰ پیامک         │ پس از ویزیت: ☐ غیرفعال  │
│                      │                          │
│ [شارژ کیف پول]       │ [ذخیره تنظیمات]          │
├──────────────────────┴──────────────────────────┤
│ تاریخچه تراکنش‌ها                               │
│ ✅ +۵۰۰,۰۰۰ ریال — شارژ  — ۱۴۰۵/۰۳/۱۰        │
│ ⬇️  -۲۵۰ ریال    — یادآوری نوبت — ۱۴۰۵/۰۳/۱۱ │
└─────────────────────────────────────────────────┘