# 📚 FourSat Data Migration Tool - Index

## نگاه اجمالی

این پروژه یک ابزار **یکبار مصرف** برای مهاجرت داده‌های دیتابیس از ساختار قدیمی به جدید است.

**تعداد کل جداول:** 33  
**زمان تخمینی:** 5-10 دقیقه  
**وضعیت:** ✅ آماده برای Production

---

## 📁 ساختار پروژه

```
DataMigration/
│
├── 📖 مستندات (5 فایل)
│   ├── SUMMARY.md                    ⭐ شروع از اینجا
│   ├── QUICK-START.md               🚀 راهنمای سریع (3 قدم)
│   ├── README.md                     📖 راهنمای کامل
│   ├── TABLE-MAPPINGS.md             📋 لیست 33 جدول
│   └── POST-MIGRATION-TRANSFORMATION.md  🔄 Binary tree transformation
│
└── 💻 کد (FourSat.DataMigration/)
    ├── Program.cs                    # Entry point
    ├── appsettings.json              # 33 table mappings ✅
    ├── Models/
    │   └── MigrationModels.cs        # Settings, Mapping, QueueItem
    ├── Services/
    │   └── MigrationService.cs       # Migration + Post-Migration logic
    └── Scripts/
        └── PostMigration_DataTransformation.sql  # Binary tree conversion
```

---

## 🎯 راهنمای سریع

### برای کاربران عجول (3 دقیقه):
👉 **[QUICK-START.md](QUICK-START.md)** - 3 قدم ساده

### برای خواندن کامل (10 دقیقه):
👉 **[SUMMARY.md](SUMMARY.md)** - خلاصه کامل پروژه

### برای جزئیات کامل (30 دقیقه):
👉 **[README.md](README.md)** - راهنمای جامع

---

## 📋 مستندات

### 1. [SUMMARY.md](SUMMARY.md) ⭐ **شروع از اینجا**
**307 خط** - خلاصه کامل پروژه
- ✅ وضعیت فعلی
- ✅ آنچه انجام شد
- ✅ ساختار پروژه
- ✅ فیچرهای پیاده‌سازی شده
- ✅ نحوه استفاده (3 قدم)
- ✅ خروجی مورد انتظار
- ✅ چک‌لیست آمادگی
- ✅ آمار نهایی

**زمان مطالعه:** 5-10 دقیقه  
**مخاطب:** همه

---

### 2. [QUICK-START.md](QUICK-START.md) 🚀
**147 خط** - راهنمای سریع 3 قدمی
- قدم 1: ویرایش appsettings.json
- قدم 2: اجرای Migration
- قدم 3: بررسی Logs
- عیب‌یابی سریع
- تنظیمات پیشرفته

**زمان مطالعه:** 3 دقیقه  
**مخاطب:** کسانی که می‌خواهند سریع شروع کنند

---

### 3. [README.md](README.md) 📖
**425 خط** - راهنمای کامل و جامع
- نگاه کلی
- ساختار پروژه
- تنظیمات (`appsettings.json`)
- نحوه اجرا
- جریان کار (Workflow)
- Retry Logic
- Error Handling
- مثال خروجی
- عیب‌یابی
- FAQ

**زمان مطالعه:** 15-20 دقیقه  
**مخاطب:** Developers، DevOps

---

### 4. [TABLE-MAPPINGS.md](TABLE-MAPPINGS.md) 📋
**230 خط** - لیست کامل 33 جدول
- جداول با تغییر نام (10 جدول)
- جداول بدون تغییر نام (23 جدول)
- ترتیب پیشنهادی Migration
- تغییرات ساختاری (Binary Tree)
- Configuration کامل
- چک‌لیست قبل از Migration
- آمار تخمینی

**زمان مطالعه:** 10 دقیقه  
**مخاطب:** Database Admins، Developers

---

### 5. [POST-MIGRATION-TRANSFORMATION.md](POST-MIGRATION-TRANSFORMATION.md) 🔄
**248 خط** - توضیح تبدیل Binary Tree
- تغییرات اعمال شده
- جریان کار (بروزرسانی شده)
- تنظیمات جدید
- خروجی Migration (قبل/بعد)
- Validation Checks
- خطاها و عیب‌یابی
- غیرفعال کردن Transformation
- آمار نهایی
- تغییرات کد

**زمان مطالعه:** 10 دقیقه  
**مخاطب:** Developers که می‌خواهند Binary Tree را درک کنند

---

## 💻 فایل‌های کد

### 1. `FourSat.DataMigration/Program.cs`
**48 خط** - Entry point با Serilog hosting
```csharp
// Setup Serilog
// Configure DI
// Run MigrationService
```

---

### 2. `FourSat.DataMigration/appsettings.json`
**75 خط** - تنظیمات کامل
```json
{
  "ConnectionStrings": { /* Source + Target */ },
  "MigrationSettings": { /* BatchSize, Retry, etc. */ },
  "TableMappings": { /* 33 table mappings */ },
  "Serilog": { /* Console + File */ }
}
```

---

### 3. `FourSat.DataMigration/Models/MigrationModels.cs`
**39 خط** - Data models
```csharp
public class MigrationSettings { ... }
public class TableMapping { ... }
public class QueueItem { ... }
```

