diff --git a/roadmap/FEATURE-BACKLOG.md b/roadmap/FEATURE-BACKLOG.md index 7282745..a317a2d 100644 --- a/roadmap/FEATURE-BACKLOG.md +++ b/roadmap/FEATURE-BACKLOG.md @@ -1,6 +1,6 @@ # 📋 فیچر بکلاگ — RPCهای آماده (بدون UI) -> تاریخ: ۱۴۰۴/۱۲/۰۶ +> تاریخ: ۱۴۰۴/۱۲/۱۰ > منبع: آدیت gRPC (کامیت `3575e48`) → ۱۲ RPC کامل بدون فرانت > اولویت‌بندی: بر اساس ارزش کسب‌وکار + نیازمندی پکیج‌بیس @@ -19,8 +19,8 @@ | # | RPC | تارگت | صفحه | اقدام | تخمین | |---|-----|-------|------|-------|-------| | F1 | `AssignFeatureToMembership` | BackOffice | ClubFeaturesPage.razor | دکمه «اختصاص فیچر به عضو» + ماتریس PackageFeature | ۴ ساعت | -| F2 | `ChangeNetworkParent` | BackOffice | UserNetworkInfo.razor | دکمه «جابجایی در شبکه» + مودال انتخاب parent جدید | ۶ ساعت | -| F3 | `CalculateOrderPV` | FrontOffice | Checkout.razor + MyPackages.razor | نمایش PV سفارش در چک‌اوت + PV انباشته در صفحه پکیج‌ها | ۴ ساعت | +| F2 | `ChangeNetworkParent` | BackOffice | UserNetworkInfo.razor | ✅ دکمه «تغییر والد» + مودال ChangeParentDialog | BO:`e020354` | +| F3 | `CalculateOrderPV` | FrontOffice | Store/OrderDetail.razor | ✅ نمایش PV سفارش + PV هر محصول | FO:`3bffc13` | ### 🟡 اولویت متوسط — بهبود UX فروشگاه @@ -49,8 +49,8 @@ ``` F1 (AssignFeatureToMembership) → با T4.6 (ماتریس PackageFeature) ادغام -F2 (ChangeNetworkParent) → با تست‌های شبکه فاز ۵ ادغام -F3 (CalculateOrderPV) → با T4.3 (MyPackages re-purchase) ادغام +F2 (ChangeNetworkParent) ✅ تکمیل → BO:`e020354` +F3 (CalculateOrderPV) ✅ تکمیل → FO:`3bffc13` ``` ### فاز B — بعد از پکیج‌بیس (Sprint بعدی) @@ -78,4 +78,4 @@ F8 → F12: گزارش‌دهی و عملیات انبوه --- -*آخرین بروزرسانی: ۱۴۰۴/۱۲/۰۶* +*آخرین بروزرسانی: ۱۴۰۴/۱۲/۱۰ — F2+F3 تکمیل | باقی‌مانده فاز A: F1* diff --git a/roadmap/PACKAGE-TRANSFORMATION-TASKS.md b/roadmap/PACKAGE-TRANSFORMATION-TASKS.md index 8a3d09f..ce8b94b 100644 --- a/roadmap/PACKAGE-TRANSFORMATION-TASKS.md +++ b/roadmap/PACKAGE-TRANSFORMATION-TASKS.md @@ -1,13 +1,13 @@ # 🔄 نقشه‌راه تحول پکیج‌بیس — تسک‌های گام‌به‌گام -> **وضعیت:** در حال اجرا — **فاز ۰-۹ (per-package reports) تکمیل ✅** | NuGet v0.0.187 | تست باقی‌مانده -> **تاریخ:** ۱۴۰۴/۱۲/۰۹ +> **وضعیت:** در حال اجرا — **فاز ۰-۸f (UI تکمیل) ✅** | NuGet v0.0.188 | تست باقی‌مانده +> **تاریخ:** ۱۴۰۴/۱۲/۱۰ > **پیش‌نیاز:** [BIZ-PACKAGE-BASED-SYSTEM.md](../business/BIZ-PACKAGE-BASED-SYSTEM.md) **v3** (تکمیل پورسانت per-package) > **هدف:** شکستن **۴۸+ تغییر** به تسک‌های اتمیک با ترتیب اجرا و وابستگی‌ها > **کامیت‌ها:** -> CMS: `8b9c317`→`fe3edd1`→`ae92ab8`→`a9cd2fd`→`8e5c7c5`→`ccb938e`→`0002a5a`→`607f791`→`7176fe4`→`d19c569`→`469d97b`→`161f796`→`8446e0e`→`ce8e248`→`7554d70`→`aaaf7fc` -> FrontOffice: `b82cac4`→`71f391a`→`0bbc11e`→`d71d463`→`40882c8`→`a956cb9` -> BackOffice: `f1b0085`→`89f5241`→`c96377a`→`8be98ae` +> 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` > ⚠️ **تغییرات v3:** پورسانت per-package، carryover مجزا، SP parameters داینامیک، گزارش‌دهی FO/BO per-package @@ -22,7 +22,7 @@ ├─→ مرحله ۲: منطق کسب‌وکار (۴ روز) ✅ `8e5c7c5` │ └─→ مرحله ۳: بازسازی لایه Package ✅ `ccb938e` │ └─→ مرحله ۴: CRUD + Legacy Fixes ✅ `0002a5a` - │ └─→ مرحله UI (۵ روز) ⬜ + │ └─→ مرحله UI (۵ روز) ✅ └─→ مرحله ۳: پورسانت (۴ روز) ✅ `607f791`+`7176fe4` └─→ مرحله ۶: Deprecation cleanup ✅ `d19c569` └─→ مرحله ۷: Migration + Cleanup ✅ @@ -35,9 +35,10 @@ ├─→ 8c: FO Package pages ✅ FO:`d71d463` └─→ 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` + └─→ مرحله ۵: تست + استقرار (۳ روز) ⬜ -مسیر بحرانی: ۰→۱→۱.۵→۲→۳→۴→UI→۵ = ~۱۷ روز | انجام‌شده: ۰→8e (~۱۶ روز) +مسیر بحرانی: ۰→۱→۱.۵→۲→۳→۴→UI→۵ = ~۱۷ روز | انجام‌شده: ۰→8f (~۱۷ روز) ``` --- @@ -611,6 +612,28 @@ await connection.ExecuteAsync("CMS.sp_CalculateWeeklyBalances", **NuGet:** `0.0.186` → `0.0.187` (همه ریپوها) +### فاز 8f — UI Completion (T4.2 + T4.3 + T4.13 + F2 + F3) ✅ + +> کامیت: CMS `dcd1135` | FO `3bffc13` | BO `e020354` + +**CMS (T4.13 — PackageFeature CRUD):** +- Proto: اضافه `repeated int64 feature_ids` به ۴ message (Create/Update Request, Get/GetAll Response) +- `CreateNewPackageCommand/Handler`: sync FeatureIds → ساخت `PackageFeature` records +- `UpdatePackageCommand/Handler`: sync FeatureIds → حذف قبلی‌ها + ساخت جدید +- `GetPackage/GetAllPackageByFilter`: اضافه `.Include(x => x.PackageFeatures)` + map FeatureIds + +**BackOffice (F2 + T4.13):** +- **F2:** کامپوننت جدید `ChangeParentDialog.razor/.cs` — مودال جابجایی در شبکه با NewParentId, NewLeg, Reason +- **F2:** دکمه «تغییر والد» در `UserNetworkInfo.razor` +- **T4.13:** checkbox matrix فیچرها در `CreateDialog` و `UpdateDialog` — بارگذاری از `ConfigurationContractClient` + +**FrontOffice (T4.2 + T4.3 + F3):** +- **T4.2:** پرداخت شرطی در `Checkout.razor` بر اساس `SupportsDirectPurchase`/`SupportsDayaPurchase` +- **T4.3:** منطق خرید مجدد در `MyPackages.razor` — بارگذاری `MagicWalletStatus` + CTA شرطی + progress bar +- **F3:** نمایش PV سفارش در `Store/OrderDetail.razor` — `CalculateOrderPVAsync` + جدول PV هر محصول + +**NuGet:** `0.0.187` → `0.0.188` (همه ریپوها) + --- ## مرحله ۴ — UI (FrontOffice + BackOffice) @@ -633,34 +656,21 @@ await connection.ExecuteAsync("CMS.sp_CalculateWeeklyBalances", } ``` -### T4.2 — مودال پرداخت شرطی +### T4.2 — مودال پرداخت شرطی ✅ FO:`3bffc13` -```razor -@if (_selectedPackage.SupportsDirectPurchase) -{ - پرداخت آنلاین -} -@if (_selectedPackage.SupportsDayaPurchase) -{ - اقساط دایا -} -``` +**پیاده‌سازی:** +- `Checkout.razor.cs`: اضافه `PackageService` injection، بارگذاری پکیج‌ها با `GetAllPackagesAsync()` +- `Checkout.razor`: دکمه‌های پرداخت شرطی بر اساس `SupportsDirectPurchase` و `SupportsDayaPurchase` +- اضافه `DayaLoanPayment()` method + alert برای عدم وجود روش پرداخت +- `Pack` record: اضافه `SupportsDirectPurchase` و `SupportsDayaPurchase` -### T4.3 — MyPackages + Re-Purchase +### T4.3 — MyPackages + Re-Purchase ✅ FO:`3bffc13` -```razor -@if (_canRepurchase) -{ - - 🎉 چرخه جادویی تکمیل شد! می‌توانید پکیج جدید بخرید. - - خرید پکیج جدید -} -else -{ - -} -``` +**پیاده‌سازی:** +- `MyPackages.razor.cs`: بارگذاری `MagicWalletStatus` از `WalletService.GetMagicWalletStatusAsync()` +- فرمول خرید مجدد: `WalletMode == 0 && PurchaseCycleCount >= 1 && MagicRemainingDeposit == 0` +- `MyPackages.razor`: CTA شرطی «🎉 چرخه جادویی تکمیل شد!» + دکمه «خرید پکیج جدید» +- بخش پیشرفت کیف پول جادویی: مبلغ واریزی، باقی‌مانده، اعتبار دریافتی + progress bar ### T4.8 — FrontOffice: CommissionDashboard per-package (🆕 v3) ✅ FO:`a956cb9` @@ -683,18 +693,20 @@ else - `UserPayouts.razor/.cs`: فیلتر PackageSelect + ستون پکیج با MudChip - `BalancesReport.razor`: فیلتر PackageSelect + ستون پکیج با MudChip + mapping `PackageTitle` -### T4.13 — BackOffice: Package CRUD + Quick Access فیچرها (🆕 v3) +### T4.13 — BackOffice: Package CRUD + Quick Access فیچرها (🆕 v3) ✅ CMS:`dcd1135` BO:`e020354` -> ادمین موقع ساخت/ویرایش پکیج، فیچرها را با checkbox در همان فرم تعیین کند +**CMS پیاده‌سازی:** +- Proto: اضافه `repeated int64 feature_ids` به ۴ message (Create/Update Request, Get/GetAll Response) +- `CreateNewPackageCommand/Handler`: اضافه `FeatureIds` + ساخت `PackageFeature` records +- `UpdatePackageCommand/Handler`: اضافه `FeatureIds` + sync (حذف قبلی‌ها + ساخت جدید) +- `GetPackageQueryHandler`: اضافه `.Include(x => x.PackageFeatures)` + map `FeatureIds` +- `GetAllPackageByFilterQueryHandler`: اضافه `.Include(x => x.PackageFeatures)` قبل از `PaginatedListAsync` +- NuGet: `0.0.187` → `0.0.188` -```razor -@* در PackageCreateDialog / PackageEditDialog: *@ -فیچرهای پکیج -@foreach (var feature in _allFeatures) -{ - -} -``` +**BO پیاده‌سازی:** +- `CreateDialog.razor/.cs`: بارگذاری `ClubFeatures` از `ConfigurationContractClient` + checkbox matrix +- `UpdateDialog.razor/.cs`: همان pattern + pre-populate از `Model.FeatureIds` +- Mapster: `Adapt()` خودکار `FeatureIds` را map می‌کند --- @@ -733,8 +745,8 @@ else **Migration + سایر:** - [ ] Data Migration — PackageId در رکوردهای قبلی (شامل NetworkWeeklyBalance) - [ ] JWT claims جدید (CanRepurchase, PackageId) -- [ ] UI: کاشی‌های داینامیک FrontOffice -- [ ] UI: ماتریس فیچر + Quick Access BackOffice +- [x] UI: کاشی‌های داینامیک FrontOffice +- [x] UI: ماتریس فیچر + Quick Access BackOffice - [ ] Rollback: بدون data loss --- @@ -766,4 +778,4 @@ else --- -*آخرین بروزرسانی: ۱۴۰۴/۱۲/۰۹ — فاز ۰-۸e تکمیل (۲۴ کامیت: ۱۶ CMS + ۶ FO + ۴ BO) | NuGet v0.0.187 | Proto: +package_id in commission messages | FO+BO per-package commission reports کامل | باقی‌مانده: تست + deploy* +*آخرین بروزرسانی: ۱۴۰۴/۱۲/۱۰ — فاز ۰-۸f تکمیل (۲۷ کامیت: ۱۷ CMS + ۷ FO + ۵ BO) | NuGet v0.0.188 | T4.2+T4.3+T4.13+F2+F3 کامل | باقی‌مانده: تست + deploy*