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,27 +7,19 @@
|
||||
|
||||
## ۱. فلوی کامل چرخه کاربر
|
||||
|
||||
```
|
||||
ورود به سایت
|
||||
│
|
||||
▼
|
||||
ثبتنام (موبایل + OTP)
|
||||
│
|
||||
▼
|
||||
تکمیل پروفایل
|
||||
│
|
||||
▼
|
||||
┌─────────────────────┬────────────────────────┐
|
||||
│ مسیر عادی │ مسیر باشگاه │
|
||||
├─────────────────────┼────────────────────────┤
|
||||
│ خرید از فروشگاه │ خرید پکیج طلایی (56M) │
|
||||
│ مشاهده بلاگ │ امضای قرارداد (OTP) │
|
||||
│ استفاده از خدمات │ فعالسازی (25M) │
|
||||
│ │ عضویت در درخت باینری │
|
||||
│ │ دسترسی فروشگاه تخفیفی │
|
||||
│ │ دسترسی فیچرهای باشگاه │
|
||||
│ │ کسب کمیسیون هفتگی │
|
||||
└─────────────────────┴────────────────────────┘
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A["ورود به سایت"] --> B["ثبتنام — موبایل + OTP"]
|
||||
B --> C["تکمیل پروفایل"]
|
||||
C --> D{"مسیر؟"}
|
||||
|
||||
D -->|عادی| E["🛒 خرید از فروشگاه\nمشاهده بلاگ\nاستفاده از خدمات"]
|
||||
|
||||
D -->|باشگاه| F["🏆 خرید پکیج طلایی 56M"]
|
||||
F --> G["امضای قرارداد OTP"]
|
||||
G --> H["فعالسازی 25.2M"]
|
||||
H --> I["عضویت درخت باینری"]
|
||||
I --> J["دسترسی فروشگاه تخفیفی\nفیچرهای باشگاه\nکمیسیون هفتگی"]
|
||||
```
|
||||
|
||||
---
|
||||
@@ -36,28 +28,16 @@
|
||||
|
||||
### ۲.۱ فلوی ثبتنام
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A["صفحه ثبتنام"] --> B["ورود شماره موبایل"]
|
||||
B --> C["ارسال OTP\nKavenegar SMS API"]
|
||||
C --> D["تأیید کد OTP"]
|
||||
D -->|کاربر جدید| E["ساخت User\n+ JWT Token"]
|
||||
D -->|کاربر موجود| F["ورود\n+ JWT Token"]
|
||||
```
|
||||
صفحه ثبتنام
|
||||
│
|
||||
▼
|
||||
ورود شماره موبایل
|
||||
│
|
||||
▼
|
||||
ارسال OTP (Kavenegar SMS API)
|
||||
│
|
||||
▼
|
||||
تأیید کد OTP
|
||||
│
|
||||
├─→ کاربر جدید: ساخت User + JWT Token
|
||||
└─→ کاربر موجود: ورود + JWT Token
|
||||
|
||||
JWT Claims:
|
||||
• UserId
|
||||
• PhoneNumber
|
||||
• IsClubMember (bool)
|
||||
• Roles[] (Admin, Customer)
|
||||
• ReferralCode
|
||||
```
|
||||
**JWT Claims:** `UserId`, `PhoneNumber`, `IsClubMember`, `Roles[]`, `ReferralCode`
|
||||
|
||||
### ۲.۲ اصلاحات ثبتنام
|
||||
|
||||
@@ -76,16 +56,15 @@ JWT Claims:
|
||||
|
||||
### ۳.۱ مشکل قبلی
|
||||
|
||||
```
|
||||
قبل:
|
||||
Admin و Customer هر دو از یک DbContext و Identity استفاده میکردند
|
||||
یک ادمین میتوانست به صورت Customer هم ظاهر شود ← تداخل Claims
|
||||
```mermaid
|
||||
flowchart LR
|
||||
subgraph BEFORE["قبل — مشکل"]
|
||||
A1["Admin + Customer"] --> A2["یک DbContext\nیک Identity\nتداخل Claims"]
|
||||
end
|
||||
|
||||
بعد (اصلاحشده):
|
||||
✅ ICurrentUserService → تشخیص دقیق نقش فعلی
|
||||
✅ جداسازی Authorization Policy
|
||||
✅ Admin claims فقط در BackOffice
|
||||
✅ Customer claims فقط در FrontOffice
|
||||
subgraph AFTER["بعد — اصلاحشده ✅"]
|
||||
B1["ICurrentUserService"] --> B2["جداسازی Policy\nAdmin → BackOffice\nCustomer → FrontOffice"]
|
||||
end
|
||||
```
|
||||
|
||||
### ۳.۲ ICurrentUserService
|
||||
@@ -110,29 +89,16 @@ public interface ICurrentUserService {
|
||||
|
||||
### ۴.۱ فلوی امضای قرارداد
|
||||
|
||||
```
|
||||
خرید پکیج طلایی → Redirect به صفحه قرارداد
|
||||
│
|
||||
▼
|
||||
نمایش Modal غیرقابلبستهشدن
|
||||
│
|
||||
▼
|
||||
ReadContract RPC → نمایش متن قرارداد (Markdown/HTML)
|
||||
│
|
||||
▼
|
||||
کاربر باید تا انتهای متن اسکرول کند
|
||||
│
|
||||
▼
|
||||
فعال شدن دکمه "ارسال کد تأیید"
|
||||
│
|
||||
▼
|
||||
RequestContractOtp → ارسال SMS
|
||||
│
|
||||
▼
|
||||
ورود کد ← VerifyContractOtp
|
||||
│
|
||||
├─→ معتبر: AcceptContract → فعالسازی عضویت
|
||||
└─→ نامعتبر: پیام خطا (حداکثر ۵ تلاش)
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A["خرید پکیج طلایی\nRedirect به صفحه قرارداد"] --> B["نمایش Modal\nغیرقابلبستهشدن"]
|
||||
B --> C["ReadContract RPC\nنمایش متن قرارداد"]
|
||||
C --> D["اسکرول تا انتها"]
|
||||
D --> E["فعال شدن دکمه\nارسال کد تأیید"]
|
||||
E --> F["RequestContractOtp\nارسال SMS"]
|
||||
F --> G["ورود کد\nVerifyContractOtp"]
|
||||
G -->|معتبر| H["✅ AcceptContract\nفعالسازی عضویت"]
|
||||
G -->|نامعتبر| I["❌ پیام خطا\nحداکثر ۵ تلاش"]
|
||||
```
|
||||
|
||||
### ۴.۲ ذخیرهسازی قرارداد
|
||||
@@ -206,20 +172,12 @@ else
|
||||
|
||||
## ۷. کدهای معرف (Referral)
|
||||
|
||||
```
|
||||
هر عضو باشگاه → یک ReferralCode یکتا
|
||||
لینک: https://foursat.ir/register?ref={ReferralCode}
|
||||
|
||||
ثبتنام با لینک:
|
||||
│
|
||||
▼
|
||||
ذخیره ReferrerId در پروفایل کاربر جدید
|
||||
│
|
||||
▼
|
||||
هنگام خرید پکیج → زیرمجموعه Referrer در درخت باینری
|
||||
│
|
||||
▼
|
||||
Referrer → دریافت bonus (طبق شرایط باشگاه)
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A["هر عضو باشگاه\nیک ReferralCode یکتا"] --> B["لینک:\nhttps://foursat.ir/register?ref=CODE"]
|
||||
B --> C["ثبتنام با لینک\nذخیره ReferrerId"]
|
||||
C --> D["خرید پکیج\nزیرمجموعه Referrer در درخت"]
|
||||
D --> E["Referrer\nدریافت bonus"]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user