docs: package-based transformation — complete roadmap + UX impact + feature backlog
New documents: - roadmap/FEATURE-BACKLOG.md: 12 kept RPCs → feature tasks with priority, target pages, and time estimates (F1-F12) - roadmap/PACKAGE-TRANSFORMATION-UX.md: UX impact analysis — before/after wireframes for 19 pages (10 FO + 9 BO), customer + admin experience changes, future needs prediction - roadmap/PACKAGE-TRANSFORMATION-TASKS.md: step-by-step implementation plan (6 phases, ~13 day critical path), atomic tasks with code diffs, dependency graph, test checklist Updated: - cms/GRPC-SERVICES-AUDIT.md: cross-references to new docs Total: 998 lines of documentation covering: - 12 RPC feature tasks prioritized by package-based relevance - 19 page wireframes (before/after comparison) - 39 transformation tasks broken into 6 phases - 10 predicted future requirements (N1-N10) - Risk analysis + rollback plan + calendar
This commit is contained in:
@@ -0,0 +1,494 @@
|
||||
# 🏗️ تحلیل تحول پکیجبیس — تاثیر بر تجربه کاربر (UX)
|
||||
|
||||
> **وضعیت:** در حال تحلیل
|
||||
> **تاریخ:** ۱۴۰۴/۱۲/۰۶
|
||||
> **پیشنیاز:** [BIZ-PACKAGE-BASED-SYSTEM.md](../business/BIZ-PACKAGE-BASED-SYSTEM.md) v2
|
||||
> **هدف:** مستندسازی تاثیر تغییر رویکرد پکیجبیس بر تجربه مشتری و ادمین در فرانتها
|
||||
|
||||
---
|
||||
|
||||
## فهرست
|
||||
|
||||
1. [چشمانداز کلی](#۱-چشمانداز-کلی)
|
||||
2. [تجربه مشتری (FrontOffice) — قبل و بعد](#۲-تجربه-مشتری-frontoffice--قبل-و-بعد)
|
||||
3. [تجربه ادمین (BackOffice) — قبل و بعد](#۳-تجربه-ادمین-backoffice--قبل-و-بعد)
|
||||
4. [تسکهای تحول — مرحلهبهمرحله](#۴-تسکهای-تحول--مرحلهبهمرحله)
|
||||
5. [پیشبینی نیازمندیهای آینده](#۵-پیشبینی-نیازمندیهای-آینده)
|
||||
6. [ماتریس تاثیرگذاری بر صفحات](#۶-ماتریس-تاثیرگذاری-بر-صفحات)
|
||||
|
||||
---
|
||||
|
||||
## ۱. چشمانداز کلی
|
||||
|
||||
### فلسفه تغییر
|
||||
|
||||
| بُعد | **فعلی (تکپکیج)** | **هدف (چندپکیج)** |
|
||||
|------|-------------------|--------------------|
|
||||
| **مدل قیمتی** | فقط ۵۶M تومان — "همه یا هیچ" | سطوح متنوع (نقرهای ۵.۶M, پایه ۵۶M, ...) — "ورود تدریجی" |
|
||||
| **تجربه ورود** | سنگین — کاربر باید ۵۶M بپردازد | سبک — شروع از ۵.۶M و ارتقا بعدی |
|
||||
| **چرخه عمر** | یکبار خرید → برای همیشه | چندبار خرید → هر چرخه Magic Wallet |
|
||||
| **فیچرها** | ثابت — همه فیچرها برای همه | پویا — هر پکیج فیچرهای خودش |
|
||||
| **کمیسیون** | یک Pool مشترک | Pool جداگانه هر پکیج |
|
||||
| **مدیریت** | hardcoded — تغییر = deploy | داینامیک — ادمین از پنل تغییر میدهد |
|
||||
|
||||
### چه کسانی تاثیر میبینند؟
|
||||
|
||||
```
|
||||
👤 مشتری (FrontOffice):
|
||||
├── ثبتنامکننده جدید: گزینههای بیشتر → تصمیمگیری آسانتر
|
||||
├── مشتری فعال: دکمه "ارتقا" + "خرید مجدد"
|
||||
└── مشتری Magic: نمایش پیشرفت چرخه + آمادهسازی خرید بعدی
|
||||
|
||||
👔 ادمین (BackOffice):
|
||||
├── مدیر محصول: CRUD پکیج + ماتریس فیچر
|
||||
├── مدیر مالی: Commission Pool جداگانه + گزارشها
|
||||
└── پشتیبان: فعالسازی دستی با انتخاب پکیج
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ۲. تجربه مشتری (FrontOffice) — قبل و بعد
|
||||
|
||||
### ۲.۱ صفحه لیست پکیجها (`Packages.razor`)
|
||||
|
||||
#### قبل (فعلی):
|
||||
```
|
||||
┌─────────────────────────────────────────────┐
|
||||
│ پکیج طلایی │
|
||||
│ ──────────── │
|
||||
│ ✅ دسترسی به باشگاه مشتریان │
|
||||
│ ✅ کیفپول جادویی │
|
||||
│ ✅ فروشگاه تخفیفی │
|
||||
│ │
|
||||
│ 💰 ۵۶,۰۰۰,۰۰۰ تومان │
|
||||
│ │
|
||||
│ [خرید پکیج] │
|
||||
└─────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
#### بعد (پکیجبیس):
|
||||
```
|
||||
┌──────────────────────┐ ┌──────────────────────┐ ┌──────────────────────┐
|
||||
│ 🥈 پکیج نقرهای │ │ 🏆 پکیج پایه │ │ 💎 پکیج ویژه │
|
||||
│ ──────────── │ │ ──────────── │ │ ──────────── │
|
||||
│ ✅ باشگاه مشتریان │ │ ✅ باشگاه مشتریان │ │ ✅ باشگاه مشتریان │
|
||||
│ ✅ کیفپول جادویی │ │ ✅ کیفپول جادویی │ │ ✅ کیفپول جادویی │
|
||||
│ ❌ فروشگاه تخفیفی │ │ ✅ فروشگاه تخفیفی │ │ ✅ فروشگاه تخفیفی │
|
||||
│ ❌ پشتیبانی اختصاصی │ │ ❌ پشتیبانی اختصاصی │ │ ✅ پشتیبانی اختصاصی │
|
||||
│ │ │ │ │ │
|
||||
│ 💰 ۵,۶۰۰,۰۰۰ تومان │ │ 💰 ۵۶,۰۰۰,۰۰۰ تومان │ │ 💰 ??? تومان │
|
||||
│ │ │ ⭐ محبوبترین │ │ 🆕 بزودی │
|
||||
│ [خرید] [جزئیات] │ │ [خرید] [جزئیات] │ │ [در انتظار] │
|
||||
│ ────────────────── │ │ ────────────────── │ │ ────────────────── │
|
||||
│ 📊 PV: 5,600,000 │ │ 📊 PV: 56,000,000 │ │ │
|
||||
│ 🎁 هدیه: 11,200,000 │ │ 🎁 هدیه: 112,000,000 │ │ │
|
||||
└──────────────────────┘ └──────────────────────┘ └──────────────────────┘
|
||||
```
|
||||
|
||||
**تغییرات کلیدی:**
|
||||
- کاشیها از API میآیند (نه hardcoded)
|
||||
- فیچرهای هر پکیج از `PackageFeature` خوانده میشود
|
||||
- نمایش PV (Point Value) برای هر پکیج
|
||||
- نمایش Gift Value (= `Price × DiscountMultiplier`)
|
||||
- دکمههای شرطی: دایا فقط برای پکیجهای `SupportsDayaPurchase`
|
||||
- Badge «محبوبترین» / «ارزانترین» بر اساس `SortOrder`
|
||||
|
||||
### ۲.۲ صفحه پکیجهای من (`MyPackages.razor`)
|
||||
|
||||
#### قبل:
|
||||
```
|
||||
وضعیت عضویت: فعال ✅
|
||||
پکیج: طلایی
|
||||
تاریخ فعالسازی: ۱۴۰۳/۰۹/۱۵
|
||||
```
|
||||
|
||||
#### بعد:
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 📦 پکیج فعال: پکیج پایه │
|
||||
│ ──────────── │
|
||||
│ وضعیت: فعال ✅ | چرخه: ۲ | مدت: ۱۸۰ روز │
|
||||
│ │
|
||||
│ ┌──── کیفپول جادویی ────┐ │
|
||||
│ │ موجودی: ۱۲,۳۰۰,۰۰۰ │ │
|
||||
│ │ شارژ: ۴۳۵,۰۰۰,۰۰۰ │ │
|
||||
│ │ سقف: ۱,۰۰۰,۰۰۰,۰۰۰ │ │
|
||||
│ │ ████████░░░░ ۴۳.۵% │ │
|
||||
│ └─────────────────────────┘ │
|
||||
│ │
|
||||
│ ┌──── PV انباشته ────┐ │
|
||||
│ │ PV کل: ۸۹,۶۰۰,۰۰۰ │ │
|
||||
│ │ آخرین سفارش: ۴.۲M │ │
|
||||
│ └─────────────────────┘ │
|
||||
│ │
|
||||
│ ❌ چرخه جادویی تکمیل نشده — هنوز امکان خرید مجدد نیست │
|
||||
│ ───── یا ───── │
|
||||
│ ✅ چرخه جادویی تکمیل شد! [خرید پکیج جدید] │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
|
||||
┌─── تاریخچه چرخهها ───┐
|
||||
│ چرخه ۱: پایه — ۱۴۰۳/۰۹ تا ۱۴۰۴/۰۳ — ✅ تکمیل │
|
||||
│ چرخه ۲: پایه — ۱۴۰۴/۰۳ تا ادامه دارد — 🔄 فعال │
|
||||
└────────────────────────┘
|
||||
```
|
||||
|
||||
**تغییرات کلیدی:**
|
||||
- نمایش شماره چرخه و نوع پکیج
|
||||
- نوار پیشرفت Magic Wallet (چقدر تا تکمیل چرخه)
|
||||
- PV انباشته (از `CalculateOrderPV`)
|
||||
- دکمه شرطی «خرید مجدد» (فقط بعد تکمیل چرخه)
|
||||
- تاریخچه چرخهها (از `ClubMembershipCycle`)
|
||||
|
||||
### ۲.۳ صفحه چکاوت (`Checkout.razor`)
|
||||
|
||||
#### قبل:
|
||||
```
|
||||
سبد خرید:
|
||||
محصول A × 2 = ۲,۰۰۰,۰۰۰ تومان
|
||||
مالیات (۹%): ۱۸۰,۰۰۰ تومان
|
||||
────────────────
|
||||
جمع: ۲,۱۸۰,۰۰۰ تومان
|
||||
```
|
||||
|
||||
#### بعد:
|
||||
```
|
||||
سبد خرید:
|
||||
محصول A × 2 = ۲,۰۰۰,۰۰۰ تومان
|
||||
مالیات (۹%): ۱۸۰,۰۰۰ تومان
|
||||
────────────────
|
||||
جمع: ۲,۱۸۰,۰۰۰ تومان
|
||||
|
||||
📊 PV این سفارش: ۲,۰۰۰,۰۰۰ ← جدید
|
||||
💎 PV انباشته: ۹۱,۶۰۰,۰۰۰ ← جدید
|
||||
```
|
||||
|
||||
### ۲.۴ پرداخت پکیج — مودال خرید
|
||||
|
||||
#### قبل:
|
||||
```
|
||||
┌─── خرید پکیج طلایی ───┐
|
||||
│ │
|
||||
│ مبلغ: ۵۶,۰۰۰,۰۰۰ تومان │
|
||||
│ │
|
||||
│ [پرداخت آنلاین] │
|
||||
│ [اقساط دایا] │
|
||||
│ [پرداخت دستی] │
|
||||
└──────────────────────────┘
|
||||
```
|
||||
|
||||
#### بعد:
|
||||
```
|
||||
┌─── خرید پکیج نقرهای ───┐ ┌─── خرید پکیج پایه ───┐
|
||||
│ │ │ │
|
||||
│ مبلغ: ۵,۶۰۰,۰۰۰ تومان │ │ مبلغ: ۵۶,۰۰۰,۰۰۰ تومان│
|
||||
│ │ │ │
|
||||
│ سهم باشگاه: ۲,۵۲۰,۰۰۰ │ │ سهم باشگاه: ۲۵,۲۰۰,۰۰│
|
||||
│ شارژ کیفپول: ۵,۶۰۰,۰۰۰ │ │ شارژ کیفپول: ۵۶,۰۰۰,۰│
|
||||
│ هدیه تخفیفی: ۱۱,۲۰۰,۰۰۰ │ │ هدیه تخفیفی: ۱۱۲,۰۰۰,۰│
|
||||
│ │ │ │
|
||||
│ [پرداخت آنلاین] ✅ │ │ [پرداخت آنلاین] ✅ │
|
||||
│ [اقساط دایا] ❌ ندارد │ │ [اقساط دایا] ✅ │
|
||||
│ [پرداخت دستی] ✅ │ │ [پرداخت دستی] ✅ │
|
||||
└────────────────────────────┘ └────────────────────────┘
|
||||
```
|
||||
|
||||
**تغییرات کلیدی:**
|
||||
- نمایش breakdown مالی: سهم باشگاه + شارژ کیفپول + هدیه تخفیفی
|
||||
- دکمههای پرداخت شرطی بر اساس `SupportsDayaPurchase` / `SupportsDirectPurchase`
|
||||
- متن قرارداد داینامیک بر اساس پکیج انتخابشده
|
||||
|
||||
### ۲.۵ صفحه تنظیمات مشتری (`Settings.razor`) — جدید
|
||||
|
||||
```
|
||||
┌─── تنظیمات اعلانها ───┐
|
||||
│ │
|
||||
│ 📧 اعلان ایمیل: [✅] │
|
||||
│ 📱 اعلان SMS: [✅] │
|
||||
│ 🔔 اعلان Push: [❌] │
|
||||
│ │
|
||||
│ [ذخیره تغییرات] │
|
||||
└──────────────────────────┘
|
||||
```
|
||||
> وصل به RPC: `UpdateCustomerSettings`
|
||||
|
||||
### ۲.۶ تاریخچه سفارشات — دکمه تکرار
|
||||
|
||||
```
|
||||
┌─── تاریخچه سفارشات ────────────────────────────────────────┐
|
||||
│ # │ تاریخ │ مبلغ │ وضعیت │ PV │ عملیات │
|
||||
│───┼────────────┼────────────┼───────────┼───────────┼────────│
|
||||
│ 1 │ ۱۴۰۴/۱۱/۰۲│ ۴,۲۰۰,۰۰۰ │ تحویل ✅ │ ۴,۲۰۰,۰۰ │ [🔄] [📍]│
|
||||
│ 2 │ ۱۴۰۴/۱۰/۱۵│ ۱,۸۰۰,۰۰۰ │ ارسال 📦 │ ۱,۸۰۰,۰۰ │ [📍]│
|
||||
│ 3 │ ۱۴۰۴/۰۹/۲۰│ ۳,۵۰۰,۰۰۰ │ تحویل ✅ │ ۳,۵۰۰,۰۰ │ [🔄] [📍]│
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
|
||||
🔄 = تکرار سفارش (CustomerReorderPreviousOrder)
|
||||
📍 = ردیابی سفارش (CustomerTrackOrder)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ۳. تجربه ادمین (BackOffice) — قبل و بعد
|
||||
|
||||
### ۳.۱ مدیریت پکیجها (`PackageMainPage.razor`)
|
||||
|
||||
#### قبل:
|
||||
```
|
||||
┌─── مدیریت پکیجها ────────────────────────────────┐
|
||||
│ # │ عنوان │ قیمت │ وضعیت │ عملیات │
|
||||
│───┼──────────┼─────────────┼───────┼──────────────│
|
||||
│ 1 │ طلایی │ ۵۶,۰۰۰,۰۰۰ │ فعال │ [ویرایش] │
|
||||
└────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
#### بعد:
|
||||
```
|
||||
┌─── مدیریت پکیجها ──────────────────────────────────────────────────────┐
|
||||
│ # │ عنوان │ قیمت │ سهم باشگاه │ ضریب │ دایا │ پایه │ ترتیب│ عملیات │
|
||||
│───┼─────────┼─────────────┼────────────┼────────┼──────┼──────┼──────┼───────────────│
|
||||
│ 1 │ نقرهای │ ۵,۶۰۰,۰۰۰ │ ۲,۵۲۰,۰۰۰ │ ×2.0 │ ❌ │ ❌ │ 1 │ [✏️] [📋] [❌] │
|
||||
│ 2 │ پایه │ ۵۶,۰۰۰,۰۰۰ │ ۲۵,۲۰۰,۰۰│ ×2.0 │ ✅ │ ✅ │ 2 │ [✏️] [📋] [❌] │
|
||||
└──────────────────────────────────────────────────────────────────────────┘
|
||||
|
||||
✏️ = ویرایش 📋 = مدیریت فیچرها ❌ = حذف
|
||||
```
|
||||
|
||||
### ۳.۲ ماتریس فیچر × پکیج (`PackageFeatureMatrixPage.razor`) — صفحه جدید
|
||||
|
||||
```
|
||||
┌─── ماتریس فیچر × پکیج ─────────────────────────────────────────┐
|
||||
│ │
|
||||
│ فیچر │ نقرهای │ پایه │ ویژه │
|
||||
│ ─────────────────────────┼─────────┼────────┼──────────────────│
|
||||
│ دسترسی به باشگاه │ ✅ │ ✅ │ ✅ │
|
||||
│ کیفپول جادویی │ ✅ │ ✅ │ ✅ │
|
||||
│ فروشگاه عادی │ ✅ │ ✅ │ ✅ │
|
||||
│ فروشگاه تخفیفی │ ❌ │ ✅ │ ✅ │
|
||||
│ محصولات ClubExclusive │ ❌ │ ✅ │ ✅ │
|
||||
│ پشتیبانی اختصاصی │ ❌ │ ❌ │ ✅ │
|
||||
│ کمیسیون شبکه │ ✅ │ ✅ │ ✅ │
|
||||
│ ─────────────────────────┼─────────┼────────┼──────────────────│
|
||||
│ │ [ذخیره] │ [ذخیره]│ [ذخیره] │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
|
||||
ادمین با checkbox فیچرها را به هر پکیج اختصاص میدهد.
|
||||
وصل به RPC: AssignFeatureToMembership
|
||||
```
|
||||
|
||||
### ۳.۳ فعالسازی باشگاه (`ActivateClubDialog.razor`)
|
||||
|
||||
#### قبل:
|
||||
```
|
||||
فعالسازی باشگاه مشتریان
|
||||
کاربر: علی محمدی
|
||||
[فعالسازی] ← hardcoded 56M + همه فیچرها
|
||||
```
|
||||
|
||||
#### بعد:
|
||||
```
|
||||
فعالسازی باشگاه مشتریان
|
||||
کاربر: علی محمدی
|
||||
پکیج: [▼ انتخاب پکیج ▼] ← dropdown از API
|
||||
├── نقرهای (۵,۶۰۰,۰۰۰)
|
||||
└── پایه (۵۶,۰۰۰,۰۰۰)
|
||||
|
||||
جزئیات:
|
||||
سهم باشگاه: _________ (خودکار)
|
||||
فیچرها: _________ (از ماتریس پکیج)
|
||||
|
||||
[فعالسازی]
|
||||
```
|
||||
|
||||
### ۳.۴ داشبورد (`Index.razor`) — بهبود
|
||||
|
||||
```
|
||||
┌─── آمار باشگاه ────────────────────────────────────────────────┐
|
||||
│ │
|
||||
│ 👥 کل اعضا: ۱,۲۴۰ │
|
||||
│ 📦 پکیج نقرهای: ۸۲۰ | پکیج پایه: ۴۲۰ │
|
||||
│ 💰 Pool نقرهای: ۲,۰۶۶,۴۰۰,۰۰۰ | Pool پایه: ۱۰,۵۸۴,۰۰۰,۰۰│
|
||||
│ ⚠️ هشدار: ۱۲ محصول موجودی کم │
|
||||
│ │
|
||||
│ ┌── موجودی انبار ──┐ ┌── ارزش کل انبار ──┐ │
|
||||
│ │ ۳,۴۵۰ آیتم │ │ ۸۹,۲۰۰,۰۰۰,۰۰۰ │ │
|
||||
│ │ ۱۲ نوع محصول │ │ ریال │ │
|
||||
│ └───────────────────┘ └───────────────────┘ │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
|
||||
وصل به: GetInventorySummary, GetStockValueReport, GetLowStockProducts
|
||||
```
|
||||
|
||||
### ۳.۵ مدیریت شبکه (`UserNetworkInfo.razor`) — بهبود
|
||||
|
||||
```
|
||||
┌─── مدیریت شبکه ─────────────────────────────────────────┐
|
||||
│ │
|
||||
│ کاربر: سارا احمدی (ID: 1045) │
|
||||
│ پکیج: نقرهای │ چرخه: ۱ │ PV: ۵,۶۰۰,۰۰۰ │
|
||||
│ Parent: علی محمدی (ID: 1001) │
|
||||
│ شاخه: چپ │ عمق: ۳ │
|
||||
│ │
|
||||
│ [جابجایی در شبکه] ← مودال: انتخاب parent جدید │
|
||||
│ │
|
||||
└───────────────────────────────────────────────────────────┘
|
||||
|
||||
وصل به: ChangeNetworkParent
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ۴. تسکهای تحول — مرحلهبهمرحله
|
||||
|
||||
### مرحله ۱: زیرساخت Domain + DB (پایه)
|
||||
|
||||
> ⚠️ **بدون این مرحله هیچکدام از تغییرات UI ممکن نیست**
|
||||
|
||||
| # | تسک | لایه | فایلها | شرح |
|
||||
|---|------|------|--------|------|
|
||||
| T1.1 | اضافه ۷ فیلد به Package entity | Domain | Package.cs, PackageConfiguration.cs | SortOrder, IsActive, IsBasePackage, SupportsDayaPurchase, SupportsDirectPurchase, ActivationFee, DiscountMultiplier, MagicWalletMultiplier |
|
||||
| T1.2 | ایجاد PackageFeature entity | Domain | PackageFeature.cs, PackageFeatureConfiguration.cs | join table: Package ↔ ClubFeature |
|
||||
| T1.3 | اضافه PackageId به ClubMembership | Domain | ClubMembership.cs | FK nullable → بعد migration → required |
|
||||
| T1.4 | اضافه PackageId به ClubMembershipCycle | Domain | ClubMembershipCycle.cs | FK nullable → بعد migration → required |
|
||||
| T1.5 | اضافه PackageId به WeeklyCommissionPool | Domain | WeeklyCommissionPool.cs | FK + Unique(WeekDefinitionId, PackageId) |
|
||||
| T1.6 | اضافه PackageId به UserCommissionPayout | Domain | UserCommissionPayout.cs | FK nullable |
|
||||
| T1.7 | حذف ۵ SystemConstants | Domain | SystemConstants.cs | BasePackageAmount, DayaLoanAmount, ClubActivationFee, ClubMembershipGiftValue, MagicWalletMultiplier |
|
||||
| T1.8 | EF Migration + Seed | Infrastructure | Migration file | ۲ پکیج + فیچرها + FKها |
|
||||
| T1.9 | Data Migration Script | Infrastructure | SQL script | کاربران فعلی → PackageId = پکیج پایه |
|
||||
| T1.10 | بروزرسانی Protoها | Proto | package.proto, clubmembership.proto, commission.proto | فیلدهای جدید |
|
||||
|
||||
### مرحله ۲: منطق کسبوکار (Handlers)
|
||||
|
||||
> **هر handler باید از Package entity مقادیر مالی بخواند**
|
||||
|
||||
| # | تسک | فایل | شرح |
|
||||
|---|------|------|------|
|
||||
| T2.1 | Generic Verify Handler | VerifyPackagePurchaseCommandHandler.cs | DiscountMultiplier از Package + ساخت UserPackagePurchase |
|
||||
| T2.2 | Generic Purchase Handler | PurchasePackageCommandHandler.cs | حذف "طلایی" و ID=4 |
|
||||
| T2.3 | ActivateClubMembership بهبود | ActivateClubMembershipCommandHandler.cs | فیچر از PackageFeature + ActivationFee از Package |
|
||||
| T2.4 | EXIT Magic Mode ریست | UserOrderService.cs | PackagePurchaseMethod=None, membership.IsActive=false |
|
||||
| T2.5 | Guards re-purchase | G1-G3 handlers | اجازه خرید اگر MagicCompletedAt پر |
|
||||
| T2.6 | Re-contract | AcceptClubMembershipContractCommandHandler.cs | اجازه قرارداد مجدد |
|
||||
| T2.7 | Manual Payment بهبود | CreateManualPaymentCommandHandler.cs | DiscountMultiplier از Package |
|
||||
| T2.8 | Daya Loan بهبود | CheckAndProcessDayaLoansCommandHandler.cs | حذف ID=4 |
|
||||
| T2.9 | PackageFeature CRUD | جدید | ادمین بتواند فیچر ↔ پکیج مدیریت کند |
|
||||
| T2.10 | JWT claims جدید | JWT builder | اضافه CanRepurchase + PackageType |
|
||||
|
||||
### مرحله ۳: محاسبه پورسانت (Commission)
|
||||
|
||||
| # | تسک | فایل | شرح |
|
||||
|---|------|------|------|
|
||||
| T3.1 | SP WeeklyBalances + PackageId | sp_CalculateWeeklyBalances.sql | فیلتر بر اساس PackageId |
|
||||
| T3.2 | SP CommissionPool + PackageId | sp_CalculateWeeklyCommissionPool.sql | Pool جداگانه هر پکیج |
|
||||
| T3.3 | Loop روی پکیجها | WeeklyCommissionCalculationService.cs | هر پکیج فعال → محاسبه جداگانه |
|
||||
| T3.4 | ORM Strategy بهبود | OrmCommissionCalculationStrategy.cs | فیلتر PackageId |
|
||||
| T3.5 | تست محاسبات | — | با داده واقعی staging |
|
||||
|
||||
### مرحله ۴: FrontOffice UI
|
||||
|
||||
| # | تسک | صفحه | شرح |
|
||||
|---|------|------|------|
|
||||
| T4.1 | کاشیهای داینامیک | Packages.razor | لود از API + فیچر مقایسه |
|
||||
| T4.2 | مودال پرداخت شرطی | PackageDetail.razor | دکمه دایا فقط اگر SupportsDayaPurchase |
|
||||
| T4.3 | MyPackages re-purchase | MyPackages.razor | نوار پیشرفت + دکمه خرید مجدد |
|
||||
| T4.4 | ActivationSection داینامیک | ActivationSection.razor | قیمت از پکیج |
|
||||
| T4.5 | قرارداد داینامیک | ClubMembershipContractDialog.razor | متن متناسب با پکیج |
|
||||
| T4.6 | PV در Checkout | Checkout.razor | نمایش PV سفارش |
|
||||
| T4.7 | تکرار سفارش | Store Orders pages | دکمه 🔄 |
|
||||
| T4.8 | ردیابی سفارش | OrderTracking.razor | وصل به API |
|
||||
| T4.9 | تنظیمات اعلان | Settings.razor | فرم Email/SMS/Push |
|
||||
|
||||
### مرحله ۵: BackOffice UI
|
||||
|
||||
| # | تسک | صفحه | شرح |
|
||||
|---|------|------|------|
|
||||
| T5.1 | CRUD پکیج بهبود | PackageMainPage.razor | فیلدهای جدید + ستونهای اضافه |
|
||||
| T5.2 | ماتریس فیچر | PackageFeatureMatrixPage.razor (جدید) | checkbox grid |
|
||||
| T5.3 | ActivateClub dropdown | ActivateClubDialog.razor | انتخاب پکیج |
|
||||
| T5.4 | داشبورد بهبود | Index.razor | آمار Pool جداگانه + موجودی |
|
||||
| T5.5 | شبکه بهبود | UserNetworkInfo.razor | جابجایی parent |
|
||||
| T5.6 | موجودی کم | LowStockPage.razor | وصل API |
|
||||
| T5.7 | گزارش ارزش انبار | InventoryMainPage.razor | تب گزارش |
|
||||
| T5.8 | عملیات دستهای | InventoryMainPage.razor | Bulk Add/Update |
|
||||
|
||||
### مرحله ۶: تست و استقرار
|
||||
|
||||
| # | تسک | شرح |
|
||||
|---|------|------|
|
||||
| T6.1 | تست خرید هر پکیج | ZarinPal + Manual |
|
||||
| T6.2 | تست re-purchase | تکمیل چرخه → خرید مجدد |
|
||||
| T6.3 | تست Commission Pool | جداگانه بودن هر پکیج |
|
||||
| T6.4 | تست Migration | rollback plan |
|
||||
| T6.5 | Deploy staging → production | blue-green |
|
||||
|
||||
---
|
||||
|
||||
## ۵. پیشبینی نیازمندیهای آینده
|
||||
|
||||
### ۵.۱ نیازمندیهای مشتری (که فعلاً اولویت پایین هستند)
|
||||
|
||||
| # | نیاز | RPC آماده? | توضیح |
|
||||
|---|------|-----------|-------|
|
||||
| N1 | ارتقای پکیج (نقرهای → پایه) | ❌ جدید | پرداخت تفاضل + فعالسازی فیچرهای جدید |
|
||||
| N2 | مقایسه پکیجها side-by-side | ❌ جدید | جدول فیچر مقایسهای (client-side) |
|
||||
| N3 | اعلان قبل از اتمام چرخه | ❌ جدید | Background service: 5 روز قبل → push/SMS |
|
||||
| N4 | گزارش PV ماهانه | CalculateOrderPV ✅ | جدول PV هر ماه + نمودار |
|
||||
| N5 | پروفایل شبکه | ❌ جدید | مشتری درخت خودش را ببیند |
|
||||
|
||||
### ۵.۲ نیازمندیهای ادمین (که فعلاً اولویت پایین هستند)
|
||||
|
||||
| # | نیاز | RPC آماده? | توضیح |
|
||||
|---|------|-----------|-------|
|
||||
| N6 | پکیج تخفیفی زماندار | ❌ جدید | پکیج با قیمت ویژه برای مدت محدود |
|
||||
| N7 | گزارش تبدیل (conversion) | ❌ جدید | چند نفر از نقرهای به پایه ارتقا دادند |
|
||||
| N8 | هشدار Pool خالی | ❌ جدید | اگر Pool یک پکیج خالی شد → هشدار |
|
||||
| N9 | export گزارش مالی | GetStockValueReport ✅ | دانلود Excel |
|
||||
| N10 | تخصیص فیچر bulk | AssignFeatureToMembership ✅ | فیچر به همه اعضای یک پکیج |
|
||||
|
||||
---
|
||||
|
||||
## ۶. ماتریس تاثیرگذاری بر صفحات
|
||||
|
||||
### FrontOffice
|
||||
|
||||
| صفحه | تغییر | شدت | مرحله |
|
||||
|------|-------|------|-------|
|
||||
| Packages.razor | بازنویسی کامل — کاشیهای داینامیک | 🔴 | مرحله ۴ |
|
||||
| PackageDetail.razor | فیچرها از API + دکمه شرطی | 🟡 | مرحله ۴ |
|
||||
| MyPackages.razor | چرخه + پیشرفت + re-purchase | 🔴 | مرحله ۴ |
|
||||
| Checkout.razor | PV display | 🟢 | مرحله ۴ |
|
||||
| ActivationSection.razor | قیمت داینامیک | 🟡 | مرحله ۴ |
|
||||
| ClubMembershipContractDialog.razor | متن داینامیک | 🟡 | مرحله ۴ |
|
||||
| PaymentCallback.razor | تغییر JWT claims | 🟡 | مرحله ۴ |
|
||||
| MembershipPage.razor | نمایش نوع پکیج | 🟢 | مرحله ۴ |
|
||||
| Settings.razor | فرم اعلان جدید | 🟡 | مرحله ۴ |
|
||||
| Store Orders | دکمه تکرار + ردیابی | 🟡 | مرحله ۴ |
|
||||
|
||||
### BackOffice
|
||||
|
||||
| صفحه | تغییر | شدت | مرحله |
|
||||
|------|-------|------|-------|
|
||||
| PackageMainPage.razor | ستونهای جدید + CRUD بهبود | 🟡 | مرحله ۵ |
|
||||
| PackageFeatureMatrixPage.razor | **صفحه کاملاً جدید** | 🔴 | مرحله ۵ |
|
||||
| ActivateClubDialog.razor | dropdown پکیج | 🟡 | مرحله ۵ |
|
||||
| Index.razor (Dashboard) | آمار Pool جداگانه + موجودی | 🟡 | مرحله ۵ |
|
||||
| UserNetworkInfo.razor | جابجایی + نمایش پکیج | 🟡 | مرحله ۵ |
|
||||
| ClubMembers.razor | ستون پکیج | 🟢 | مرحله ۵ |
|
||||
| Statistics.razor | چارت توزیع پکیج | 🟡 | مرحله ۵ |
|
||||
| InventoryMainPage.razor | خلاصه + گزارش + bulk | 🟡 | مرحله ۵ |
|
||||
| LowStockPage.razor | وصل API | 🟢 | مرحله ۵ |
|
||||
|
||||
---
|
||||
|
||||
## 🔗 ارجاعات
|
||||
|
||||
| مستند | ربط |
|
||||
|-------|-----|
|
||||
| [BIZ-PACKAGE-BASED-SYSTEM.md](../business/BIZ-PACKAGE-BASED-SYSTEM.md) | طراحی فنی ۳۹ تغییر |
|
||||
| [FEATURE-BACKLOG.md](FEATURE-BACKLOG.md) | بکلاگ ۱۲ RPC آماده |
|
||||
| [GRPC-SERVICES-AUDIT.md](../cms/GRPC-SERVICES-AUDIT.md) | آدیت ۳۴۲ RPC |
|
||||
| [BUSINESS-01-CLUB-COMMISSION.md](../business/BUSINESS-01-CLUB-COMMISSION.md) | مستند باشگاه و کمیسیون |
|
||||
| [BUSINESS-04-USER-MEMBERSHIP.md](../business/BUSINESS-04-USER-MEMBERSHIP.md) | مستند عضویت کاربر |
|
||||
|
||||
---
|
||||
|
||||
*آخرین بروزرسانی: ۱۴۰۴/۱۲/۰۶*
|
||||
Reference in New Issue
Block a user