# 📋 لیست کامل جداول و Mapping ها

## تعداد کل: 33 جدول

### جداول با تغییر نام (10 جدول)

این جداول در دیتابیس قدیمی نام‌گذاری اشتباه دارند و در دیتابیس جدید اصلاح می‌شوند:

| # | نام قدیمی (Source) | نام جدید (Target) | دلیل تغییر |
|---|-------------------|-------------------|-----------|
| 1 | `Categorys` | `Categories` | جمع صحیح Category |
| 2 | `FactorDetailss` | `FactorDetails` | Detail تکی نیست، s اضافی |
| 3 | `ProductGalleryss` | `ProductGalleries` | Gallery → Galleries، s اضافی |
| 4 | `ProductImagess` | `ProductImages` | Image → Images، s اضافی |
| 5 | `Productss` | `Products` | s اضافی |
| 6 | `PruductCategorys` | `ProductCategories` | Pruduct → Product + جمع صحیح |
| 7 | `PruductTags` | `ProductTags` | Pruduct → Product |
| 8 | `Transactionss` | `Transactions` | s اضافی |
| 9 | `UserAddresss` | `UserAddresses` | Address → Addresses، s اضافی |
| 10 | `UserCartss` | `UserCarts` | s اضافی |

---

### جداول بدون تغییر نام (23 جدول)

این جداول نام‌گذاری صحیحی دارند:

| # | نام جدول |
|---|----------|
| 1 | `ClubFeatures` |
| 2 | `ClubMembershipHistories` |
| 3 | `ClubMemberships` |
| 4 | `CommissionPayoutHistories` |
| 5 | `Contracts` |
| 6 | `NetworkMembershipHistories` |
| 7 | `NetworkWeeklyBalances` |
| 8 | `OtpTokens` |
| 9 | `Packages` |
| 10 | `Roles` |
| 11 | `SystemConfigurationHistories` |
| 12 | `SystemConfigurations` |
| 13 | `Tags` |
| 14 | `UserClubFeatures` |
| 15 | `UserCommissionPayouts` |
| 16 | `UserContracts` |
| 17 | `UserOrders` |
| 18 | `UserRoles` |
| 19 | `Users` |
| 20 | `UserWalletChangeLogs` |
| 21 | `UserWallets` |
| 22 | `WeeklyCommissionPools` |
| 23 | `WorkerExecutionLogs` |

---

## ترتیب پیشنهادی برای Migration

### مرحله 1: جداول پایه (Independent Tables)
بدون FK، می‌توانند اول migrate شوند:

1. `Roles`
2. `Tags`
3. `SystemConfigurations`
4. `ClubFeatures`
5. `Packages`

### مرحله 2: جداول کاربری
FK به Users:

6. `Users` ⚠️ **مهم**: پس از migration → Post-Migration Transformation
7. `OtpTokens`
8. `UserRoles`
9. `UserWallets`
10. `UserWalletChangeLogs`
11. `UserAddresses`
12. `UserCarts`

### مرحله 3: جداول محصولات
FK به Categories و Products:

13. `Categories`
14. `Products`
15. `ProductImages`
16. `ProductGalleries`
17. `ProductCategories`
18. `ProductTags`

### مرحله 4: جداول عضویت و کمیسیون

19. `ClubMemberships`
20. `ClubMembershipHistories`
21. `NetworkWeeklyBalances`
22. `NetworkMembershipHistories`
23. `CommissionPayoutHistories`
24. `UserCommissionPayouts`
25. `WeeklyCommissionPools`

### مرحله 5: جداول قراردادها و تراکنش‌ها

26. `Contracts`
27. `UserContracts`
28. `Transactions`
29. `FactorDetails`

### مرحله 6: جداول کاربری پیشرفته

30. `UserOrders`
31. `UserClubFeatures`

### مرحله 7: جداول سیستمی

32. `SystemConfigurationHistories`
33. `WorkerExecutionLogs`

---

## تغییرات ساختاری مهم

### 1. Users Table
**تبدیل Binary Tree:**
- **قدیمی**: `ParentId` (یک Parent ساده)
- **جدید**: `NetworkParentId` + `LegPosition` (Binary Tree)

**Post-Migration Script:**
```sql
-- Script: Scripts/PostMigration_DataTransformation.sql
-- اجرا: خودکار بعد از migration (اگر RunPostMigrationTransformation=true)
```

