docs: convert all ASCII charts to Mermaid diagrams
Converted 40+ ASCII art diagrams across 12 files to Mermaid: - flowchart TD/LR for process flows and architecture - erDiagram for entity relationships - graph TD for tree structures (binary tree, categories) - gantt for roadmap sprints Files: BUSINESS-01 to 05, TECH-01/03/04/05, OVERVIEW-01/02/05 Directory tree structures kept as plain code blocks (Mermaid N/A)
This commit is contained in:
@@ -7,19 +7,27 @@
|
||||
|
||||
## ۱. معماری کلی مالی
|
||||
|
||||
```
|
||||
┌──────────────────────────────────────────────────────────────────┐
|
||||
│ FourSat Payment Architecture │
|
||||
├──────────────┬──────────────┬──────────────┬─────────────────────┤
|
||||
│ ZarinPal │ Daya Loan │ Manual Pay │ Discount Wallet │
|
||||
│ (IPG) │ (API) │ (Card2Card) │ (Internal) │
|
||||
├──────────────┴──────────────┴──────────────┴─────────────────────┤
|
||||
│ PYMS (Payment Service) │
|
||||
│ gRPC ←→ CMS ←→ FrontOffice/BackOffice │
|
||||
├──────────────────────────────────────────────────────────────────┤
|
||||
│ 3 Wallet System │
|
||||
│ Balance (نقدی) │ NetworkBalance (شبکه) │ DiscountBalance │
|
||||
└──────────────────────────────────────────────────────────────────┘
|
||||
```mermaid
|
||||
flowchart TD
|
||||
subgraph GATEWAYS["درگاهها"]
|
||||
ZP["ZarinPal\nIPG"]
|
||||
DL["Daya Loan\nAPI"]
|
||||
MP["Manual Pay\nCard2Card"]
|
||||
DW["Discount Wallet\nInternal"]
|
||||
end
|
||||
|
||||
ZP --> PYMS["PYMS — Payment Service\ngRPC ↔ CMS ↔ FrontOffice/BackOffice"]
|
||||
DL --> PYMS
|
||||
MP --> PYMS
|
||||
DW --> PYMS
|
||||
|
||||
PYMS --> WALLETS
|
||||
|
||||
subgraph WALLETS["3 Wallet System"]
|
||||
W1["💰 Balance\nنقدی"]
|
||||
W2["🌟 NetworkBalance\nشبکه"]
|
||||
W3["🏷️ DiscountBalance\nتخفیفی"]
|
||||
end
|
||||
```
|
||||
|
||||
---
|
||||
@@ -28,23 +36,14 @@
|
||||
|
||||
### ۲.۱ فلوی پرداخت
|
||||
|
||||
```
|
||||
کاربر → انتخاب محصول → درخواست پرداخت
|
||||
│
|
||||
▼
|
||||
CMS → CreatePaymentRequest (gRPC to PYMS)
|
||||
│
|
||||
▼
|
||||
PYMS → ZarinPal API → دریافت Authority
|
||||
│
|
||||
▼
|
||||
Redirect کاربر → صفحه پرداخت ZarinPal
|
||||
│
|
||||
▼
|
||||
بازگشت با Authority → CMS VerifyPayment
|
||||
│
|
||||
├─→ موفق: ثبت سفارش + شارژ کیفپول (در صورت نیاز)
|
||||
└─→ ناموفق: نمایش پیام خطا
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A["کاربر → انتخاب محصول\nدرخواست پرداخت"] --> B["CMS → CreatePaymentRequest\ngRPC to PYMS"]
|
||||
B --> C["PYMS → ZarinPal API\nدریافت Authority"]
|
||||
C --> D["Redirect کاربر\nصفحه پرداخت ZarinPal"]
|
||||
D --> E["بازگشت با Authority\nCMS VerifyPayment"]
|
||||
E -->|موفق| F["✅ ثبت سفارش\n+ شارژ کیفپول"]
|
||||
E -->|ناموفق| G["❌ نمایش پیام خطا"]
|
||||
```
|
||||
|
||||
### ۲.۲ تنظیمات ZarinPal
|
||||
@@ -62,21 +61,14 @@ Redirect کاربر → صفحه پرداخت ZarinPal
|
||||
|
||||
### ۳.۱ معماری
|
||||
|
||||
```
|
||||
Hangfire Recurring Job (هر ۲۰ دقیقه — cron: */20 * * * *)
|
||||
│
|
||||
▼
|
||||
DayaLoanProcessorJob.Execute()
|
||||
│
|
||||
▼
|
||||
بررسی LoanRequests با Status=Pending
|
||||
│
|
||||
▼
|
||||
برای هر درخواست:
|
||||
├─→ ارسال به DayaLoan API ([AutomaticRetry(Attempts=3)])
|
||||
├─→ در صورت تأیید: Balance += 56M, DiscountBalance += 112M (2×)
|
||||
├─→ ثبت Transaction + Log
|
||||
└─→ در صورت رد: Status=Rejected + ارسال SMS
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A["Hangfire Recurring Job\nهر ۲۰ دقیقه — */20 * * * *"] --> B["DayaLoanProcessorJob.Execute"]
|
||||
B --> C["بررسی LoanRequests\nStatus = Pending"]
|
||||
C --> D["برای هر درخواست:"]
|
||||
D --> E["ارسال به DayaLoan API\nAutomaticRetry Attempts=3"]
|
||||
E -->|تأیید| F["✅ Balance += 56M\nDiscountBalance += 112M\n+ ثبت Transaction + Log"]
|
||||
E -->|رد| G["❌ Status = Rejected\n+ ارسال SMS"]
|
||||
```
|
||||
|
||||
### ۳.۲ Mock Mode
|
||||
@@ -108,21 +100,14 @@ DayaLoanProcessorJob.Execute()
|
||||
|
||||
> ⚠️ **وضعیت: طراحیشده — پیادهسازی نشده**
|
||||
|
||||
```
|
||||
فلوی پیشنهادی:
|
||||
کاربر → انتخاب "کارتبهکارت"
|
||||
│
|
||||
▼
|
||||
نمایش شمارهکارت مقصد + مبلغ
|
||||
│
|
||||
▼
|
||||
کاربر → واریز + آپلود تصویر رسید
|
||||
│
|
||||
▼
|
||||
ادمین BackOffice → مشاهده لیست درخواستها
|
||||
│
|
||||
▼
|
||||
تأیید/رد → شارژ خودکار کیفپول
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A["کاربر → انتخاب کارتبهکارت"] --> B["نمایش شمارهکارت مقصد\n+ مبلغ"]
|
||||
B --> C["کاربر → واریز\n+ آپلود تصویر رسید"]
|
||||
C --> D["ادمین BackOffice\nمشاهده لیست درخواستها"]
|
||||
D --> E{"تأیید / رد؟"}
|
||||
E -->|تأیید| F["✅ شارژ خودکار کیفپول"]
|
||||
E -->|رد| G["❌ اطلاعرسانی به کاربر"]
|
||||
```
|
||||
|
||||
**موجودیتهای مورد نیاز:**
|
||||
@@ -149,22 +134,13 @@ MaxDiscountPercent محصول = 40% (هر محصول درصد تخفیف مخص
|
||||
|
||||
### ۵.۲ فلوی خرید فروشگاه تخفیفی
|
||||
|
||||
```
|
||||
کاربر (عضو باشگاه) → مشاهده محصول
|
||||
│
|
||||
▼
|
||||
قیمت تخفیفخورده نمایش داده میشود
|
||||
│
|
||||
▼
|
||||
افزودن به سبد → بررسی DiscountBalance
|
||||
│
|
||||
├─→ DiscountBalance کافی:
|
||||
│ سهم تخفیف از DiscountBalance کسر
|
||||
│ باقیمانده → IPG (ZarinPal)
|
||||
│
|
||||
└─→ DiscountBalance ناکافی:
|
||||
فقط به اندازه موجودی از تخفیف
|
||||
باقیمانده بیشتر → IPG
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A["کاربر عضو باشگاه\nمشاهده محصول"] --> B["قیمت تخفیفخورده نمایش داده میشود"]
|
||||
B --> C["افزودن به سبد\nبررسی DiscountBalance"]
|
||||
C --> D{"موجودی کافی؟"}
|
||||
D -->|کافی| E["سهم تخفیف از DiscountBalance\nباقیمانده → IPG ZarinPal"]
|
||||
D -->|ناکافی| F["فقط به اندازه موجودی\nباقیمانده بیشتر → IPG"]
|
||||
```
|
||||
|
||||
### ۵.۳ دسترسی فروشگاه تخفیفی
|
||||
|
||||
Reference in New Issue
Block a user