update
This commit is contained in:
@@ -0,0 +1,317 @@
|
||||
# 📚 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` را اجرا کنید
|
||||
|
||||
**تمام! 🎉**
|
||||
Reference in New Issue
Block a user