**چه کاری انجام می‌دهد:**
1. ✅ بررسی: آیا Parent ها بیشتر از 2 فرزند دارند؟ (ROLLBACK اگر دارند)
2. ✅ کپی: `ParentId` → `NetworkParentId`
3. ✅ تخصیص: `LegPosition` (فرزند اول=Left, فرزند دوم=Right)
4. ✅ حل Orphan ها: Parent نداشته → `NetworkParentId=NULL`
5. ✅ Validation نهایی: Binary Tree درست است؟
6. ✅ آمار: تعداد کل، Left/Right distribution

---

## Configuration در appsettings.json

```json
{
  "TableMappings": {
    "Categorys": "Categories",
    "ClubFeatures": "ClubFeatures",
    "ClubMembershipHistories": "ClubMembershipHistories",
    "ClubMemberships": "ClubMemberships",
    "CommissionPayoutHistories": "CommissionPayoutHistories",
    "Contracts": "Contracts",
    "FactorDetailss": "FactorDetails",
    "NetworkMembershipHistories": "NetworkMembershipHistories",
    "NetworkWeeklyBalances": "NetworkWeeklyBalances",
    "OtpTokens": "OtpTokens",
    "Packages": "Packages",
    "ProductGalleryss": "ProductGalleries",
    "ProductImagess": "ProductImages",
    "Productss": "Products",
    "PruductCategorys": "ProductCategories",
    "PruductTags": "ProductTags",
    "Roles": "Roles",
    "SystemConfigurationHistories": "SystemConfigurationHistories",
    "SystemConfigurations": "SystemConfigurations",
    "Tags": "Tags",
    "Transactionss": "Transactions",
    "UserAddresss": "UserAddresses",
    "UserCartss": "UserCarts",
    "UserClubFeatures": "UserClubFeatures",
    "UserCommissionPayouts": "UserCommissionPayouts",
    "UserContracts": "UserContracts",
    "UserOrders": "UserOrders",
    "UserRoles": "UserRoles",
    "Users": "Users",
    "UserWalletChangeLogs": "UserWalletChangeLogs",
    "UserWallets": "UserWallets",
    "WeeklyCommissionPools": "WeeklyCommissionPools",
    "WorkerExecutionLogs": "WorkerExecutionLogs"
  }
}
```

---

## چک‌لیست قبل از Migration

### 1. ساختار Target Database
- [ ] همه 33 جدول در Target ایجاد شده‌اند
- [ ] Schema صحیح است: `[CMS].[TableName]`
- [ ] Column ها مطابقت دارند
- [ ] `Users` دارای `NetworkParentId` و `LegPosition` است

### 2. Connection Strings
- [ ] `SourceDatabase`: IP, Port, Username, Password صحیح
- [ ] `TargetDatabase`: IP, Port, Username, Password صحیح
- [ ] Firewall: IP شما مجاز است
- [ ] SQL User دسترسی `db_datareader` (Source) دارد
- [ ] SQL User دسترسی `db_datawriter` (Target) دارد

### 3. تنظیمات Migration
- [ ] `BatchSize`: مناسب با Network شما
- [ ] `MaxConcurrentTables`: 3 (پیشنهادی)
- [ ] `RunPostMigrationTransformation`: true
- [ ] `TableMappings`: همه 33 جدول لیست شده

### 4. Backup
- [ ] ⚠️ **حتماً** Target Database را Backup بگیرید
- [ ] فضای کافی روی Disk دارید

---

## آمار تخمینی

بر اساس backup file (`dbbkup/CMS.sql`):

| دسته | تعداد جداول | تخمین رکوردها |
|------|------------|---------------|
| **Core** (Users, Roles, etc.) | 5 | ~2,000 |
| **Products** (Categories, Products, etc.) | 8 | ~5,000 |
| **Club & Network** | 7 | ~10,000 |
| **Transactions & Orders** | 6 | ~20,000 |
| **System & Logs** | 7 | ~15,000 |
| **جمع کل** | **33** | **~50,000+** |

**زمان تخمینی:** 5-10 دقیقه (بسته به Network)

---

**نسخه:** 1.0  
**تاریخ:** December 6, 2025  
**وضعیت:** ✅ آماده برای Production