---

### 4. `FourSat.DataMigration/Services/MigrationService.cs`
**288 خط** - Migration engine اصلی
```csharp
// GetSourceTablesAsync: کشف جداول
// ApplyTableMappings: نگاشت نام‌ها
// PopulateRecordCountsAsync: شمارش رکوردها
// MigrateTableAsync: Batch processing
// RunPostMigrationTransformationAsync: Binary tree conversion
```

**فیچرها:**
- ✅ Queue-based processing
- ✅ Concurrent tables (3 همزمان)
- ✅ Retry with Polly (5 attempts)
- ✅ Batch processing (1000 records)
- ✅ IDENTITY_INSERT handling
- ✅ Progress tracking
- ✅ Post-migration transformation

---

### 5. `FourSat.DataMigration/Scripts/PostMigration_DataTransformation.sql`
**175 خط** - Binary tree transformation
```sql
-- Step 1: Validate (max 2 children)
-- Step 2: Copy ParentId → NetworkParentId
-- Step 3: Assign LegPosition (Left/Right)
-- Step 4: Fix orphaned nodes
-- Step 5: Validate binary tree integrity
-- Step 6: Output statistics
```

**Transaction-safe:** ROLLBACK در صورت validation failure

---

## 📊 آمار پروژه

| مورد | تعداد/مقدار |
|------|-------------|
| **کل فایل‌های مستندات** | 5 (md) |
| **کل فایل‌های کد** | 5 (cs, json, sql, csproj) |
| **خطوط مستندات** | ~1,600 |
| **خطوط کد** | ~625 |
| **تعداد جداول** | 33 |
| **جداول با Rename** | 10 |
| **NuGet Packages** | 8 |
| **Build Status** | ✅ موفق |
| **خطا** | 0 |
| **هشدار** | 0 |

---

## 🔄 جریان کار Migration

```
1. ویرایش appsettings.json
   ↓
2. dotnet run
   ↓
3. کشف 33 جدول از Source
   ↓
4. Apply mappings (10 rename + 23 keep)
   ↓
5. Migrate با Batch + Retry
   ├─ 3 table همزمان
   ├─ 1000 record per batch
   └─ 5 retry attempts
   ↓
6. Post-Migration Transformation
   ├─ ParentId → NetworkParentId
   ├─ LegPosition assignment
   └─ Binary tree validation
   ↓
7. گزارش نهایی + Statistics
```

---

## ✅ چک‌لیست استفاده

### قبل از شروع
- [ ] مطالعه [SUMMARY.md](SUMMARY.md)
- [ ] مطالعه [QUICK-START.md](QUICK-START.md)
- [ ] Backup از Target database

### تنظیمات
- [ ] ویرایش `SourceDatabase` connection string
- [ ] ویرایش `TargetDatabase` connection string
- [ ] بررسی `TableMappings` (33 جدول)
- [ ] تست اتصال به هر دو database

### اجرا
- [ ] `dotnet build` (بدون خطا)
- [ ] `dotnet run`
- [ ] مشاهده progress در console
- [ ] بررسی Logs در `Logs/migration-*.txt`

### بعد از Migration
- [ ] بررسی تعداد رکوردها (Source = Target)
- [ ] بررسی Binary tree integrity
- [ ] تست Application با database جدید
- [ ] Archive کردن Source database قدیمی

---

## 🆘 پشتیبانی

### خطاهای رایج
- **Login failed**: [README.md - Error Handling](README.md#error-handling)
- **Table not found**: [TABLE-MAPPINGS.md](TABLE-MAPPINGS.md)
- **Binary tree violation**: [POST-MIGRATION-TRANSFORMATION.md](POST-MIGRATION-TRANSFORMATION.md)
- **Timeout**: [QUICK-START.md - عیب‌یابی](QUICK-START.md#عیب-یابی-سریع)

### منابع
- 📖 **راهنمای کامل**: [README.md](README.md)
- 🚀 **شروع سریع**: [QUICK-START.md](QUICK-START.md)
- 📋 **لیست جداول**: [TABLE-MAPPINGS.md](TABLE-MAPPINGS.md)

---

## 🎉 وضعیت نهایی

| مورد | وضعیت |
|------|-------|
| **کد** | ✅ کامل |
| **مستندات** | ✅ کامل |
| **Build** | ✅ موفق |
| **Table Mappings** | ✅ 33/33 |
| **Post-Migration** | ✅ پیاده‌سازی شده |
| **Logging** | ✅ فعال |
| **Retry** | ✅ پیاده‌سازی شده |
| **Error Handling** | ✅ کامل |

---

**نسخه:** 1.0  
**تاریخ:** December 6, 2025  
**آماده برای:** Production ✅  
**نیاز به:** Username/Password در appsettings.json

---

## 🚀 مرحله بعدی

**همین الان:**
1. [QUICK-START.md](QUICK-START.md) را بخوانید (3 دقیقه)
2. `appsettings.json` را ویرایش کنید (2 دقیقه)
3. `dotnet run` را اجرا کنید

**تمام! 🎉**
