docs: Phase 9 — Q24-Q30 + History Interceptor + Rename + Migration
- CHANGELOG: add Phase 9 (9a-9d) with all new commits (CMS:a1024a3→fdbb91d→10d2ca2, FO:474d364, BO:6939780)
- CHANGELOG: update summary table (279 items, 99%)
- TASKS: add Phase 9 section with detailed descriptions + update commit list (30 total)
- BIZ: update header to 'code complete — Phase 0-9 ✅' + add Phase 9 commits
- TECH-01: add SP Worker (Q26), History Tracking System (Q27), IHasHistory, Interceptor docs
- TECH-01: add UserWalletHistoryService (renamed from ChangeLog)
- INDEX: update R3/R6 descriptions, update timestamp
This commit is contained in:
@@ -1,13 +1,13 @@
|
||||
# 🔄 نقشهراه تحول پکیجبیس — تسکهای گامبهگام
|
||||
|
||||
> **وضعیت:** در حال اجرا — **فاز ۰-۸f (UI تکمیل) ✅** | NuGet v0.0.188 | تست باقیمانده
|
||||
> **تاریخ:** ۱۴۰۴/۱۲/۱۰
|
||||
> **پیشنیاز:** [BIZ-PACKAGE-BASED-SYSTEM.md](../business/BIZ-PACKAGE-BASED-SYSTEM.md) **v3** (تکمیل پورسانت per-package)
|
||||
> **وضعیت:** در حال اجرا — **فاز ۰-۹ (تکمیل کد) ✅** | NuGet v0.0.188 | تست باقیمانده
|
||||
> **تاریخ:** ۱۴۰۴/۱۲/۰۸
|
||||
> **پیشنیاز:** [BIZ-PACKAGE-BASED-SYSTEM.md](../business/BIZ-PACKAGE-BASED-SYSTEM.md) **v6** (تکمیل Q24-Q30 + History + Rename)
|
||||
> **هدف:** شکستن **۴۸+ تغییر** به تسکهای اتمیک با ترتیب اجرا و وابستگیها
|
||||
> **کامیتها:**
|
||||
> CMS: `8b9c317`→`fe3edd1`→`ae92ab8`→`a9cd2fd`→`8e5c7c5`→`ccb938e`→`0002a5a`→`607f791`→`7176fe4`→`d19c569`→`469d97b`→`161f796`→`8446e0e`→`ce8e248`→`7554d70`→`aaaf7fc`→`dcd1135`
|
||||
> FrontOffice: `b82cac4`→`71f391a`→`0bbc11e`→`d71d463`→`40882c8`→`a956cb9`→`3bffc13`
|
||||
> BackOffice: `f1b0085`→`89f5241`→`c96377a`→`8be98ae`→`e020354`
|
||||
> CMS: `8b9c317`→`fe3edd1`→`ae92ab8`→`a9cd2fd`→`8e5c7c5`→`ccb938e`→`0002a5a`→`607f791`→`7176fe4`→`d19c569`→`469d97b`→`161f796`→`8446e0e`→`ce8e248`→`7554d70`→`aaaf7fc`→`dcd1135`→`a1024a3`→`fdbb91d`→`10d2ca2`
|
||||
> FrontOffice: `b82cac4`→`71f391a`→`0bbc11e`→`d71d463`→`40882c8`→`a956cb9`→`3bffc13`→`474d364`
|
||||
> BackOffice: `f1b0085`→`89f5241`→`c96377a`→`8be98ae`→`e020354`→`6939780`
|
||||
|
||||
> ⚠️ **تغییرات v3:** پورسانت per-package، carryover مجزا، SP parameters داینامیک، گزارشدهی FO/BO per-package
|
||||
|
||||
@@ -36,9 +36,14 @@
|
||||
└─→ 8d: Proto cleanup ✅ CMS:`7554d70` FO:`40882c8` BO:`c96377a`
|
||||
└─→ 8e: Per-package reports ✅ CMS:`aaaf7fc` FO:`a956cb9` BO:`8be98ae`
|
||||
└─→ 8f: UI completion ✅ CMS:`dcd1135` FO:`3bffc13` BO:`e020354`
|
||||
└─→ مرحله ۵: تست + استقرار (۳ روز) ⬜
|
||||
└─→ مرحله ۹: Q24-Q30 + History + Rename
|
||||
├─→ 9a: Q24+Q26 (threshold+SP) ✅ CMS:`a1024a3`
|
||||
├─→ 9b: Q27 History entities ✅ CMS:`fdbb91d`
|
||||
├─→ 9c: Q28 UI Guidance ✅ FO:`474d364` BO:`6939780`
|
||||
└─→ 9d: Rename+Interceptor+Mig ✅ CMS:`10d2ca2`
|
||||
└─→ مرحله ۵: تست + استقرار (۳ روز) ⬜
|
||||
|
||||
مسیر بحرانی: ۰→۱→۱.۵→۲→۳→۴→UI→۵ = ~۱۷ روز | انجامشده: ۰→8f (~۱۷ روز)
|
||||
مسیر بحرانی: ۰→۱→۱.۵→۲→۳→۴→UI→۹→۵ = ~۲۰ روز | انجامشده: ۰→9d (~۱۸ روز)
|
||||
```
|
||||
|
||||
---
|
||||
@@ -710,6 +715,79 @@ await connection.ExecuteAsync("CMS.sp_CalculateWeeklyBalances",
|
||||
|
||||
---
|
||||
|
||||
## مرحله ۹ — Q24-Q30 Business Decisions + History Infrastructure ✅
|
||||
|
||||
> ✅ تکمیلشده | وابستگی: مرحله ۸ | کامیتها: CMS:`a1024a3`→`fdbb91d`→`10d2ca2` FO:`474d364` BO:`6939780`
|
||||
|
||||
### 9a: Q24 آستانه موجودی + Q26 SP Worker ✅ (CMS:`a1024a3`)
|
||||
|
||||
**Q24 — آستانه موجودی:**
|
||||
- شرط ورود به Magic و خرید مجدد از `Balance == 0` به `Balance <= 1_000_000` ریال تغییر کرد
|
||||
- چون قیمت محصولات متفاوته، Balance دقیقاً صفر نمیشه
|
||||
- فایلها: `UserOrderService.cs` (شرط EXIT Magic + Re-purchase guard)
|
||||
|
||||
**Q26 — SP Worker:**
|
||||
- `StoredProcedureDeploymentService` (IHostedService) — در startup فایلهای `.sql` از embedded resource خوانده میشوند
|
||||
- مقایسه checksum با جدول `__SPChecksums` — فقط SPهای تغییریافته re-deploy میشوند
|
||||
- فایلها: `StoredProcedureDeploymentService.cs`, embedded `.sql` resources
|
||||
|
||||
### 9b: Q27 History Tables Entities ✅ (CMS:`fdbb91d`)
|
||||
|
||||
**Entityهای جدید:**
|
||||
- `PackageHistory`: فیلدهای Old*/New* برای Price, ActivationFee, MagicMultiplier, MagicMaxDeposit, MaxBalancesPerLeg, IsActive + Action + PerformedBy + Reason
|
||||
- `ClubMembershipCycleHistory`: فیلدهای Old*/New* برای IsCurrentCycle, MagicStartedAt, MagicCompletedAt + Action + UserId + CycleNumber
|
||||
|
||||
**Enums جدید:**
|
||||
- `PackageAction`: Created, Updated, Activated, Deactivated, PriceChanged, FeaturesChanged
|
||||
- `ClubMembershipCycleAction`: Created, MagicStarted, MagicCompleted, Closed, AdminModified
|
||||
|
||||
**زیرساخت:**
|
||||
- EF Configurations (indexes, maxLength, precision)
|
||||
- DbSets در `IApplicationDbContext` و `ApplicationDbContext`
|
||||
- Navigation Properties: `Package.Histories`, `ClubMembershipCycle.Histories`
|
||||
|
||||
### 9c: Q28 UI Guidance ✅ (FO:`474d364` BO:`6939780`)
|
||||
|
||||
**FrontOffice — ۷ صفحه با MudAlert آموزشی:**
|
||||
- G1: Packages.razor — توضیح سیستم پکیجبیس
|
||||
- G2: Checkout — هشدار شارژ کیفپول اعتباری
|
||||
- G3: MyPackages — توضیح وضعیت پکیجها
|
||||
- G4: MagicWallet — هشدار شرایط خروج + سقف شارژ
|
||||
- G5: CommissionDashboard — توضیح per-package
|
||||
- G6: ClubMembership — آموزش چرخه عضویت
|
||||
- G7: ActivationSection — هشدار هزینه فعالسازی
|
||||
|
||||
**BackOffice — ۶ صفحه با MudAlert:**
|
||||
- G8: PackageCRUD — هشدار ثبت تغییرات در History
|
||||
- G9: ClubFeatures — توضیح ارتباط فیچر-پکیج
|
||||
- G10: ManualPayments — هشدار مبلغ بر اساس پکیج
|
||||
- G11: Commission Dashboard — توضیح Pool per-package
|
||||
- G12: UserPayouts — توضیح فیلتر پکیج
|
||||
- G13: ClubMembers — اطلاعات چرخه عضویت
|
||||
|
||||
### 9d: Rename + History Interceptor + EF Migration ✅ (CMS:`10d2ca2`)
|
||||
|
||||
**Rename (86 فایل):**
|
||||
- `UserWalletChangeLog` → `UserWalletHistory` در 54+ فایل (entities, configs, DTOs, commands, queries, protos, services)
|
||||
- 34 فایل rename شده + 11 دایرکتوری rename شده
|
||||
- Proto: `userwalletchangelog.proto` → `userwallethistory.proto`
|
||||
|
||||
**History Interceptor:**
|
||||
- `IHasHistory<T>` generic interface در `Domain/Common` — متد `CreateHistorySnapshot(action, performedBy)`
|
||||
- `HistoryTrackingSaveChangesInterceptor` در `Infrastructure/Persistence/Interceptors` — reflection-based
|
||||
- شناسایی entityهای `IHasHistory<>` از ChangeTracker
|
||||
- فراخوانی `CreateHistorySnapshot` برای Modified/Added
|
||||
- Auto-fill فیلدهای `Old*` از `OriginalValues` با naming convention
|
||||
- `Package` implements `IHasHistory<PackageHistory>` — اولین entity
|
||||
|
||||
**EF Migration (`Q27_HistoryTables_And_RenameWalletHistory`):**
|
||||
- ⚠️ EF Core اتوماتیک `DropTable` + `CreateTable` تولید کرد → **دستی اصلاح شد** به `RenameTable` (حفظ دادهها)
|
||||
- `RenameTable` + `RenameIndex` × 2 + `sp_rename` برای PK و FKها
|
||||
- `CreateTable` برای `ClubMembershipCycleHistories` و `PackageHistories` (جداول جدید)
|
||||
- Down method: reverse rename + drop new tables
|
||||
|
||||
---
|
||||
|
||||
## مرحله ۵ — تست و استقرار
|
||||
|
||||
> ⏱️ **۳ روز** (v3: +۱) | وابستگی: مرحله ۴
|
||||
@@ -778,4 +856,4 @@ await connection.ExecuteAsync("CMS.sp_CalculateWeeklyBalances",
|
||||
|
||||
---
|
||||
|
||||
*آخرین بروزرسانی: ۱۴۰۴/۱۲/۱۰ — فاز ۰-۸f تکمیل (۲۷ کامیت: ۱۷ CMS + ۷ FO + ۵ BO) | NuGet v0.0.188 | T4.2+T4.3+T4.13+F2+F3 کامل | باقیمانده: تست + deploy*
|
||||
*آخرین بروزرسانی: ۱۴۰۴/۱۲/۰۸ — فاز ۰-۹d تکمیل (۳۰ کامیت: ۲۰ CMS + ۸ FO + ۶ BO) | NuGet v0.0.188 | باقیمانده: تست + deploy*
|
||||
|
||||
Reference in New Issue
Block a user