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:
masoodafar-web
2026-02-18 23:36:39 +03:30
parent aef6861e21
commit 1b04ba5326
12 changed files with 544 additions and 739 deletions
+45 -87
View File
@@ -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"]
```
---