1b04ba5326
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)
219 lines
6.2 KiB
Markdown
219 lines
6.2 KiB
Markdown
# 📊 فلوچارتها و دیاگرامهای کلان
|
||
|
||
> **دید بالا (Big Picture): فلوی کاربر، مالی و داده**
|
||
> **آخرین بروزرسانی:** اسفند ۱۴۰۴
|
||
|
||
---
|
||
|
||
## ۱. فلوی کلان کاربر (User Journey)
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
A["🌐 ورود به سایت"] --> B{"آیا ثبتنام کرده؟"}
|
||
B -->|خیر| C["Landing Page"]
|
||
C --> D["ثبتنام\nموبایل + OTP"]
|
||
D --> E["پروفایل"]
|
||
E --> F
|
||
|
||
B -->|بله| G["Login + JWT"]
|
||
G --> H{"عضو باشگاه؟"}
|
||
H -->|خیر| F["🛒 Regular Store\nخرید عادی — IPG پرداخت"]
|
||
H -->|بله| I["🏆 Club Member Dashboard"]
|
||
|
||
I --> J["فروشگاه تخفیفی\nper-product MaxDiscount%"]
|
||
I --> K["درخت شبکه\nباینری"]
|
||
I --> L["کمیسیون\nهفتگی"]
|
||
I --> M["Chatika AI"]
|
||
```
|
||
|
||
---
|
||
|
||
## ۲. فلوی مالی (Financial Flow)
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
subgraph INPUT["═══ ورودی پول ═══"]
|
||
Z1["ZarinPal IPG"]
|
||
Z2["Daya Loan"]
|
||
Z3["Manual Pay"]
|
||
end
|
||
|
||
Z1 --> PYMS["PYMS Service"]
|
||
Z2 --> PYMS
|
||
Z3 --> PYMS
|
||
PYMS --> TX[("DB Transaction")]
|
||
|
||
TX --> W1 & W2 & W3
|
||
|
||
subgraph WALLETS["═══ توزیع به کیفپولها ═══"]
|
||
W1["💰 Balance — نقدی\n• IPG: +56M\n• Daya: +56M\n• فعالسازی: −25.2M\n• خرید فروشگاه"]
|
||
W2["🌟 NetworkBalance — طلایی\n• شارژ نمیشود\n• فقط محاسبه کمیسیون\n• سقف 300/هفته"]
|
||
W3["🏷️ DiscountBalance — تخفیفی\n• IPG: +112M\n• Daya: +112M\n• per-product MaxDiscount%"]
|
||
end
|
||
|
||
W1 & W2 --> POOL
|
||
|
||
subgraph POOL["═══ Weekly Commission Pool ═══"]
|
||
P1["هر فعالسازی → 25.2M واریز به Pool"]
|
||
P2["sp_CalculateWeeklyBalances"]
|
||
P3["sp_CalculateWeeklyCommissionPool"]
|
||
P4["UserShare = UserBalance / TotalBalance"]
|
||
P5["Cap: MAX 300 per leg per week"]
|
||
P1 --> P2 --> P3 --> P4 --> P5
|
||
end
|
||
```
|
||
|
||
---
|
||
|
||
## ۳. فلوی داده (Data Flow)
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
CLIENT["🌐 Browser / Client"] -->|HTTPS| NGINX["nginx / K8s Ingress"]
|
||
|
||
NGINX -->|"/"| FO["FrontOffice :5003\nBlazor Server"]
|
||
NGINX -->|"/admin"| BO["BackOffice :5002\nBlazor WASM"]
|
||
NGINX -->|"/hangfire"| CMS
|
||
|
||
FO -->|gRPC| CMS["CMS Microservice :5001"]
|
||
BO -->|gRPC| CMS
|
||
|
||
CMS --> MEDIATR["MediatR\nCommands / Queries → Handlers"]
|
||
CMS --> HF["Hangfire\n• DayaLoan — */20 min\n• Commission — Sunday 00:05\n• Chatika — */5 min"]
|
||
CMS --> EXT["External Services\n• ZarinPal API\n• Kavenegar API\n• DayaLoan API\n• Chatika API"]
|
||
|
||
MEDIATR --> EF["EF Core 9"]
|
||
HF --> EF
|
||
EF --> DB[("SQL Server 2022\nSchema: CMS\n~15 tables + 3 SPs")]
|
||
```
|
||
|
||
---
|
||
|
||
## ۴. درخت باینری شبکه (Network Tree)
|
||
|
||
```mermaid
|
||
graph TD
|
||
ROOT["🔵 Root — Admin"]
|
||
ROOT --- A["👤 User A\nL=120 | R=80"]
|
||
ROOT --- B["👤 User B\nL=0 | R=150"]
|
||
|
||
A --- C["✅ User C\nActive"]
|
||
A --- D["✅ User D\nActive"]
|
||
B --- E["⏳ User E\nPending"]
|
||
B --- F["✅ User F\nActive"]
|
||
|
||
style ROOT fill:#1976D2,color:#fff
|
||
style C fill:#4CAF50,color:#fff
|
||
style D fill:#4CAF50,color:#fff
|
||
style E fill:#FF9800,color:#fff
|
||
style F fill:#4CAF50,color:#fff
|
||
```
|
||
|
||
> **راهنما:**
|
||
> - `L` / `R` = فروش پای چپ / راست این هفته
|
||
> - **Active** = فعال (قرارداد امضا شده) — **Pending** = در انتظار فعالسازی
|
||
> - شبکه روی entity `User` مدل شده (`NetworkParentId`, `LegPosition`)
|
||
> - محاسبه کمیسیون تا عمق ۱۵ سطح — درخت بدون محدودیت عمق
|
||
|
||
---
|
||
|
||
## ۵. فلوی خرید — Regular vs Discount Store
|
||
|
||
### ۵.۱ Regular Store
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
A1["مشاهده محصولات"] --> B1["Lazy Load — 12 per page"]
|
||
B1 --> C1["افزودن به سبد"]
|
||
C1 --> D1["بررسی موجودی"]
|
||
D1 --> E1["Checkout"]
|
||
E1 --> F1["ZarinPal IPG\n100% نقدی"]
|
||
F1 --> G1["ثبت سفارش"]
|
||
G1 --> H1["کسر موجودی"]
|
||
H1 --> I1["SMS تأیید"]
|
||
```
|
||
|
||
### ۵.۲ Discount Store
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
A2["مشاهده محصولات\nفقط اعضای باشگاه"] --> B2["Lazy Load — 12 per page"]
|
||
B2 --> C2["افزودن به سبد"]
|
||
C2 --> D2["بررسی موجودی + DiscountBalance"]
|
||
D2 --> E2["محاسبه سهم تخفیف\nMaxDiscount% هر محصول"]
|
||
E2 --> F2["محاسبه سهم نقدی\nباقیمانده"]
|
||
F2 --> G2["کسر از DiscountBalance"]
|
||
G2 --> H2["ZarinPal IPG\nبرای باقیمانده نقدی"]
|
||
H2 --> I2["ثبت سفارش ترکیبی"]
|
||
I2 --> J2["کسر موجودی"]
|
||
J2 --> K2["SMS تأیید"]
|
||
```
|
||
|
||
---
|
||
|
||
## ۶. معماری Deployment
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
subgraph SERVER["🖥️ Production Server — 45.149.79.127"]
|
||
NGINX["nginx\n:80 / :443"]
|
||
subgraph K8S["☸ Kubernetes Cluster"]
|
||
CMS["CMS ×2\n:5001 gRPC"]
|
||
FO["FrontOffice ×2\n:5003 Blazor Server"]
|
||
BO["BackOffice ×1\n:5002 Static"]
|
||
DB[("SQL Server\n:1433")]
|
||
NEXUS["Nexus\n:8081"]
|
||
HF["Hangfire\ninside CMS"]
|
||
end
|
||
end
|
||
|
||
NGINX --> CMS
|
||
NGINX --> FO
|
||
NGINX --> BO
|
||
CMS --> DB
|
||
CMS --> HF
|
||
|
||
style SERVER fill:#f5f5f5,stroke:#333
|
||
style K8S fill:#e3f2fd,stroke:#1976D2
|
||
```
|
||
|
||
---
|
||
|
||
## ۷. Entity Relationship (سادهشده)
|
||
|
||
```mermaid
|
||
erDiagram
|
||
User ||--o{ ClubMembership : has
|
||
User ||--o| UserWallet : has
|
||
User ||--o{ UserContract : signs
|
||
User ||--o{ UserOrder : places
|
||
User ||--o{ ChatMessage : sends
|
||
User }o--o| User : "NetworkParentId"
|
||
|
||
UserOrder ||--|{ OrderItem : contains
|
||
OrderItem }o--|| Product : references
|
||
UserOrder ||--o{ Transaction : has
|
||
|
||
Product ||--o| Inventory : has
|
||
Product }o--|| Category : belongs_to
|
||
Product ||--o{ ProductImage : has
|
||
|
||
UserWallet ||--o{ UserWalletChangeLog : logs
|
||
|
||
BlogPost }o--|| Category : belongs_to
|
||
|
||
UserWallet {
|
||
long Balance
|
||
long NetworkBalance
|
||
long DiscountBalance
|
||
}
|
||
User {
|
||
Guid NetworkParentId
|
||
int LegPosition
|
||
}
|
||
UserContract {
|
||
Guid SignGuid
|
||
string SignedPdfFile
|
||
}
|
||
```
|