01244f426e
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
495 lines
30 KiB
Markdown
495 lines
30 KiB
Markdown
# 🏗️ تحلیل تحول پکیجبیس — تاثیر بر تجربه کاربر (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) | مستند عضویت کاربر |
|
||
|
||
---
|
||
|
||
*آخرین بروزرسانی: ۱۴۰۴/۱۲/۰۶*
|