docs: Phase 10 — DataMigration + EF Staging + PackagePurchaseDialog + UI Fixes
Updated 8 docs: - CHANGELOG: Phase 10a-d (DataMigration tool, EF staging migrations, PackagePurchaseDialog, 4 UI fixes) - PAYMENT-FINANCE: Rial→Toman conversion chain documented, PackagePurchaseDialog status - TECH-02: Added PackagePurchaseDialog to folder structure + status table - TECH-04: DataMigration tool features (smart retry, FK handling, fallback tables), EF staging - PACKAGE-TASKS: Phase 10 graph, NuGet v0.0.189, T4.1+T4.2 marked ✅ - BIZ-PACKAGE: v6→v7, commits updated, T4.1+T4.2 marked ✅ - INDEX: Updated last-update + R3 description - ROADMAP: Progress bars updated, DONE section + NOW section refreshed
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
# 📦 سیستم مبتنی بر پکیج (Package-Based System)
|
||||
|
||||
> **وضعیت:** پیادهسازی کد تکمیل — **فاز ۰-۹ ✅** | تست + استقرار باقیمانده
|
||||
> **وضعیت:** پیادهسازی کد تکمیل — **فاز ۰-۱۰ ✅** | تست نهایی باقیمانده
|
||||
> **تاریخ بروزرسانی:** ۸ اسفند ۱۴۰۴
|
||||
> **نسخه:** v6 (آستانه موجودی + SP Worker + History Tables + UI Guidance)
|
||||
> **تاثیرگذاری:** زیاد — **۹۵+** تغییر در ۶ لایه (۵۱ اصلی + ۴۴ سایدافکت)
|
||||
> **کامیتها:** `8b9c317` (Phase 0) → `ae92ab8` (Phase 1) → `a9cd2fd` (Phase 1.5) → `8e5c7c5` (Phase 2) → `ccb938e` (Phase 3) → `0002a5a` (Phase 4) → `a1024a3` (Q24+Q26) → `fdbb91d` (Q27) → `10d2ca2` (Rename+Interceptor+Migration)
|
||||
> **نسخه:** v7 (DataMigration + EF Staging + PackagePurchaseDialog + UI Fixes)
|
||||
> **تاثیرگذاری:** زیاد — **۱۰۰+** تغییر در ۶ لایه (۵۱ اصلی + ۴۴ سایدافکت + ۵ استقرار)
|
||||
> **کامیتها:** `8b9c317` (Phase 0) → `ae92ab8` (Phase 1) → `a9cd2fd` (Phase 1.5) → `8e5c7c5` (Phase 2) → `ccb938e` (Phase 3) → `0002a5a` (Phase 4) → `a1024a3` (Q24+Q26) → `fdbb91d` (Q27) → `10d2ca2` (Rename+Interceptor+Migration) → `a3681a8` (PackagePurchaseDialog) → `3c1a8ff` (UI Fixes)
|
||||
|
||||
---
|
||||
|
||||
@@ -1431,8 +1431,8 @@ SELECT 'Balances', COUNT(*) FROM "CMS"."NetworkWeeklyBalances" WHERE "PackageId"
|
||||
|
||||
| تسک | شرح | v3? |
|
||||
|-----|----- |-----|
|
||||
| **T4.1** | FrontOffice: کاشیهای پکیج (داینامیک) | |
|
||||
| **T4.2** | FrontOffice: مدال پرداخت (دایا+مستقیم / فقط مستقیم) | |
|
||||
| **T4.1** | FrontOffice: کاشیهای پکیج (داینامیک) — ✅ `PackagePurchaseDialog.razor` | |
|
||||
| **T4.2** | FrontOffice: مدال پرداخت (دایا+مستقیم / فقط مستقیم) — ✅ Step 2 in dialog | |
|
||||
| **T4.3** | FrontOffice: MyPackages — re-purchase | |
|
||||
| **T4.4** | FrontOffice: ActivationSection + Contract — داینامیک | |
|
||||
| **T4.5** | BackOffice: CRUD پکیج — فیلدهای جدید (۱۱ فیلد) | 🔄 |
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# 💰 سیستم مالی، پرداخت و درگاهها
|
||||
|
||||
> **منابع ادغامشده:** `payment-gateway.md`, `payment-architecture-pyms.md`, `daya-loan-integration.md`, `manual-payment-system.md`, `discount-shop-business.md`
|
||||
> **آخرین بروزرسانی:** اسفند ۱۴۰۴ (بروزرسانی: فیکس WalletChangeLog + validation کیفپول اعتباری + نامگذاری جدید کیفپولها)
|
||||
> **آخرین بروزرسانی:** اسفند ۱۴۰۴ (بروزرسانی: فیکس Toman/Rial + PackagePurchaseDialog + اعمال migrations بر staging)
|
||||
|
||||
---
|
||||
|
||||
@@ -63,6 +63,12 @@ flowchart TD
|
||||
| `Sandbox` | `true` (staging) / `false` (production) |
|
||||
| `Currency` | IRR (ریال → تبدیل به تومان در UI) |
|
||||
|
||||
> **✅ توضیح تبدیل Rial → Toman:**
|
||||
> - **DB:** `Package.Price` به **ریال** ذخیره میشود (`/// قیمت پکیج (ریال)`)
|
||||
> - **CMS → ZarinPal:** مستقیم ریال ارسال میشود (`Amount = package.Price` → `amountInRials = (long)request.Amount`)
|
||||
> - **FrontOffice UI:** `PackageDto.FormattedPrice` = `Price / 10` + «تومان» (فیکس شد در `3c1a8ff`)
|
||||
> - **باگ قبلی:** FO مقدار خام ریال را با برچسب «تومان» نمایش میداد (مثلاً ۵۶۰،۰۰۰،۰۰۰ تومان بجای ۵۶،۰۰۰،۰۰۰ تومان)
|
||||
|
||||
> **تنظیمات محیطی:**
|
||||
> - `appsettings.json` + `appsettings.Staging.json`: `UseSandbox: true` (تست)
|
||||
> - `appsettings.Production.json`: `UseSandbox: false` (واقعی)
|
||||
@@ -244,6 +250,8 @@ service PaymentService {
|
||||
| Pool هفتگی | ✅ کامل | SP + Hangfire |
|
||||
| WalletChangeLog | ✅ فیکس شده | لاگ تغییرات کیفپول در ۳ هندلر اضافه شد |
|
||||
| Validation کیفپول اعتباری | ✅ فیکس شده | ارور اگر موجودی کافی نباشد |
|
||||
| Toman/Rial تبدیل نمایش | ✅ فیکس شده | `Price / 10` در FO — درگاه ریال میگیرد، UI تومان نمایش میدهد |
|
||||
| PackagePurchaseDialog | ✅ کامل | دیالوگ داینامیک کاشیای با انتخاب روش پرداخت |
|
||||
| پرداخت دستی | ⬜ طراحی | نیاز به تصمیم مدیریت |
|
||||
| Refund | ⬜ طراحی | فقط در PYMS تعریفشده |
|
||||
| کیفپول جادویی (Magic) | ✅ کامل | فاز 1-6 پیادهسازی شده — Production فعال |
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
> **تاریخ تجمیع:** اسفند ۱۴۰۴
|
||||
> **تعداد فایلهای مبدأ:** ۵۳ فایل (~۳۲,۰۰۰ خط)
|
||||
> **تعداد فایلهای نهایی:** ۲۲ فایل (۱۵ اصلی + ۷ roadmap/business)
|
||||
> **آخرین بروزرسانی:** اسفند ۱۴۰۴ (تحول پکیجبیس فاز ۰-۹ + Q24-Q30 + History Interceptor + Rename)
|
||||
> **آخرین بروزرسانی:** اسفند ۱۴۰۴ (فاز ۱۰: DataMigration + EF Staging + PackagePurchaseDialog + UI Fixes | NuGet v0.0.189)
|
||||
|
||||
---
|
||||
|
||||
@@ -81,7 +81,7 @@ totalDoc/
|
||||
|---|------|--------|--------|
|
||||
| R1 | [MAGIC-WALLET-SPEC](../roadmap/MAGIC-WALLET-SPEC.md) | کیفپول جادویی — مشخصات | State Machine، ضریب ×2.5، سقف 100M، قوانین، API، مدل داده |
|
||||
| R2 | [MAGIC-WALLET-PLAN](../roadmap/MAGIC-WALLET-PLAN.md) | کیفپول جادویی — پلن | ۶ فاز، **فاز 1-6 تکمیل ✅** |
|
||||
| R3 | [PACKAGE-TRANSFORMATION-TASKS](../roadmap/PACKAGE-TRANSFORMATION-TASKS.md) | تحول پکیجبیس — تسکها | ۹ فاز، **فاز 0-9 تکمیل ✅**، تست + deploy در انتظار |
|
||||
| R3 | [PACKAGE-TRANSFORMATION-TASKS](../roadmap/PACKAGE-TRANSFORMATION-TASKS.md) | تحول پکیجبیس — تسکها | ۱۰ فاز، **فاز 0-10 تکمیل ✅**، تست + deploy در انتظار |
|
||||
| R4 | [PACKAGE-TRANSFORMATION-UX](../roadmap/PACKAGE-TRANSFORMATION-UX.md) | تاثیر بر UX | تحلیل تاثیر بر FrontOffice + BackOffice |
|
||||
| R5 | [FEATURE-BACKLOG](../roadmap/FEATURE-BACKLOG.md) | بکلاگ فیچرها | ۱۲ RPC آماده بدون UI، اولویتبندیشده |
|
||||
| R6 | [BIZ-PACKAGE-BASED-SYSTEM](../business/BIZ-PACKAGE-BASED-SYSTEM.md) | طراحی سیستم پکیجبیس | v6، ۳۰ تصمیم (Q1-Q30) + ۵۱ تغییر + ۴۴ سایدافکت |
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# 📜 تاریخچه کارهای انجامشده
|
||||
|
||||
> **همه فعالیتهای پروژه به صورت بولت با توضیح یکخطی و درصد تکمیل**
|
||||
> **آخرین بروزرسانی:** اسفند ۱۴۰۴ (بروزرسانی: فاز ۹ — Q24-Q30 + Rename + History Interceptor + Migration | NuGet v0.0.188)
|
||||
> **آخرین بروزرسانی:** اسفند ۱۴۰۴ (بروزرسانی: فاز ۱۰ — DataMigration + EF Staging + PackagePurchaseDialog + UI Fixes | NuGet v0.0.189)
|
||||
|
||||
---
|
||||
|
||||
@@ -10,12 +10,12 @@
|
||||
| حوزه | تعداد آیتم | تکمیلشده | درصد کل |
|
||||
|------|-----------|----------|---------|
|
||||
| **BackOffice** | 67 | 67 | **100%** |
|
||||
| **FrontOffice** | 47 | 47 | **100%** |
|
||||
| **FrontOffice** | 54 | 54 | **100%** |
|
||||
| **CMS Core** | 82 | 82 | **100%** |
|
||||
| **Package-Based System** | 45 | 45 | **100%** |
|
||||
| **Package-Based System** | 52 | 52 | **100%** |
|
||||
| **Deployment** | 22 | 21 | **95%** |
|
||||
| **Migration** | 16 | 16 | **100%** |
|
||||
| **مجموع** | **279** | **278** | **99%** |
|
||||
| **Migration** | 21 | 21 | **100%** |
|
||||
| **مجموع** | **298** | **297** | **99%** |
|
||||
|
||||
---
|
||||
|
||||
@@ -114,6 +114,21 @@
|
||||
- ✅ NuGet bump 0.0.182 → 0.0.186 + local feed source
|
||||
- ✅ فیکس GwUrl پروداکشن — تصحیح از cms.kbs1.ir به cms.kbs2.ir
|
||||
|
||||
### Phase 10a: PackagePurchaseDialog — دیالوگ داینامیک خرید پکیج (اسفند ۱۴۰۴)
|
||||
- ✅ `PackagePurchaseDialog.razor` — دیالوگ ۲ مرحلهای: مرحله ۱ = کاشیهای پکیج (responsive grid)، مرحله ۲ = انتخاب روش پرداخت
|
||||
- ✅ حذف دیالوگ inline خرید «پکیج پایه» از `Index.razor` — جایگزین با دیالوگ داینامیک
|
||||
- ✅ بارگذاری پکیجها از `PackageService.GetAllPackagesAsync()` — نمایش عنوان + قیمت + ویژگیها
|
||||
- ✅ پشتیبانی از ۲ روش پرداخت: مستقیم (درگاه بانکی) + اعتبار دایا (فقط پکیج پایه + دور اول)
|
||||
- ✅ CSS کلاسهای جدید: `.pkg-tile`, `.pkg-tile-badge`, `.pkg-payment-option`
|
||||
- ✅ کامیت: `a3681a8` (FO)
|
||||
|
||||
### Phase 10b: ۴ فیکس UI پکیج (اسفند ۱۴۰۴)
|
||||
- ✅ فیکس Toman/Rial — قیمت از سرور به ریال میرسد، `FormattedPrice` حالا `Price / 10` میکند برای نمایش صحیح تومان
|
||||
- ✅ تغییر لیبل «ضریب تخفیف» → «ضریب اعتبار» در دیالوگ خرید + صفحه لیست پکیجها
|
||||
- ✅ دکمه بازگشت در مرحله انتخاب روش پرداخت — `MudIconButton ArrowForward` + `BackToList()` (قبلاً وجود داشت، تأیید شد)
|
||||
- ✅ رندر HTML در توضیحات پکیج — `@((MarkupString)pkg.Description)` بجای متن ساده
|
||||
- ✅ کامیت: `3c1a8ff` (FO)
|
||||
|
||||
### محتوا و ناوبری
|
||||
- ✅ بلاگ — لیست + جزئیات + pagination
|
||||
- ✅ صفحات سایت — About, Contact, FAQ, Terms, Privacy, Licenses
|
||||
@@ -219,6 +234,21 @@
|
||||
- ✅ Proto Package Unification — یک package مشترک
|
||||
- ✅ Binary Tree Reconstruction — از سیستم قدیم
|
||||
|
||||
### DataMigration Tool (اسفند ۱۴۰۴)
|
||||
- ✅ ابزار مستقل مهاجرت داده — .NET 9 Console + Dapper + Polly + Serilog
|
||||
- ✅ Smart Retry Policy — فقط خطاهای transient SQL (deadlock, timeout, transport) — نه خطاهای منطقی
|
||||
- ✅ FK Disable/Enable — `NOCHECK`/`CHECK` حول مهاجرت برای حل FK violation
|
||||
- ✅ TruncateTargetTables — حل مشکل duplicate key (IX_ClubMembership_UserId)
|
||||
- ✅ Fallback Table Name — اگر جدول مقصد rename شده (`UserWalletChangeLogs` → `UserWalletHistories`)
|
||||
- ✅ PostMigration SQL — همه مراحل با `IF COL_LENGTH` / `OBJECT_ID` guard شده
|
||||
- ✅ کامیتها: `0e8c6fd` → `8385c90` → `31cc464`
|
||||
|
||||
### EF Migration — Staging (اسفند ۱۴۰۴)
|
||||
- ✅ اعمال migrations روی DB استیجینگ KBS (`185.252.31.42,2019/KBS`) — موفق
|
||||
- ✅ اعمال migrations روی DB اپلیکیشن (`194.5.195.53,31433/Foursat`) — موفق
|
||||
- ✅ آخرین migration: `20260227024734_Q27_HistoryTables_And_RenameWalletHistory` (۵۵ migration مجموع)
|
||||
- ✅ حل خطای لاگین `Invalid column name 'FirstActivationDate'` — دو DB مختلف بودند
|
||||
|
||||
---
|
||||
|
||||
## ۶. مستندات (100% کامل)
|
||||
@@ -347,6 +377,39 @@
|
||||
- ✅ EF Migration `Q27_HistoryTables_And_RenameWalletHistory` — **RenameTable** (حفظ داده) + rename PK/FK/Index via sp_rename
|
||||
- ✅ NuGet: `0.0.187` → `0.0.188`
|
||||
|
||||
### Phase 10 — استقرار + DataMigration + UI خرید پکیج ✅
|
||||
|
||||
#### 10a: DataMigration Tool ✅ (Local — بدون remote)
|
||||
- ✅ ابزار مستقل مهاجرت داده — .NET 9 Console app + Dapper (bulk copy) + Polly (retry) + Serilog (logging)
|
||||
- ✅ مهاجرت ۱۸ جدول از DB پروداکشن (`185.252.31.42,2019/Foursat`) به استیجینگ (`KBS`)
|
||||
- ✅ Smart Retry — فقط خطاهای transient (deadlock/timeout/transport)، نه خطاهای منطقی
|
||||
- ✅ FK Disable/Enable — `ALTER TABLE NOCHECK/CHECK CONSTRAINT` حول هر مهاجرت
|
||||
- ✅ TruncateTargetTables — حل duplicate key (`IX_ClubMembership_UserId`) هنگام اجرای مجدد
|
||||
- ✅ Fallback Table Name — جدول مقصد rename شده؟ (`UserWalletChangeLogs` → `UserWalletHistories`)
|
||||
- ✅ PostMigration SQL — همه مراحل با `IF COL_LENGTH`/`OBJECT_ID` guard شده (سازگار با هر دو schema)
|
||||
- ✅ کامیتها: `0e8c6fd` → `8385c90` (MERGE fix) → `31cc464` (FK+truncate+PostMigration)
|
||||
|
||||
#### 10b: EF Migration Staging ✅
|
||||
- ✅ اعمال ۵۵ migration روی DB استیجینگ KBS (`185.252.31.42,2019;Database=KBS`)
|
||||
- ✅ اعمال ۵۵ migration روی DB اپلیکیشن (`194.5.195.53,31433;Database=Foursat`)
|
||||
- ✅ آخرین migration: `20260227024734_Q27_HistoryTables_And_RenameWalletHistory`
|
||||
- ✅ حل خطای لاگین: `Invalid column name 'FirstActivationDate'` — CMS به DB دیگری وصل بود
|
||||
|
||||
#### 10c: PackagePurchaseDialog — دیالوگ داینامیک خرید (FO:`a3681a8`)
|
||||
- ✅ `PackagePurchaseDialog.razor` — دیالوگ ۲ مرحلهای جایگزین دیالوگ hardcoded «پکیج پایه»
|
||||
- ✅ مرحله ۱: نمایش کاشیهای پکیج (responsive grid 2-3 ستونه) با عنوان + قیمت + ویژگیها + badge «پایه»
|
||||
- ✅ مرحله ۲: انتخاب روش پرداخت (مستقیم + اعتبار دایا) با خلاصه پکیج انتخابی
|
||||
- ✅ بارگذاری از `PackageService.GetAllPackagesAsync()` + `PackagePurchaseResult` record
|
||||
- ✅ محدودیت دایا: فقط `SupportsDayaPurchase && PurchaseCycleCount == 0`
|
||||
- ✅ CSS: `.pkg-tile`, `.pkg-tile-badge`, `.pkg-payment-option` در `site.css`
|
||||
- ✅ NuGet: `0.0.188` → `0.0.189`
|
||||
|
||||
#### 10d: ۴ فیکس UI پکیج (FO:`3c1a8ff`)
|
||||
- ✅ **Toman/Rial**: قیمت از سرور به ریال ← `FormattedPrice` حالا `Price / 10` برای نمایش صحیح تومان
|
||||
- ✅ **لیبل**: «ضریب تخفیف» → «ضریب اعتبار» (دیالوگ + صفحه لیست پکیجها)
|
||||
- ✅ **دکمه بازگشت**: وجود داشت (`ArrowForward` + `BackToList`) — تأیید عملکرد
|
||||
- ✅ **HTML Description**: `@((MarkupString)pkg.Description)` بجای متن ساده
|
||||
|
||||
---
|
||||
|
||||
## ۸. Timeline (جدول زمانی)
|
||||
@@ -367,3 +430,4 @@
|
||||
| اسفند ۱۴۰۴ (هفته ۴) | 📦 تحول پکیجبیس فاز ۰-۶ (Domain → Migration → Business → Package → CRUD → Commission per-pkg → Deprecation) | 97% |
|
||||
| اسفند ۱۴۰۴ (هفته ۵) | 📦 فاز 8e: گزارشهای پورسانت per-package (Proto + CMS + BO + FO) | 98% |
|
||||
| اسفند ۱۴۰۴ (هفته ۶) | 📦 فاز ۹: Q24-Q30 (آستانه + SP Worker + History Tables + UI Guidance + Rename + Interceptor + Migration) | 99% |
|
||||
| اسفند ۱۴۰۴ (هفته ۷) | 📦 فاز ۱۰: DataMigration Tool + EF Staging + PackagePurchaseDialog + UI Fixes (Toman/Rial + لیبل + HTML) | 99.5% |
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# 🗺️ نقشه راه، ریسکها و کارهای باقیمانده
|
||||
|
||||
> **Roadmap + Risk Register + Dependencies + Priorities**
|
||||
> **آخرین بروزرسانی:** اسفند ۱۴۰۴ (بروزرسانی: تحول پکیجبیس فاز ۰-۶ + per-package commission + deprecation cleanup)
|
||||
> **آخرین بروزرسانی:** اسفند ۱۴۰۴ (بروزرسانی: فاز ۱۰ — DataMigration + EF Staging + PackagePurchaseDialog + UI Fixes)
|
||||
|
||||
---
|
||||
|
||||
@@ -15,8 +15,8 @@ Club System ████████████████████
|
||||
E-Commerce ████████████████████████████████████████████████ 98%
|
||||
Payment ████████████████████████████████████████████████ 97%
|
||||
Magic Wallet ████████████████████████████████████████████████ 100%
|
||||
Package-Based ██████████████████████████████████████████████░░ 93%
|
||||
UI/UX █████████████████████████████████████████████░░░ 93%
|
||||
Package-Based ███████████████████████████████████████████████░░ 97%
|
||||
UI/UX ██████████████████████████████████████████████░░░ 95%
|
||||
Deployment ██████████████████████████████████████████████░░ 95%
|
||||
Documentation ████████████████████████████████████████████████ 100%
|
||||
```
|
||||
@@ -209,11 +209,12 @@ DONE (اسفند ۱۴۰۴):
|
||||
→ مرج پروداکشن هر ۳ ریپو (CMS + FO + BO) ✅
|
||||
→ اجرای Migration روی پروداکشن ✅
|
||||
→ 📦 تحول پکیجبیس فاز 0-6 ✅ (Domain → Migration → Business → Package → CRUD → Commission per-pkg → Deprecation)
|
||||
→ 📦 فاز ۹: Q24-Q30 + History + Rename + Interceptor ✅
|
||||
→ 📦 فاز ۱۰: DataMigration Tool + EF Staging + PackagePurchaseDialog + UI Fixes ✅
|
||||
|
||||
NOW (این ماه):
|
||||
→ 📦 فاز 7: UI (کاشیهای داینامیک + فیلتر پکیج + MyPackages)
|
||||
→ EF Migration نهایی
|
||||
→ تست کامل پروداکشن
|
||||
→ فیکس باگهای کشفشده در تست
|
||||
|
||||
NEXT (فروردین):
|
||||
→ Mobile Responsive (H2)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# 🔄 نقشهراه تحول پکیجبیس — تسکهای گامبهگام
|
||||
|
||||
> **وضعیت:** در حال اجرا — **فاز ۰-۹ (تکمیل کد) ✅** | NuGet v0.0.188 | تست باقیمانده
|
||||
> **وضعیت:** در حال اجرا — **فاز ۰-۱۰ (تکمیل کد + استقرار staging) ✅** | NuGet v0.0.189 | تست باقیمانده
|
||||
> **تاریخ:** ۱۴۰۴/۱۲/۰۸
|
||||
> **پیشنیاز:** [BIZ-PACKAGE-BASED-SYSTEM.md](../business/BIZ-PACKAGE-BASED-SYSTEM.md) **v6** (تکمیل Q24-Q30 + History + Rename)
|
||||
> **هدف:** شکستن **۴۸+ تغییر** به تسکهای اتمیک با ترتیب اجرا و وابستگیها
|
||||
@@ -41,9 +41,14 @@
|
||||
├─→ 9b: Q27 History entities ✅ CMS:`fdbb91d`
|
||||
├─→ 9c: Q28 UI Guidance ✅ FO:`474d364` BO:`6939780`
|
||||
└─→ 9d: Rename+Interceptor+Mig ✅ CMS:`10d2ca2`
|
||||
└─→ مرحله ۵: تست + استقرار (۳ روز) ⬜
|
||||
└─→ مرحله ۱۰: استقرار + DataMigration + UI
|
||||
├─→ 10a: DataMigration Tool ✅ Local: `0e8c6fd`→`31cc464`
|
||||
├─→ 10b: EF Staging Migrations ✅
|
||||
├─→ 10c: PackagePurchaseDialog ✅ FO:`a3681a8`
|
||||
└─→ 10d: UI Fixes (Rial/Toman+لیبل+HTML) ✅ FO:`3c1a8ff`
|
||||
└─→ مرحله ۵: تست + نهایی ⬜
|
||||
|
||||
مسیر بحرانی: ۰→۱→۱.۵→۲→۳→۴→UI→۹→۵ = ~۲۰ روز | انجامشده: ۰→9d (~۱۸ روز)
|
||||
مسیر بحرانی: ۰→۱→۱.۵→۲→۳→۴→UI→۹→۱۰→۵ = ~۲۲ روز | انجامشده: ۰→10d (~۲۰ روز)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# 🖥️ BackOffice و FrontOffice — معماری UI
|
||||
|
||||
> **منابع ادغامشده:** `BACKOFFICE-ARCHITECTURE.md`, `BACKOFFICE-STORE-UNIFICATION.md`, `UI-MODERNIZATION-PLAN.md`, `UI-UNIFICATION-PLAN.md`, `PHASE-1-COMPLETE.md`, `PHASE-3-COMPLETE.md`, `PRODUCT-IMAGES-SQUARE.md`
|
||||
> **آخرین بروزرسانی:** اسفند ۱۴۰۴ (بروزرسانی: UserAutoComplete + فعالسازی درگاه)
|
||||
> **آخرین بروزرسانی:** اسفند ۱۴۰۴ (بروزرسانی: PackagePurchaseDialog + UI Fixes + Toman/Rial)
|
||||
|
||||
---
|
||||
|
||||
@@ -134,6 +134,7 @@ FrontOffice/src/FrontOffice/
|
||||
└── Shared/
|
||||
├── AppImage.razor
|
||||
├── ProductCard.razor ← مشترک بین Store و DiscountStore
|
||||
├── PackagePurchaseDialog.razor ← دیالوگ ۲-مرحلهای خرید پکیج (NEW)
|
||||
└── LoadMoreButton.razor
|
||||
```
|
||||
|
||||
@@ -263,6 +264,8 @@ if (user.Identity?.IsAuthenticated == true) {
|
||||
| UserAutoComplete کامپوننت | ✅ | 100% |
|
||||
| نمایش نام کاربر در Wallet | ✅ | 100% |
|
||||
| فعالسازی دکمههای درگاه | ✅ | 100% |
|
||||
| PackagePurchaseDialog | ✅ | 100% |
|
||||
| Toman/Rial فیکس نمایش قیمت | ✅ | 100% |
|
||||
| Mobile Responsive (Phase 7) | ⬜ | 0% |
|
||||
| Dark Mode | ⬜ | 0% |
|
||||
| PWA | ⬜ | 0% |
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# 🔄 مهاجرت داده، BFF و Gateway
|
||||
|
||||
> **منابع ادغامشده:** `BACKOFFICE-BFF-MIGRATION.md`, `customer-facing-capabilities-codex.md`, `DATA-TABLE-MAPPINGS.md`, `DATAMIGRATION-README.md`, `FRONTOFFICE-TO-CMS-MIGRATION.md`, `GATEWAY-REMOVAL-MIGRATION-PLAN.md`, `MIGRATION-PROGRESS.md`
|
||||
> **آخرین بروزرسانی:** اسفند ۱۴۰۴ (بروزرسانی: Migration پروداکشن)
|
||||
> **آخرین بروزرسانی:** اسفند ۱۴۰۴ (بروزرسانی: DataMigration Tool + EF Staging Migrations)
|
||||
|
||||
---
|
||||
|
||||
@@ -136,15 +136,15 @@ Proto-generated classes مستقیم در UI استفاده میشوند
|
||||
|
||||
```
|
||||
DataMigration/
|
||||
├── FourSat.DataMigration/ ← Console app
|
||||
│ ├── Program.cs
|
||||
│ ├── Migrators/
|
||||
│ │ ├── UserMigrator.cs
|
||||
│ │ ├── ProductMigrator.cs
|
||||
│ │ ├── OrderMigrator.cs
|
||||
│ │ └── ClubMigrator.cs
|
||||
├── FourSat.DataMigration/ ← Console app (.NET 9 + Dapper + Polly + Serilog)
|
||||
│ ├── Program.cs ← Entry point
|
||||
│ ├── appsettings.json ← Source/Target connection strings + TruncateTargetTables
|
||||
│ ├── Services/
|
||||
│ │ └── MigrationService.cs ← Smart retry, FK disable/enable, fallback table names
|
||||
│ ├── Scripts/
|
||||
│ │ └── PostMigration_DataTransformation.sql ← Guardشده با IF COL_LENGTH/OBJECT_ID
|
||||
│ └── Mappings/
|
||||
│ └── TableMappings.cs
|
||||
│ └── TableMappings.cs ← Source → Target table/column mappings
|
||||
└── FourSat.GeographySeeder/ ← Seed geography data
|
||||
├── Program.cs
|
||||
└── Data/
|
||||
@@ -152,6 +152,21 @@ DataMigration/
|
||||
└── cities.json
|
||||
```
|
||||
|
||||
### ۵.۱.۱ ویژگیهای DataMigration Tool (اسفند ۱۴۰۴)
|
||||
|
||||
| ویژگی | توضیح |
|
||||
|--------|--------|
|
||||
| **Smart Retry** | فقط خطاهای transient SQL (deadlock, timeout, transport) — نه خطاهای منطقی |
|
||||
| **FK Disable/Enable** | `ALTER TABLE NOCHECK/CHECK CONSTRAINT ALL` حول هر مهاجرت |
|
||||
| **TruncateTargetTables** | حل duplicate key (`IX_ClubMembership_UserId`) هنگام re-run |
|
||||
| **Fallback Table Name** | اگر جدول rename شده (`UserWalletChangeLogs` → `UserWalletHistories`) |
|
||||
| **PostMigration Guards** | همه مراحل با `IF COL_LENGTH`/`OBJECT_ID` برای سازگاری با هر دو schema |
|
||||
| **Polly Retry** | exponential backoff (2s, 8s, 32s) + لاگ structured |
|
||||
| **Serilog** | لاگ فایل + کنسول با جزئیات هر جدول |
|
||||
|
||||
> **کامیتها:** `0e8c6fd` → `8385c90` (MERGE fix) → `31cc464` (FK+truncate+PostMigration)
|
||||
> **وضعیت:** Local only — بدون remote (در workspace `DataMigration/` قرار دارد)
|
||||
|
||||
### ۵.۲ Data Table Mappings
|
||||
|
||||
| جدول مبدأ (قدیم) | جدول مقصد (CMS) | نکات |
|
||||
@@ -178,14 +193,17 @@ DataMigration/
|
||||
| `populate-weekly-commission-pools.sql` | داده تاریخی Pool |
|
||||
| `update_products_price_10_percent.sql` | افزایش قیمت ۱۰% |
|
||||
|
||||
### ۵.۴ Migrationهای EF Core اجراشده روی Production (اسفند ۱۴۰۴)
|
||||
### ۵.۴ Migrationهای EF Core اجراشده روی Production/Staging (اسفند ۱۴۰۴)
|
||||
|
||||
| Migration | توضیح | DB |
|
||||
|-----------|--------|----|
|
||||
|-----------|--------|----||
|
||||
| `ExpandDiscountProductFullInformation` | گسترش فیلدهای محصول تخفیفی | KBS (Production `45.149.79.127`) |
|
||||
| `AddMagicWalletFields` (u21) | فیلدهای کیفپول جادویی + ClubMembershipCycle | KBS (Production) |
|
||||
| ۵۵ migration کامل | از Initial تا `Q27_HistoryTables_And_RenameWalletHistory` | KBS Staging (`185.252.31.42,2019/KBS`) |
|
||||
| ۵۵ migration کامل | از Initial تا `Q27_HistoryTables_And_RenameWalletHistory` | App DB (`194.5.195.53,31433/Foursat`) |
|
||||
|
||||
> ⚠️ نکته: Migration `u21` در زمان merge تکراری بود (timestampهای `20260222155925` و `20260222160755`). فایل تکراری حذف شد.
|
||||
> ✅ **نکته:** CMS به ۲ DB مختلف وصل میشود — هر دو باید migrate شوند.
|
||||
> ✅ Migration `u21` در زمان merge تکراری بود — فایل تکراری حذف شد.
|
||||
|
||||
---
|
||||
|
||||
@@ -236,3 +254,5 @@ FourSat.GeographySeeder:
|
||||
| Geography Seeder | ✅ | 100% |
|
||||
| Proto package unification | ✅ | 100% |
|
||||
| EF Migration پروداکشن | ✅ | 100% |
|
||||
| DataMigration Tool (Prod→Staging) | ✅ | 100% |
|
||||
| EF Migration استیجینگ (KBS + Foursat) | ✅ | 100% |
|
||||
|
||||
Reference in New Issue
Block a user