Files

103 lines
4.5 KiB
Markdown

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