1536 lines
57 KiB
Markdown
1536 lines
57 KiB
Markdown
# 📋 کارهای باقیمانده - تجمیع کامل پروژه FourSat
|
||
|
||
> **⚠️ نکته مهم**: برای گزارش کامل آمادگی تحویل، مراجعه کنید به: [DELIVERY-READINESS-REPORT.md](DELIVERY-READINESS-REPORT.md)
|
||
|
||
---
|
||
|
||
## 🟢 BackOffice UI - فعالسازی فرانتاند فروشگاه تخفیفی (تکمیل شده ✅)
|
||
|
||
> **تاریخ تکمیل**: ۱۲ دی ۱۴۰۴ (1 January 2026)
|
||
|
||
تمام سرویسها و صفحات فروشگاه تخفیفی در BackOffice UI فعال شدند:
|
||
|
||
| صفحه | Route | وضعیت |
|
||
|------|-------|-------|
|
||
| مدیریت محصولات تخفیفی | `/discount-products` | ✅ فعال |
|
||
| مدیریت دستهبندیها | `/discount-categories` | ✅ فعال |
|
||
| مدیریت سفارشات | `/discount-orders` | ✅ فعال |
|
||
| گزارش فروش | `/sales-reports` | ✅ فعال |
|
||
| مدیریت تگها | `/tags` | ✅ فعال |
|
||
| پیامهای عمومی | `/public-messages` | ✅ فعال |
|
||
|
||
**تغییرات در `ConfigureService.cs` (1 January 2026):**
|
||
1. فعالسازی Using statements برای proto clients
|
||
2. ثبت gRPC Clients در DI container
|
||
3. ثبت Application Services (DiscountProduct, DiscountCategory, DiscountOrder, Tag, PublicMessage)
|
||
|
||
---
|
||
|
||
## 🟢 Proto Projects - BackOffice (تکمیل شده ✅)
|
||
|
||
> **تاریخ تکمیل**: ۲۳ دی ۱۴۰۴ (13 January 2025)
|
||
|
||
تمام Proto Projects مورد نیاز BackOffice UI ساخته و فعال شدند:
|
||
|
||
| Proto Project | وضعیت | توضیحات |
|
||
|---------------|-------|---------|
|
||
| `BackOffice.BFF.DiscountProduct.Protobuf` | ✅ Done | WebApi Service ساخته شد |
|
||
| `BackOffice.BFF.DiscountCategory.Protobuf` | ✅ Done | WebApi Service ساخته شد |
|
||
| `BackOffice.BFF.DiscountOrder.Protobuf` | ✅ Done | WebApi Service قبلاً موجود بود |
|
||
| `BackOffice.BFF.DiscountShoppingCart.Protobuf` | ✅ Done | WebApi Service + Handlers اصلاح شد |
|
||
| `BackOffice.BFF.Tag.Protobuf` | ✅ Done | WebApi Service ساخته شد |
|
||
| `BackOffice.BFF.ProductTag.Protobuf` | ✅ Done | WebApi Service + Handlers ساخته شد |
|
||
| `BackOffice.BFF.PublicMessage.Protobuf` | ✅ Done | WebApi Service قبلاً موجود بود |
|
||
| `BackOffice.BFF.ManualPayment.Protobuf` | ✅ Done | WebApi Service قبلاً موجود بود |
|
||
|
||
**تغییرات اصلی (13 January 2025):**
|
||
1. ساخت `DiscountCategoryService.cs` (4 RPCs)
|
||
2. ساخت `DiscountShoppingCartService.cs` (5 RPCs)
|
||
3. ساخت `TagService.cs` (6 RPCs)
|
||
4. ساخت `ProductTagService.cs` (5 RPCs)
|
||
5. ساخت Handlers برای ProductTag (Update, Delete, Get, GetAll)
|
||
6. اصلاح Handlers برای DiscountShoppingCart (مطابقت با CMS proto)
|
||
7. فعالسازی `DiscountShoppingCartCQ` از exclude شده در csproj
|
||
|
||
---
|
||
|
||
<style>
|
||
:root {
|
||
--bg: #f8fafc;
|
||
--fg: #0f172a;
|
||
--muted: #475569;
|
||
--accent: #2563eb;
|
||
--border: #e2e8f0;
|
||
--card: #ffffff;
|
||
}
|
||
|
||
body {
|
||
font-family: "Vazirmatn", "Inter", "Segoe UI", "SF Pro Display", system-ui, -apple-system, sans-serif;
|
||
background: var(--bg);
|
||
color: var(--fg);
|
||
line-height: 1.7;
|
||
}
|
||
|
||
h1, h2, h3, h4 {
|
||
letter-spacing: -0.01em;
|
||
margin-top: 1.8em;
|
||
margin-bottom: 0.5em;
|
||
}
|
||
|
||
blockquote {
|
||
background: #eef2ff;
|
||
color: #312e81;
|
||
border-left: 4px solid #6366f1;
|
||
padding: 12px 14px;
|
||
margin: 1.2em 0;
|
||
}
|
||
|
||
code {
|
||
background: #0f172a;
|
||
color: #e2e8f0;
|
||
border-radius: 6px;
|
||
padding: 3px 6px;
|
||
}
|
||
|
||
pre {
|
||
background: #0f172a;
|
||
color: #e2e8f0;
|
||
border-radius: 10px;
|
||
padding: 16px;
|
||
border: 1px solid #1e293b;
|
||
overflow-x: auto;
|
||
}
|
||
|
||
pre code {
|
||
background: transparent;
|
||
padding: 0;
|
||
}
|
||
|
||
hr {
|
||
border: none;
|
||
border-top: 1px solid var(--border);
|
||
margin: 1.8em 0;
|
||
}
|
||
|
||
ul {
|
||
margin: 0.4em 0 0.8em;
|
||
padding-left: 1.4em;
|
||
}
|
||
|
||
strong {
|
||
color: #0f172a;
|
||
}
|
||
</style>
|
||
|
||
> **تاریخ بهروزرسانی**: ۱۲ دی ۱۴۰۴ (2026-01-01)
|
||
> **وضعیت کلی**: FrontOffice 98% | BackOffice 100% ✅
|
||
> **مسیر توسعه**: CMS → BackOffice.BFF → BackOffice (UI) → FrontOffice.BFF → FrontOffice
|
||
|
||
---
|
||
|
||
## 📊 خلاصه وضعیت کلی پروژه
|
||
|
||
### ✅ تکمیل شده
|
||
- **CMS Microservice**: 96% (تمام سرویسهای مورد نیاز مشتری پیادهسازی شده)
|
||
- **BackOffice.BFF**: 100% ✅ (35+ Handlers تکمیل + WebApi Services)
|
||
- **BackOffice UI**: **100%** ✅ (60+ صفحه آماده Production - همه ماژولها فعال)
|
||
- **FrontOffice.BFF**: **98%** ✅ (همه سرویسهای مورد نیاز مشتری پیادهسازی شده)
|
||
- **FrontOffice UI**: **98%** ✅ (28+ صفحه متصل به gRPC - آماده Production)
|
||
|
||
### 🎉 سمت ادمین (BackOffice) - آماده Production ✅
|
||
|
||
تمام قابلیتهای اصلی برای ادمین پیادهسازی و فعال شده:
|
||
- ✅ مدیریت محصولات + دستهبندی
|
||
- ✅ فروشگاه تخفیفی (محصولات، دستهبندی، سفارشات)
|
||
- ✅ مدیریت تگها
|
||
- ✅ پیامهای عمومی
|
||
- ✅ کمیسیون + برداشت
|
||
- ✅ شبکه + باشگاه
|
||
- ✅ پکیجها
|
||
- ✅ کاربران + نقشها
|
||
|
||
### 🎉 سمت مشتری (FrontOffice) - آماده Production
|
||
|
||
تمام قابلیتهای اصلی برای مشتری پیادهسازی شده:
|
||
- ✅ احراز هویت (OTP)
|
||
- ✅ پروفایل + آدرسها
|
||
- ✅ محصولات + دستهبندی
|
||
- ✅ سبد خرید + سفارش + VAT
|
||
- ✅ کیف پول + تراکنشها
|
||
- ✅ شبکه + کمیسیون
|
||
- ✅ باشگاه + پکیجها
|
||
|
||
### 🟡 کارهای باقیمانده (اولویت پایین)
|
||
|
||
#### FrontOffice:
|
||
| تسک | توضیحات | اولویت |
|
||
|-----|---------|--------|
|
||
| **Password Auth** | لاگین با رمز عبور (علاوه بر OTP) | 🟡 Low |
|
||
| **ForgotPassword** | بازیابی رمز عبور | 🟡 Low |
|
||
| **Contact Form** | اتصال فرم تماس به CMS | 🟡 Low |
|
||
| **Reviews** | نظرات محصول | 🟡 Low |
|
||
| **Discount Code** | کد تخفیف | 🟡 Low |
|
||
|
||
#### BackOffice:
|
||
| تسک | توضیحات | اولویت |
|
||
|-----|---------|--------|
|
||
| **Transactions API** | صفحه تراکنشها (UI آماده، API نیاز) | 🟡 Low |
|
||
|
||
---
|
||
|
||
## 🎯 مسیر پیشنهادی توسعه
|
||
|
||
```
|
||
مرحله 1: تکمیل CMS Core APIs ✅ COMPLETE
|
||
├── ✅ Payment Gateway (100%)
|
||
├── ✅ Club Discount Shop System (100%)
|
||
├── ✅ CRUD های پایه
|
||
├── ✅ Commission & Worker System
|
||
└── ✅ Withdrawal & Settlement
|
||
|
||
مرحله 2: تکمیل Payment Gateway + CRUD اضافی (در حال انجام)
|
||
├── ✅ Payment Gateway Backend (100%)
|
||
│ ├── ✅ DayaPaymentService Implementation
|
||
│ ├── ✅ GetWithdrawalReports (CMS + BFF + gRPC)
|
||
│ ├── [✅] CMS gRPC Service (GetWithdrawalReports)
|
||
│ └── [🟡] BackOffice UI (Reports و Withdrawal Management انجام شده، PDF و تستهای Daya باقیمانده)
|
||
├── [✅] Product Bulk Operations - نیم روز
|
||
├── [✅] Order Management - نیم روز (بهبود UI: Timeline، نمودارها، Cancel/Status/Discount در BackOffice UI)
|
||
└── [ ] Public Messages System - نیم روز (تنها بهبودهای UX/UI)
|
||
|
||
مرحله 3: BackOffice UI تکمیلی
|
||
├── [🟡] Financial Reports Page - 1.5 روز (WithdrawalReports + SalesReports پیادهسازی شده؛ خروجی PDF باقیمانده)
|
||
├── [🟡] Withdrawal Management Page - 2 روز (صفحه عملیاتی شده؛ جستجو بر اساس UserId/IbanNumber باقیمانده)
|
||
└── [🟡] Product Bulk Operations UI - نیم روز (Bulk actions در ProductsMainPage.razor انجام شده؛ صفحه BulkEdit مجزا باقیمانده)
|
||
|
||
مرحله 4: FrontOffice (اولویت اصلی بعدی) ✅ 70% Complete
|
||
├── FrontOffice.BFF APIs - ✅ 80% Complete
|
||
│ ├── ✅ Browse Discount Shop Products (Proto ready)
|
||
│ ├── ✅ Club Membership APIs
|
||
│ ├── ✅ Network APIs
|
||
│ ├── ✅ Commission APIs
|
||
│ ├── ✅ Wallet APIs (6 handlers)
|
||
│ ├── [ ] Shopping Cart Management
|
||
│ └── [ ] Order Placement
|
||
└── FrontOffice UI Pages - ✅ 60% Complete
|
||
├── ✅ Product Catalog (متصل به gRPC)
|
||
├── ✅ Shopping Cart
|
||
├── ✅ Checkout Flow
|
||
├── ✅ Order History
|
||
├── ✅ Club & Commission Pages (متصل به gRPC)
|
||
├── ✅ Network Pages (متصل به gRPC)
|
||
├── ✅ Wallet Pages (متصل به gRPC)
|
||
└── [ ] Package Purchase (4 صفحه)
|
||
```
|
||
|
||
---
|
||
|
||
## 🔴 بخش 1: CMS Microservice - کارهای باقیمانده
|
||
|
||
### 1.0 تصحیحات و بهبودهای فوری ⚠️ **بحرانی**
|
||
**وضعیت**: ✅ کامل شده
|
||
**زمان انجام**: 2 روز (4 دسامبر 2024)
|
||
|
||
#### ✅ تکمیل شده:
|
||
- UserWalletChangeLog: اضافه شدن فیلدهای CurrentDiscountBalance و ChangeDiscountValue ✅
|
||
- حذف ParentId از User (فقط NetworkParentId باقی ماند) ✅
|
||
- Migration های مربوطه ✅
|
||
- **اصلاح حق عضویت باشگاه** ✅
|
||
- فیلد GiftValue به ClubMembership اضافه شد
|
||
- حق عضویت (25,200,000) از کیف پول کم نمیشود
|
||
- مقدار از SystemConfiguration خوانده میشود
|
||
- **اصلاح Flash Out Logic** ✅
|
||
- فرمول صحیح پیادهسازی شد: balancesConsumedPerSide = balancesToPay / 2
|
||
- هر طرف نصف تعادل را مصرف میکند
|
||
- محاسبه باقیماندهها درست شد
|
||
- **UserPackagePurchase Entity** ✅
|
||
- جدول جهت پشتیبانی از خرید چندین پکیج ایجاد شد
|
||
- Configuration و Migration آماده
|
||
- DbSet به ApplicationDbContext اضافه شد
|
||
|
||
---
|
||
|
||
### 1.1 Payment Gateway Integration (Phase 10) ⭐ **فوری**
|
||
**وضعیت**: 90% تکمیل (Backend + گزارشهای مالی + صفحات اصلی UI)
|
||
**زمان تخمینی**: 4-5 روز کاری باقیمانده
|
||
|
||
#### ✅ تکمیل شده:
|
||
- Commands: RequestWithdrawal, ProcessWithdrawal, ApproveWithdrawal, RejectWithdrawal
|
||
- Database: UserCommissionPayout, CommissionPayoutHistory
|
||
- IPaymentGatewayService Interface
|
||
- MockPaymentGatewayService (برای Development)
|
||
- DayaPaymentService: پیادهسازی کامل (InitiatePaymentAsync, VerifyPaymentAsync, ProcessPayoutAsync) ✅
|
||
- ProcessWithdrawalCommandHandler یکپارچه با Gateway ✅
|
||
- Entity Updates: BankReferenceId, BankTrackingCode, PaymentFailureReason ✅
|
||
- Enum: PaymentFailed status ✅
|
||
- Configuration: appsettings.json DayaPayment section ✅
|
||
- **گزارشهای مالی Backend** ✅ (4 دسامبر 2024):
|
||
- CMS: GetWithdrawalReportsQuery + Handler + DTOs
|
||
- BackOffice.BFF: GetWithdrawalReportsQuery + Handler
|
||
- Proto: GetWithdrawalReports RPC با message definitions
|
||
- دستهبندی روزانه/هفتگی/ماهانه با پشتیبانی تقویم شمسی
|
||
- خلاصه آماری (تعداد، مبلغ، نرخ موفقیت)
|
||
|
||
#### 🟡 بخشهای باقیمانده:
|
||
**الف. CMS gRPC Service (1 روز) - ✅ انجام شده**
|
||
```
|
||
- [✅] ایجاد CommissionService یا بهروزرسانی موجود
|
||
- [✅] پیادهسازی GetWithdrawalReports RPC handler
|
||
- [✅] Mapping از Domain به Proto
|
||
- [✅] تست gRPC endpoint
|
||
```
|
||
|
||
**ب. BackOffice UI - Withdrawal Management (2 روز)**
|
||
```
|
||
- ✅ صفحه لیست درخواستهای برداشت
|
||
- ✅ دکمههای تأیید/رد با Confirmation Dialog (متصل به ApproveWithdrawal / RejectWithdrawal / ProcessWithdrawal)
|
||
- ✅ نمایش BankReferenceId و TrackingCode
|
||
- ✅ نمایش وضعیت PaymentFailed و دلیل خطا
|
||
- ✅ فیلترینگ بر اساس Status (CommissionPayoutStatus)
|
||
- ✅ جستجو بر اساس UserId/IbanNumber
|
||
```
|
||
|
||
**ج. BackOffice UI - Financial Reports (1.5 روز)**
|
||
```
|
||
- [✅] صفحه گزارشهای مالی با فیلترها (تاریخ، نوع دوره، وضعیت، کاربر)
|
||
- [✅] نمایش گزارشهای دورهای (روزانه/هفتگی/ماهانه)
|
||
- [✅] نمودارها (MudBlazor Charts بهجای Chart.js)
|
||
- [✅] نمایش خلاصه آماری (کارتهای اطلاعاتی در WithdrawalReports/SalesReports)
|
||
- [✅] خروجی Excel/CSV (Export به فایل از طریق UI)
|
||
- [🟡] خروجی PDF (در حال حاضر خروجی متنی ساختارمند از طریق jsSaveAsFile؛ ادغام QuestPDF در نسخه بعدی)
|
||
```
|
||
|
||
**د. تست یکپارچه (نیم روز)**
|
||
```
|
||
- [ ] تست تراکنشهای واقعی با Daya API
|
||
- [ ] تست Callback/Webhook مدیریت
|
||
- [ ] تست retry logic در شرایط خطا
|
||
```
|
||
|
||
---
|
||
|
||
### 1.2 CRUD های اضافی ⭐ **بالا**
|
||
**وضعیت**: 80% (Tag Management و Product Bulk Operations کامل شده، Order Management در BFF تکمیل)
|
||
**زمان تخمینی**: 1 روز باقیمانده
|
||
|
||
#### الف. Tag Management ✅ **کامل شده** (4 دسامبر 2024)
|
||
```
|
||
CMS Application Layer: ✅
|
||
- [✅] CreateTagCommand + Handler + Validator
|
||
- [✅] UpdateTagCommand + Handler + Validator
|
||
- [✅] DeleteTagCommand + Handler
|
||
- [✅] AssignTagToProductCommand + Handler (ProductTag entity)
|
||
- [✅] GetAllTagsQuery + Handler
|
||
- [✅] GetProductsByTagQuery + Handler
|
||
- [✅] Proto: tag.proto, producttag.proto موجود
|
||
- [✅] gRPC Services: TagService, ProductTagService
|
||
- [✅] Mapping: TagProfile با Mapster
|
||
|
||
BackOffice.BFF: ✅
|
||
- [✅] CreateTagCommand + Handler
|
||
- [✅] UpdateTagCommand + Handler
|
||
- [✅] DeleteTagCommand + Handler
|
||
- [✅] AssignTagToProductCommand + Handler
|
||
- [✅] GetAllTagsQuery + Handler
|
||
- [✅] GetTagQuery + Handler
|
||
- [✅] GetProductsByTagQuery + Handler
|
||
- [✅] gRPC Clients: Tags, ProductTags registered
|
||
- [✅] Typo Fixes: ProductGallerys→ProductGalleries, PruductCategory→ProductCategory
|
||
|
||
BackOffice UI: ✅
|
||
- [✅] صفحه مدیریت Tags (لیست + جستجو بر اساس نام/عنوان، فیلتر وضعیت، pagination)
|
||
- [✅] Dialog ایجاد/ویرایش Tag (Name, Title, Description, IsActive, SortOrder)
|
||
- [✅] صفحه/دیالوگ Assign Tags به محصولات (از طریق ProductsMainPage → AssignTagsDialog، شامل نمایش تگهای فعلی هر محصول و امکان حذف آنها)
|
||
```
|
||
|
||
**مستندات**: Backend + BackOffice.BFF + UI کامل برای Tag Management
|
||
|
||
#### ب. Product Bulk Operations ✅ **کامل شده** (4 دسامبر 2024)
|
||
```
|
||
CMS Application Layer: ✅
|
||
- [✅] BulkUpdateProductPricesCommand + Handler + Validator
|
||
- [✅] BulkUpdateProductStockCommand + Handler + Validator
|
||
- [✅] GetLowStockProductsQuery + Handler + Validator
|
||
- [✅] ToggleProductStatusCommand + Handler + Validator
|
||
- [✅] Response DTOs با error tracking
|
||
- [✅] Logging برای همه عملیات
|
||
|
||
CMS Protobuf + gRPC: ✅
|
||
- [✅] products.proto: 4 RPC جدید (BulkUpdateProductPrices, BulkUpdateProductStock, GetLowStockProducts, ToggleProductStatus)
|
||
- [✅] Message definitions: ProductPriceUpdate, ProductStockUpdate, LowStockProduct, BulkOperationError
|
||
- [✅] StockUpdateType enum (Set/Add/Subtract)
|
||
- [✅] ProductsService: 4 handler افزوده شد
|
||
- [✅] Mapster mappings در ProductsProfile
|
||
|
||
BackOffice.BFF: ✅
|
||
- [✅] BulkUpdateProductPricesCommand + Handler
|
||
- [✅] BulkUpdateProductStockCommand + Handler
|
||
- [✅] GetLowStockProductsQuery + Handler
|
||
- [✅] ToggleProductStatusCommand + Handler
|
||
- [✅] DTOs با rename برای جلوگیری از conflict با proto
|
||
- [✅] gRPC client integration
|
||
|
||
BackOffice UI: ✅
|
||
- [✅] DataGrid با انتخاب چندتایی و Bulk Actions (ToggleStatus/Delete) در ProductsMainPage.razor
|
||
- [✅] صفحه Bulk Edit Products (Pages/Products/BulkEdit.razor) با DataGrid و Multiple Selection
|
||
- [✅] فرم Bulk Update برای ویرایش همزمان قیمت، تخفیف، موجودی (StockUpdateType: Set/Add/Subtract) و وضعیت (Toggle Status) چند محصول، متصل به BulkUpdateProductPrices / BulkUpdateProductStock / ToggleProductStatus
|
||
```
|
||
|
||
#### ج. Order Management ✅ **کامل شده** (4 دسامبر 2024)
|
||
```
|
||
CMS Application Layer: ✅
|
||
- [✅] CancelOrderCommand + Handler + Validator (از قبل موجود)
|
||
- [✅] UpdateOrderStatusCommand + Handler + Validator (TODO با راهنمای State Machine)
|
||
- [✅] GetOrdersByDateRangeQuery + Handler + Validator (TODO با فیلترهای پیشرفته و Pagination)
|
||
- [✅] ApplyDiscountToOrderCommand + Handler + Validator (TODO با validation تخفیف دستی)
|
||
- [✅] CalculateOrderPVQuery + Handler + Validator (TODO با محاسبه PV برای MLM)
|
||
- [✅] Response DTOs با error handling
|
||
|
||
BackOffice.BFF: ✅
|
||
- [✅] 5 Handlers (CancelOrder, UpdateOrderStatus, GetOrdersByDateRange, ApplyDiscountToOrder, CalculateOrderPV)
|
||
|
||
BackOffice UI: ✅
|
||
- [✅] دکمه Cancel Order با Dialog دلیل لغو و انتخاب بازگشت وجه (CancelOrderDialog → CancelOrder)
|
||
- [✅] Dialog تغییر Status ارسال (ChangeOrderStatusDialog → UpdateOrderStatus) در UserOrderMainPage.razor
|
||
- [✅] فیلترهای پیشرفته (شناسه سفارش/کاربر/تراکنش، فیلترهای ترکیبی)
|
||
- [✅] Dialog اعمال تخفیف (ApplyDiscountDialog → ApplyDiscountToOrder)
|
||
```
|
||
|
||
**سطوح دسترسی**:
|
||
- SuperAdmin: همه عملیات ✅
|
||
- Admin: همه عملیات محصولات/سفارشات ✅
|
||
- Inspector: فقط مشاهده ✅
|
||
|
||
---
|
||
|
||
### 1.3 Public Messages System ⭐ **متوسط**
|
||
**وضعیت**: ✅ 100% تکمیل CMS Backend (4 دسامبر 2024)
|
||
**زمان صرف شده**: 1 روز
|
||
|
||
#### ✅ تکمیل شده:
|
||
```
|
||
CMS:
|
||
- [✅] Proto: public_messages.proto موجود
|
||
- [✅] Entity: PublicMessage (merged با فیلدهای کامل)
|
||
- Title, Content, Type (MessageType enum)
|
||
- Priority (MessagePriority enum)
|
||
- IsActive, IsArchived
|
||
- StartDate, EndDate, PublishedAt, ArchivedAt
|
||
- CreatedByUserId, ViewCount, LinkUrl, LinkText
|
||
- StartsAt/ExpiresAt (backward compatibility properties)
|
||
- [✅] Enum: MessageType (Announcement, News, Warning, Promotion, SystemUpdate, Event)
|
||
- [✅] CreatePublicMessageCommand + Handler + Validator (موجود)
|
||
- [✅] UpdatePublicMessageCommand + Handler + Validator (موجود)
|
||
- [✅] DeletePublicMessageCommand + Handler (موجود)
|
||
- [✅] PublishMessageCommand + Handler + Validator (TODO)
|
||
- [✅] ArchiveMessageCommand + Handler + Validator (TODO)
|
||
- [✅] GetAllMessagesQuery + Handler + Validator (موجود - AdminPublicMessageDto)
|
||
- [✅] GetActiveMessagesQuery + Handler + Validator (موجود - PublicMessageDto)
|
||
- [✅] GetPublicMessageQuery + Handler + Validator (TODO - single message)
|
||
```
|
||
|
||
**نکته مهم**:
|
||
- Entity از قبل دو نسخه موجود بود (Entities/PublicMessage.cs و Entities/Message/PublicMessage.cs)
|
||
- نسخه قدیمی حذف و نسخه جدید merge شد
|
||
- Commands/Queries قبلی موجود بودند: Create, Update, Delete, GetAll, GetActive
|
||
- 3 operation جدید اضافه شد: PublishMessage, ArchiveMessage, GetPublicMessage
|
||
- DTOs آپدیت شدند برای nullable dates (StartsAt, ExpiresAt, CreatedByUserId)
|
||
|
||
#### ❌ باقیمانده:
|
||
|
||
```
|
||
CMS:
|
||
- [✅] Proto: public_messages.proto موجود
|
||
- [✅] Entity: PublicMessage (Title, Content, Type, StartDate, EndDate, IsActive)
|
||
- [✅] Enum: MessageType (Info, Warning, Error, Success)
|
||
#### ❌ باقیمانده:
|
||
```
|
||
BackOffice.BFF:
|
||
- [✅] 8 Handlers (Create/Update/Delete/Publish/Archive/GetAll/GetActive/GetById)
|
||
|
||
BackOffice UI:
|
||
- [✅] صفحه لیست اعلانات (DataGrid)
|
||
- [✅] Dialog ایجاد/ویرایش اعلان
|
||
- [✅] دکمه Publish/Archive
|
||
- [✅] پیشنمایش اعلان
|
||
```
|
||
|
||
**سطوح دسترسی**:
|
||
- SuperAdmin: همه عملیات ✅
|
||
- Admin: Create, Update, Publish ✅
|
||
- Inspector: فقط مشاهده ✅
|
||
|
||
**مستندات**: `CMS/public-messages-system.md` موجود است
|
||
|
||
---
|
||
|
||
### 1.4 Package Purchase System 🔴 **بسیار بالا** (جدید)
|
||
**وضعیت**: ✅ 85% تکمیل Backend (4 دسامبر 2024)
|
||
**زمان صرف شده**: 1.5 روز
|
||
**زمان باقیمانده**: 0.5 روز Backend + UI
|
||
**مستندات**: `totalDoc/CMS/package-purchase-system.md` ✅
|
||
|
||
#### ✅ الف. Entity Changes (1 روز) - تکمیل شده
|
||
```
|
||
- [✅] ایجاد Enum: PackagePurchaseMethod (None, DayaLoan, DirectPurchase)
|
||
محل: CMSMicroservice.Domain/Enums/PackagePurchaseMethod.cs
|
||
|
||
- [✅] اضافه کردن فیلد به User:
|
||
public PackagePurchaseMethod PackagePurchaseMethod { get; set; } = PackagePurchaseMethod.None;
|
||
|
||
- [✅] اضافه کردن فیلد به ClubMembership:
|
||
public PackagePurchaseMethod PurchaseMethod { get; set; }
|
||
|
||
- [ ] ایجاد Migration: AddPackagePurchaseMethod (نیاز به migration دستی)
|
||
- [ ] Update-Database
|
||
```
|
||
|
||
#### ✅ ب. Commands & Handlers (1 روز) - تکمیل شده
|
||
```
|
||
CMS Application Layer:
|
||
- [✅] PurchaseGoldenPackageCommand + Handler + Validator (TODO)
|
||
- بررسی User.PackagePurchaseMethod != None
|
||
- ثبت UserOrder با PackageId
|
||
- Redirect به درگاه IPG
|
||
- InitiatePaymentAsync از IPaymentGatewayService
|
||
|
||
- [✅] VerifyGoldenPackagePurchaseCommand + Handler + Validator (TODO)
|
||
- Verify پرداخت با بانک
|
||
- شارژ UserWallet.Balance (56M)
|
||
- ثبت Transaction (Type: DepositIpg)
|
||
- ثبت UserWalletChangeLog
|
||
- Set User.PackagePurchaseMethod = DirectPurchase
|
||
- بهروزرسانی UserOrder
|
||
|
||
- [✅] ActivateClubMembershipCommand + Handler (موجود - آپدیت شده)
|
||
- بررسی User.PackagePurchaseMethod != None
|
||
- بررسی UserWallet.Balance >= 56M
|
||
- پیدا کردن UserOrder با PackageId
|
||
- بررسی Transaction.Type (DepositIpg یا DepositExternal1)
|
||
- ثبت/بهروزرسانی ClubMembership
|
||
- Set ClubMembership.PurchaseMethod
|
||
|
||
- [ ] ChargeDiscountWalletCommand + Handler
|
||
- Redirect به درگاه برای شارژ DiscountBalance
|
||
|
||
- [ ] VerifyDiscountWalletChargeCommand + Handler
|
||
- Verify پرداخت
|
||
- شارژ UserWallet.DiscountBalance
|
||
- ثبت Transaction (Type: DiscountWalletCharge)
|
||
```
|
||
|
||
#### ج. بهروزرسانی DayaLoan Flow (0.5 روز)
|
||
```
|
||
- [ ] تغییر ProcessDayaLoanCommandHandler:
|
||
user.PackagePurchaseMethod = PackagePurchaseMethod.DayaLoan;
|
||
|
||
- [✅] GetUserPackageStatusQuery + Handler + Validator (TODO)
|
||
- دریافت وضعیت خرید پکیج کاربر
|
||
- PackagePurchaseMethod, HasPurchased, IsClubMemberActive
|
||
- WalletBalance, CanActivateClubMembership
|
||
```
|
||
|
||
#### ✅ ج. gRPC & Proto (0.5 روز) - تکمیل شده
|
||
```
|
||
CMS:
|
||
- [✅] package.proto:
|
||
- PurchaseGoldenPackage RPC
|
||
- VerifyGoldenPackagePurchase RPC
|
||
- GetUserPackageStatus RPC
|
||
- Request/Response messages
|
||
- [✅] PackageService.cs: پیادهسازی 3 RPC جدید
|
||
- [✅] PackageProfile.cs: Mapster mappings (Command/Query ↔ Proto)
|
||
|
||
BackOffice.BFF:
|
||
- [✅] package.proto: GetUserPackageStatus RPC (Admin view)
|
||
- [✅] PackageService.cs: پیادهسازی RPC
|
||
- [✅] GetUserPackageStatusQuery + Handler + Validator (TODO)
|
||
- [✅] PackageProfile.cs: Mapster mapping
|
||
- [✅] Project Reference: BackOffice.BFF.Package.Protobuf added
|
||
```
|
||
|
||
#### ❌ د. BackOffice UI (نیم روز) - باقیمانده
|
||
```
|
||
- [ ] تست PurchaseGoldenPackageCommand:
|
||
- کاربر با PackagePurchaseMethod != None → خطا
|
||
- کاربر جدید → موفق
|
||
|
||
- [ ] تست ActivateClubMembershipCommand:
|
||
- کاربر بدون پکیج → خطا
|
||
- کاربر با موجودی < 56M → خطا
|
||
- کاربر معتبر → موفق
|
||
|
||
- [ ] تست VerifyDiscountWalletChargeCommand:
|
||
- پرداخت موفق → DiscountBalance افزایش یابد
|
||
```
|
||
|
||
#### ه. Documentation (0.5 روز)
|
||
```
|
||
- [✅] package-purchase-system.md ایجاد شد
|
||
- [ ] بهروزرسانی implementation-progress.md
|
||
```
|
||
|
||
**نکات کلیدی**:
|
||
- کاربر فقط **یک بار** میتواند پکیج طلایی بخرد (سناریو 1 یا 2)
|
||
- فعالسازی باشگاه **توسط خود کاربر** از FrontOffice UI
|
||
- فعالسازی باشگاه **بدون نیاز به تایید Admin**
|
||
- سناریو 3 (شارژ DiscountBalance) **هیچ ارتباطی** با Package ندارد
|
||
- کمیسیونها **فقط بعد** از فعالسازی ClubMembership محاسبه میشوند
|
||
|
||
---
|
||
|
||
### 1.5 Discount Shop System 🟡 **متوسط** (جدید)
|
||
**وضعیت**: 0%
|
||
**زمان تخمینی**: 15.5 روز (~3 هفته)
|
||
**مستندات**: `totalDoc/CMS/discount-shop-system.md` ✅
|
||
|
||
#### الف. Entity Creation (2 روز)
|
||
```
|
||
CMS Domain (namespace: DiscountShop):
|
||
- [ ] DiscountProduct
|
||
- Title, Description, Price, DiscountPercent
|
||
- ImagePath, ThumbnailPath
|
||
- SaleCount, ViewCount, RemainingCount
|
||
- IsActive
|
||
|
||
- [ ] DiscountCategory
|
||
- Name, Title, Description, ImagePath
|
||
- ParentId (self-referencing)
|
||
- IsActive, SortOrder
|
||
|
||
- [ ] DiscountProductCategory (Many-to-Many)
|
||
|
||
- [ ] DiscountShoppingCart
|
||
- UserId, DiscountProductId, Count, UnitPrice
|
||
|
||
- [ ] DiscountOrder
|
||
- UserId, TotalAmount, DiscountAmount, PayableAmount
|
||
- PaymentStatus, PaymentDate, TransactionId
|
||
- UserAddressId, DeliveryStatus, TrackingCode
|
||
|
||
- [ ] DiscountOrderDetail
|
||
- DiscountOrderId, DiscountProductId
|
||
- Quantity, UnitPrice, DiscountPercent, TotalPrice
|
||
|
||
CMS Infrastructure:
|
||
- [ ] Configuration classes برای هر Entity
|
||
- [ ] بهروزرسانی DbContext
|
||
- [ ] Migration: AddDiscountShopTables
|
||
- [ ] Update-Database
|
||
```
|
||
|
||
#### ب. CMS Commands & Queries (3 روز)
|
||
```
|
||
DiscountProduct CRUD:
|
||
- [ ] CreateDiscountProductCommand + Handler + Validator
|
||
- [ ] UpdateDiscountProductCommand + Handler + Validator
|
||
- [ ] DeleteDiscountProductCommand + Handler
|
||
- [ ] GetDiscountProductByIdQuery + Handler + DTO
|
||
- [ ] GetDiscountProductsListQuery + Handler + DTO
|
||
|
||
DiscountCategory CRUD:
|
||
- [ ] CreateDiscountCategoryCommand + Handler + Validator
|
||
- [ ] UpdateDiscountCategoryCommand + Handler + Validator
|
||
- [ ] DeleteDiscountCategoryCommand + Handler
|
||
- [ ] GetDiscountCategoriesTreeQuery + Handler + DTO
|
||
|
||
Shopping Cart:
|
||
- [ ] AddToDiscountCartCommand + Handler
|
||
- [ ] RemoveFromDiscountCartCommand + Handler
|
||
- [ ] GetDiscountCartQuery + Handler + DTO
|
||
|
||
Order:
|
||
- [ ] CreateDiscountOrderCommand (Checkout) + Handler
|
||
- بررسی UserWallet.DiscountBalance
|
||
- کم کردن موجودی
|
||
- ثبت Transaction (Type: Buy)
|
||
- ثبت DiscountOrder + DiscountOrderDetail
|
||
- خالی کردن Cart
|
||
- [ ] GetDiscountOrderByIdQuery + Handler + DTO
|
||
- [ ] GetMyDiscountOrdersQuery + Handler + DTO
|
||
- [ ] UpdateDiscountOrderDeliveryCommand + Handler (Admin)
|
||
```
|
||
|
||
#### ج. BackOffice.BFF APIs (1 روز)
|
||
```
|
||
Proto: DiscountShopContract.proto
|
||
- [ ] CreateDiscountProduct
|
||
- [ ] UpdateDiscountProduct
|
||
- [ ] GetDiscountProducts
|
||
- [ ] CreateDiscountCategory
|
||
- [ ] GetDiscountCategoriesTree
|
||
- [ ] GetDiscountOrders
|
||
- [ ] UpdateDiscountOrderDelivery
|
||
|
||
Handlers: 7 عدد
|
||
```
|
||
|
||
#### د. FrontOffice.BFF APIs (1 روز)
|
||
```
|
||
Proto: DiscountShopContract.proto
|
||
- [ ] GetDiscountProducts (Browse)
|
||
- [ ] GetDiscountProductById
|
||
- [ ] AddToDiscountCart
|
||
- [ ] GetMyDiscountCart
|
||
- [ ] RemoveFromDiscountCart
|
||
- [ ] CheckoutDiscountCart
|
||
- [ ] GetMyDiscountOrders
|
||
|
||
Handlers: 7 عدد
|
||
```
|
||
|
||
#### ه. BackOffice UI (3 روز)
|
||
```
|
||
- [ ] صفحه لیست محصولات تخفیفی + CRUD
|
||
- [ ] صفحه مدیریت دستهبندیها (Tree View) + CRUD
|
||
- [ ] صفحه لیست سفارشات تخفیفی
|
||
- [ ] تغییر وضعیت ارسال سفارشات
|
||
- [ ] گزارش فروش Discount Shop
|
||
```
|
||
|
||
#### و. FrontOffice UI (3 روز)
|
||
```
|
||
- [ ] صفحه لیست محصولات تخفیفی (با فیلتر)
|
||
- [ ] صفحه جزئیات محصول تخفیفی
|
||
- [ ] سبد خرید تخفیفی
|
||
- [ ] Checkout (نمایش DiscountBalance)
|
||
- [ ] لیست سفارشات تخفیفی کاربر
|
||
```
|
||
|
||
#### ز. Unit Tests (2 روز)
|
||
```
|
||
- [ ] تست CRUD محصولات تخفیفی
|
||
- [ ] تست AddToDiscountCart
|
||
- [ ] تست CheckoutDiscountCart:
|
||
- موجودی کافی → موفق
|
||
- موجودی ناکافی → خطا
|
||
```
|
||
|
||
#### ح. Documentation (0.5 روز)
|
||
```
|
||
- [✅] discount-shop-system.md ایجاد شد
|
||
- [ ] بهروزرسانی implementation-progress.md
|
||
```
|
||
|
||
**نکات کلیدی**:
|
||
- خرید از Discount Shop **فقط** با `DiscountBalance`
|
||
- خرید از Regular Shop **فقط** با `Balance`
|
||
- هیچ ارتباطی بین محصولات Discount و Regular نیست
|
||
- Admin مدیریت جداگانه برای هر فروشگاه
|
||
- پرداخت از **یک درگاه** مشترک ولی Transaction Types متفاوت
|
||
|
||
---
|
||
|
||
### 1.6 Manual Payment System ⭐ **بالا**
|
||
**وضعیت**: 50% (CMS + BackOffice.BFF)
|
||
**زمان تخمینی**: 2 روز (UI و FrontOffice باقیمانده)
|
||
|
||
```
|
||
CMS Domain:
|
||
- [✅] ManualPaymentStatus enum (Pending, Approved, Rejected, Cancelled)
|
||
- [✅] ManualPaymentType enum (CashDeposit, DiscountWalletCharge, NetworkWalletCharge, Settlement, ErrorCorrection, Refund, Other)
|
||
- [✅] ManualPayment entity (`ManualPayment`) با فیلدهای UserId, Amount, Type, Status, ReferenceNumber, RequestedBy, ApprovedBy, ApprovedAt, RejectionReason, TransactionId
|
||
|
||
CMS Application:
|
||
- [✅] CreateManualPaymentCommand + Handler + Validator (ثبت پرداخت دستی توسط Admin)
|
||
- [✅] ApproveManualPaymentCommand + Handler (تایید و اعمال روی کیفپول و لاگها)
|
||
- [✅] RejectManualPaymentCommand + Handler (رد درخواست با دلیل)
|
||
- [✅] GetAllManualPaymentsQuery + Handler (فهرست با فیلتر UserId/Status/Type/RequestedBy)
|
||
- [ ] VerifyManualPaymentCommand / ProcessManualPaymentCommand / GetUserManualPaymentHistoryQuery (برای سناریوی FrontOffice - در این نسخه پیادهسازی نشدهاند)
|
||
|
||
CMS Infrastructure:
|
||
- [✅] ManualPaymentConfiguration + DbSet<ManualPayment> + Migration AddManualPaymentSystem
|
||
- [✅] gRPC Service: ManualPaymentContract (Create/Approve/Reject/GetAllManualPayments)
|
||
|
||
BackOffice.BFF:
|
||
- [✅] CreateManualPaymentCommandHandler (Admin → CMS.CreateManualPayment)
|
||
- [✅] ApproveManualPaymentCommandHandler (SuperAdmin → CMS.ApproveManualPayment)
|
||
- [✅] RejectManualPaymentCommandHandler (SuperAdmin → CMS.RejectManualPayment)
|
||
- [✅] GetManualPaymentsQueryHandler (لیست/فیلتر ManualPayments از CMS)
|
||
|
||
BackOffice UI:
|
||
- [ ] صفحه لیست درخواستهای Manual Payment (Admin)
|
||
- [ ] Dialog نمایش رسید (تصویر)
|
||
- [ ] دکمههای Approve/Reject
|
||
- [ ] فیلتر Status
|
||
```
|
||
|
||
**Flow**:
|
||
```
|
||
User → CreateManualPaymentRequest
|
||
├── CardToCard → آپلود رسید → Status=PendingAdminApproval
|
||
└── OnlineGateway → Redirect به درگاه → VerifyManualPayment → Status=PaymentCompleted
|
||
|
||
Admin → GetPendingManualPayments → Approve/Reject
|
||
```
|
||
|
||
**مستندات**: `CMS/manual-payment-system.md` موجود است (537 خط)
|
||
|
||
---
|
||
|
||
### 1.7 VAT System (مالیات بر ارزش افزوده) ⭐ **متوسط**
|
||
**وضعیت**: ✅ تکمیل شد (CMS + BackOffice.BFF + BackOffice UI)
|
||
**زمان تخمینی**: 2 روز
|
||
|
||
```
|
||
CMS Domain:
|
||
- [✅] OrderVAT Entity با VatRate, BaseAmount, VatAmount, TotalAmount, IsPaid
|
||
- [✅] UserOrder.HasVAT و Navigation به OrderVAT
|
||
|
||
CMS Application:
|
||
- [✅] SeedVATConfigurationCommand (VAT.Rate, VAT.IsEnabled)
|
||
- [✅] محاسبه VatAmount در SubmitShopBuyOrder و ذخیره در OrderVAT
|
||
- [✅] اضافه شدن VatInfo به GetUserOrderResponseDto و QueryHandler
|
||
|
||
CMS Configuration:
|
||
- [✅] ConfigurationScope.VAT و کلیدهای VAT.Rate, VAT.IsEnabled
|
||
|
||
BackOffice.BFF:
|
||
- [✅] Handler: GetCurrentVatPercentageQuery
|
||
- [✅] Handler: SetDefaultVatPercentageCommand
|
||
- [✅] اضافه شدن VatAmount/VatPercentage به DTOهای UserOrder برای OrdersMainPage
|
||
|
||
BackOffice UI:
|
||
- [✅] نمایش VatAmount/VatPercentage در UserOrder/OrdersMainPage.razor
|
||
- [✅] نمایش BaseAmount/VatAmount/TotalAmount در UserOrderDetailsDialog
|
||
- [✅] تنظیمات VAT در SystemManagement/Configuration.razor (DefaultVatPercentage)
|
||
|
||
FrontOffice UI:
|
||
- [ ] نمایش VAT در سبد خرید
|
||
- [ ] نمایش VAT در صفحه Checkout
|
||
* "شامل 10% مالیات بر ارزش افزوده"
|
||
* جزئیات: مبلغ کالا + مالیات = مبلغ نهایی
|
||
```
|
||
|
||
---
|
||
|
||
### 1.8 RBAC (Role-Based Access Control) ⭐⭐ **حیاتی**
|
||
**وضعیت**: 20% (لایه BackOffice.BFF آماده، CMS/WebApi/UI باقی مانده)
|
||
**زمان تخمینی**: 1.5 هفته (10 روز کاری)
|
||
|
||
#### 3 نقش اصلی:
|
||
|
||
**1. SuperAdmin (سوپر ادمین)**
|
||
```
|
||
دسترسی کامل به:
|
||
- ✅ تمام بخشها
|
||
- ✅ مدیریت کاربران
|
||
- ✅ مدیریت نقشها
|
||
- ✅ تنظیمات سیستم
|
||
- ✅ Configuration Keys
|
||
- ✅ تغییر VAT
|
||
- ✅ حذف هر چیزی
|
||
```
|
||
|
||
**2. Admin (ادمین)**
|
||
```
|
||
دسترسی به:
|
||
- ✅ Dashboard
|
||
- ✅ سفارشات (Create, Update, Cancel)
|
||
- ✅ محصولات (CRUD)
|
||
- ✅ کاربران (View, Update - بدون Delete)
|
||
- ✅ کمیسیونها (View, Approve Withdrawal)
|
||
- ✅ Public Messages (Create, Update, Publish)
|
||
- ❌ تنظیمات حساس (Configuration Keys, VAT)
|
||
- ❌ حذف کاربران
|
||
- ❌ مدیریت نقشها
|
||
```
|
||
|
||
**3. Inspector (بازرس - فقط مشاهده)**
|
||
```
|
||
دسترسی به:
|
||
- ✅ Dashboard (Read-Only)
|
||
- ✅ گزارشها (View)
|
||
- ✅ سفارشات (View)
|
||
- ✅ کاربران (View)
|
||
- ✅ کمیسیونها (View)
|
||
- ❌ هیچ عملیات ویرایش/حذف/ایجاد
|
||
- ❌ Approve/Reject
|
||
- ❌ تنظیمات
|
||
```
|
||
|
||
#### پیادهسازی:
|
||
|
||
**الف. CMS Domain (1 روز)**
|
||
```
|
||
- [✅] Role entity و UserRole موجود است
|
||
- [ ] Permission entity:
|
||
- Id, Name, DisplayName, Category
|
||
- مثال: "orders.create", "orders.update", "orders.delete", "orders.view"
|
||
- [ ] RolePermission entity (Many-to-Many)
|
||
- [ ] Seed Data: 3 نقش + Permissions مربوطه
|
||
```
|
||
|
||
**ب. CMS Application (2 روز)**
|
||
```
|
||
- [ ] IAuthorizationService interface
|
||
- [ ] AuthorizationService implementation
|
||
- [ ] CheckPermissionQuery + Handler
|
||
- [ ] GetUserPermissionsQuery + Handler
|
||
- [ ] AssignRoleToUserCommand + Handler
|
||
- [ ] CreateRoleCommand + Handler (SuperAdmin only)
|
||
- [ ] UpdateRolePermissionsCommand + Handler (SuperAdmin only)
|
||
```
|
||
|
||
**ج. CMS WebApi/Protobuf (1 روز)**
|
||
```
|
||
- [ ] اضافه کردن [Authorize(Policy = "Permission:orders.create")]
|
||
- [ ] Registration Policies در Program.cs:
|
||
builder.Services.AddAuthorization(options => {
|
||
options.AddPolicy("Permission:orders.create",
|
||
policy => policy.RequireAssertion(...));
|
||
});
|
||
```
|
||
|
||
**د. BackOffice.BFF (2 روز)**
|
||
```
|
||
- [✅] AuthorizationHandler: CheckUserPermissionHandler (CQRS Query + Handler روی IPermissionService)
|
||
- [✅] AuthorizationHandler: GetUserRolesHandler (CQRS Query برای برگرداندن Roles کاربر جاری)
|
||
- [✅] Middleware: Permission Check قبل از فراخوانی CMS (gRPC Interceptor با Attribute: [RequiresPermission]، فعلاً روی UserOrderService, ManualPaymentService, ConfigurationService اعمال شده)
|
||
```
|
||
|
||
**ه. BackOffice UI (4 روز)**
|
||
```
|
||
- [ ] NavMenu.razor: فیلتر کردن Menu Items بر اساس Permission
|
||
* مثال: اگر "orders.create" نداشت، دکمه "ایجاد سفارش" نمایش نده
|
||
- [ ] AuthorizationService.cs (Client-side)
|
||
* کش کردن Permissions کاربر در LocalStorage
|
||
* Refresh هر ساعت
|
||
- [ ] صفحه مدیریت نقشها (SuperAdmin only):
|
||
* لیست Roles
|
||
* Dialog: Assign Permissions به Role
|
||
* Tree View: دستهبندی Permissions
|
||
- [ ] صفحه مدیریت کاربران:
|
||
* Dialog: Assign Role به User
|
||
* Dropdown: SuperAdmin/Admin/Inspector
|
||
- [ ] Disable دکمهها برای Inspector:
|
||
* Edit/Delete buttons → Disabled=true
|
||
* فقط View Details active
|
||
```
|
||
|
||
**مثال Permission Tree**:
|
||
```
|
||
Orders
|
||
├── orders.view
|
||
├── orders.create
|
||
├── orders.update
|
||
├── orders.delete
|
||
└── orders.approve
|
||
|
||
Commission
|
||
├── commission.view
|
||
├── commission.approve_withdrawal
|
||
└── commission.reject_withdrawal
|
||
|
||
Users
|
||
├── users.view
|
||
├── users.create
|
||
├── users.update
|
||
├── users.delete
|
||
└── users.assign_role
|
||
|
||
Settings
|
||
├── settings.view
|
||
└── settings.update
|
||
```
|
||
|
||
---
|
||
|
||
### 1.9 Club Discount Shop System (Phase 9) ✅ **تکمیل شده**
|
||
**وضعیت**: 100%
|
||
**تاریخ تکمیل**: 2024-12-04
|
||
**مدت زمان**: 1 روز
|
||
|
||
#### ✅ پیادهسازی کامل:
|
||
- ✅ **6 Entities**: DiscountCategory, DiscountProduct, DiscountProductCategory, DiscountShoppingCart, DiscountOrder, DiscountOrderItem
|
||
- ✅ **6 EF Configurations** + Migration (AddDiscountShopSystem)
|
||
- ✅ **13 Commands** with Handlers:
|
||
- Product: Create, Update, Delete
|
||
- Category: Create, Update, Delete
|
||
- Cart: AddToCart, RemoveFromCart, UpdateItemCount, ClearCart
|
||
- Order: PlaceOrder, CompletePayment, UpdateOrderStatus
|
||
- ✅ **6 Queries** with Handlers:
|
||
- GetDiscountProducts (with filters)
|
||
- GetDiscountProductById
|
||
- GetDiscountCategories (tree structure)
|
||
- GetUserCart (with totals)
|
||
- GetOrderById
|
||
- GetUserOrders (with pagination)
|
||
- ✅ **9 Validators**: Complete validation for all critical operations
|
||
- ✅ **4 Proto files** (529 lines, 19 gRPC RPCs)
|
||
- ✅ **4 gRPC Services**: DiscountProductService, DiscountCategoryService, DiscountShoppingCartService, DiscountOrderService
|
||
- ✅ **Hybrid Payment Logic**: MaxDiscountPercent calculation
|
||
- ✅ **Stock Management**: Automatic inventory updates
|
||
- ✅ **Build Status**: 0 errors, 287 warnings
|
||
|
||
**Business Logic**:
|
||
- کاربر میتواند تا سقف MaxDiscountPercent از کیف پول تخفیف استفاده کند
|
||
- مبلغ باقیمانده باید از طریق درگاه پرداخت شود
|
||
- Order lifecycle: Pending → Processing → Shipped → Delivered/Cancelled
|
||
|
||
**مستندات**: [implementation-progress.md](CMS/implementation-progress.md) - Phase 9 Section
|
||
|
||
---
|
||
|
||
### 1.10 Daya Loan - Real API Integration
|
||
**وضعیت**: Mock آماده، Real API منتظر
|
||
**زمان**: بستگی به آماده بودن API دایا دارد
|
||
|
||
```
|
||
- [✅] همه چیز پیادهسازی شده (Mock)
|
||
- [ ] جایگزینی MockDayaLoanApiService با DayaLoanApiService
|
||
- [ ] تنظیم API Key در appsettings.json
|
||
- [ ] تست Production
|
||
```
|
||
|
||
---
|
||
|
||
## 🟡 بخش 2: BackOffice.BFF - کارهای باقیمانده
|
||
|
||
**وضعیت کلی**: 100% برای APIهای فعلی CMS
|
||
**کارهای جدید**: 19 Handler جدید برای Discount Shop System
|
||
|
||
### 2.1 Discount Shop Integration ⭐ **فوری**
|
||
**وضعیت**: 0%
|
||
**زمان تخمینی**: 4 روز
|
||
**مستندات**: 📋 [discount-shop-integration-plan.md](BackOffice.BFF/discount-shop-integration-plan.md)
|
||
|
||
#### الف. آپدیت Interface & Context (30 دقیقه)
|
||
```csharp
|
||
IApplicationContractContext:
|
||
- [ ] DiscountProducts (DiscountProductContractClient)
|
||
- [ ] DiscountCategories (DiscountCategoryContractClient)
|
||
- [ ] DiscountShoppingCarts (DiscountShoppingCartContractClient)
|
||
- [ ] DiscountOrders (DiscountOrderContractClient)
|
||
|
||
ApplicationContractContext:
|
||
- [ ] پیادهسازی 4 Client جدید
|
||
- [ ] Initialize در Constructor
|
||
```
|
||
|
||
#### ب. Product Management Handlers (1 روز)
|
||
```
|
||
- [ ] CreateDiscountProductHandler
|
||
Input: Title, Description, Price, MaxDiscountPercent, Images, Categories
|
||
Output: ProductId
|
||
|
||
- [ ] UpdateDiscountProductHandler
|
||
Input: ProductId + همان فیلدهای بالا
|
||
|
||
- [ ] DeleteDiscountProductHandler
|
||
Input: ProductId
|
||
|
||
- [ ] GetDiscountProductByIdHandler
|
||
Input: ProductId
|
||
Output: تمام اطلاعات + Categories + RemainingCount
|
||
|
||
- [ ] GetDiscountProductsHandler ⭐
|
||
Input: Filters (Category, Search, Price Range, IsActive, InStock) + Pagination
|
||
Output: MetaData + List<Product>
|
||
```
|
||
|
||
#### ج. Category Management Handlers (1 روز)
|
||
```
|
||
- [ ] CreateDiscountCategoryHandler
|
||
Input: Name, Title, Description, ImagePath, ParentCategoryId
|
||
|
||
- [ ] UpdateDiscountCategoryHandler
|
||
|
||
- [ ] DeleteDiscountCategoryHandler
|
||
Logic: چک میکند آیا زیرمجموعه یا محصول دارد
|
||
|
||
- [ ] GetDiscountCategoriesHandler ⭐
|
||
Input: ParentCategoryId (nullable), IsActive
|
||
Output: Tree structure با recursive children
|
||
```
|
||
|
||
#### د. Shopping Cart Handlers (1 روز)
|
||
```
|
||
- [ ] AddToCartHandler (برای Support)
|
||
- [ ] RemoveFromCartHandler
|
||
- [ ] UpdateCartItemCountHandler
|
||
- [ ] GetUserCartHandler ⭐
|
||
Output: Cart Items + محاسبات (TotalPrice, DiscountAmount, FinalPrice)
|
||
- [ ] ClearCartHandler
|
||
```
|
||
|
||
#### ه. Order Management Handlers (1 روز)
|
||
```
|
||
- [ ] PlaceOrderHandler (کمتر استفاده میشود)
|
||
- [ ] CompleteOrderPaymentHandler (کمتر استفاده میشود)
|
||
- [ ] UpdateOrderStatusHandler ⭐⭐⭐
|
||
Input: OrderId, NewStatus, TrackingCode, AdminNotes
|
||
مهمترین Handler برای Admin
|
||
|
||
- [ ] GetOrderByIdHandler ⭐⭐⭐
|
||
Output: Order Details + Items + Address + Payment Info
|
||
|
||
- [ ] GetUserOrdersHandler ⭐⭐
|
||
Input: UserId + Pagination
|
||
Output: List<OrderSummary>
|
||
```
|
||
|
||
**اولویت پیادهسازی**:
|
||
1. 🔴 **فاز 1 (MVP - 2.5 روز)**: Product (5) + Category (4) + GetOrderById (1) + UpdateOrderStatus (1)
|
||
2. 🟡 **فاز 2 (Support - 1.5 روز)**: Cart (5) + GetUserOrders (1)
|
||
|
||
---
|
||
|
||
### منتظر تکمیل CMS (قدیمی - حذف شد):
|
||
```
|
||
- [ ] PaymentHandler (بعد از Payment Gateway Integration)
|
||
* InitiatePaymentHandler
|
||
* VerifyPaymentHandler
|
||
* ProcessPayoutHandler
|
||
|
||
- [ ] OrderVatHandler (بعد از VAT System)
|
||
* GetCurrentVatPercentageHandler
|
||
* SetDefaultVatPercentageHandler
|
||
|
||
- [ ] AuthorizationHandler (بعد از RBAC)
|
||
* CheckUserPermissionHandler
|
||
* GetUserRolesHandler
|
||
* AssignRoleToUserHandler
|
||
|
||
- [ ] ManualPaymentHandlers (بعد از Manual Payment System)
|
||
* CreateManualPaymentRequestHandler
|
||
* ApproveManualPaymentHandler
|
||
* RejectManualPaymentHandler
|
||
* GetPendingManualPaymentsHandler
|
||
|
||
- [ ] PublicMessageHandlers (بعد از Public Messages)
|
||
* CreatePublicMessageHandler
|
||
* UpdatePublicMessageHandler
|
||
* DeletePublicMessageHandler
|
||
* PublishMessageHandler
|
||
* GetAllPublicMessagesHandler
|
||
* GetActiveMessagesHandler
|
||
|
||
- [ ] TagManagementHandlers
|
||
* CreateTagHandler
|
||
* UpdateTagHandler
|
||
* DeleteTagHandler
|
||
* GetAllTagsHandler
|
||
|
||
- [ ] ProductBulkHandlers
|
||
* BulkUpdateProductPricesHandler
|
||
* BulkUpdateProductStockHandler
|
||
* GetLowStockProductsHandler
|
||
```
|
||
|
||
**تخمین زمان**: 5 روز (1 روز هر Feature)
|
||
|
||
**مستندات**: `BackOffice.BFF/cms-integration.md`
|
||
|
||
---
|
||
|
||
## 🟢 بخش 3: BackOffice UI - کارهای باقیمانده
|
||
|
||
**وضعیت کلی**: 100% برای صفحات فعلی
|
||
**کارهای جدید**: 10 صفحه جدید
|
||
|
||
### منتظر تکمیل BFF:
|
||
|
||
**الف. صفحه مدیریت تراکنشها** (2 روز)
|
||
```
|
||
- [✅] Pages/Payment/Transactions.razor
|
||
* MudDataGrid با فیلتر
|
||
* Columns: RefId, Amount, Status, Date, Gateway
|
||
* دکمه View Details
|
||
* فیلتر: Date Range, Status, Gateway Type
|
||
- [✅] Components/TransactionDetailsDialog.razor
|
||
* نمایش جزئیات تراکنش
|
||
* BankReferenceId, TrackingCode
|
||
* وضعیت PaymentFailed و دلیل
|
||
```
|
||
|
||
**ب. نمایش VAT در سفارشات** (1 روز)
|
||
```
|
||
- [✅] آپدیت Pages/UserOrder/OrdersMainPage.razor
|
||
* اضافه کردن ستونهای VatAmount و VatPercentage بر اساس دادههای BackOffice.BFF.UserOrder
|
||
- [✅] آپدیت Components/UserOrderDetailsDialog.razor
|
||
* نمایش: "مبلغ کالا: X" (BaseAmount از VAT)
|
||
* نمایش: "مالیات (Vat%): Y"
|
||
* نمایش: "مبلغ نهایی: X + Y" (TotalAmount از VAT)
|
||
- [✅] Pages/SystemManagement/Configuration.razor (بخش تنظیمات VAT)
|
||
* فیلد عددی DefaultVatPercentage
|
||
* دکمه Save با استفاده از ConfigurationContract (کلید DefaultVatPercentage)
|
||
```
|
||
|
||
**ج. Menu Filtering (RBAC)** (1 روز)
|
||
```
|
||
- [✅] آپدیت Shared/NavMenu.razor
|
||
* استفاده از AuthorizationService.HasPermissionAsync برای نمایش/عدم نمایش آیتمهای منو (Orders, Products, Roles, DiscountShop, System)
|
||
- [✅] Services/AuthorizationService.cs
|
||
* HasPermission(string permission) (فعلاً مبتنی بر Role SuperAdmin/Admin/Inspector تا زمان پیادهسازی کامل Permission API در BFF)
|
||
* GetUserRole()
|
||
* کش در LocalStorage برای توسعههای بعدی
|
||
```
|
||
|
||
**د. Public Messages Management** (1 روز) ✅ (پیادهسازی شده با ساختار نهایی)
|
||
```
|
||
- [✅] Pages/PublicMessages/PublicMessagesMainPage.razor
|
||
* DataGrid: Title, Type, Status, StartDate, EndDate, IsActive
|
||
* دکمههای Create, Edit, Delete, Publish/Archive
|
||
* فیلترها بر اساس نوع پیام، وضعیت و بازه زمانی
|
||
- [✅] Components/MessageFormDialog.razor
|
||
* فرم: Title, Content (Rich Text)، Type، تاریخهای Start/End، وضعیت، گزینه انتشار
|
||
* پیشنمایش و Validation کامل
|
||
- [✅] Components/MessageViewDialog.razor
|
||
* نمایش پیام بهصورت Alert/کارت با رنگ بر اساس Type
|
||
* نمایش تصویر، لینک، آمار بازدید و تاریخها
|
||
- [✅] Components/MessageTemplatesDialog.razor
|
||
* مدیریت قالبهای آماده پیام (ایجاد/حذف/استفاده) با ذخیرهسازی در LocalStorage
|
||
```
|
||
|
||
**ه. Manual Payment Management** (1 روز)
|
||
```
|
||
- [ ] Pages/Payment/ManualPayments.razor
|
||
* DataGrid: User, Amount, Method, Status, RequestedAt
|
||
* فیلتر: Status (PendingAdminApproval)
|
||
* دکمه View Receipt
|
||
- [ ] Components/ManualPaymentDialog.razor
|
||
* نمایش تصویر رسید
|
||
* TextArea: AdminNotes
|
||
* دکمههای Approve/Reject
|
||
```
|
||
|
||
**و. Tag Management** (1 روز) ✅ (با نامگذاری و ساختار جدید)
|
||
```
|
||
- [✅] Pages/Tag/TagManagementPage.razor
|
||
* DataGrid: Name, Title, IsActive, ProductCount
|
||
* دکمههای Create, Edit, Delete
|
||
* فیلتر بر اساس نام/عنوان و وضعیت
|
||
- [✅] Components/TagEditDialog.razor
|
||
* فرم ایجاد/ویرایش Tag: Name, Title, Description, IsActive, SortOrder
|
||
- [✅] Components/AssignTagsDialog.razor
|
||
* اختصاص تگ به محصولات از طریق ProductsMainPage
|
||
* نمایش تگهای فعلی هر محصول و امکان حذف آنها
|
||
```
|
||
|
||
**ز. Product Bulk Edit** (1 روز) ✅
|
||
```
|
||
- [✅] Pages/Products/BulkEdit.razor
|
||
* DataGrid با Multiple Selection برای لیست محصولات (با فیلترهای مشابه ProductsMainPage)
|
||
* فرم: Update Price (اجباری برای BulkUpdateProductPrices) + فیلدهای اختیاری تخفیف و تخفیف باشگاه
|
||
* فرم: Update Stock با انتخاب StockUpdateType (Set/Add/Subtract) و مقدار Quantity
|
||
* فرم: Toggle Status (فعال/غیرفعال) برای محصولات انتخابشده
|
||
* دکمه Apply با Dialog تأیید و خلاصه تغییرات، اتصال مستقیم به gRPC (BulkUpdateProductPrices, BulkUpdateProductStock, ToggleProductStatus) در BackOffice.BFF
|
||
```
|
||
|
||
**ح. Role Management** (2 روز) - **SuperAdmin only**
|
||
```
|
||
- [✅] Pages/System/Roles.razor
|
||
* DataGrid: RoleName, UserCount
|
||
* دکمه Edit Permissions
|
||
(پیادهسازی بر اساس BackOffice/Pages/Role/RoleMainPage.razor با دکمه «ویرایش دسترسیها» و RolePermissionsDialog)
|
||
- [✅] Components/RolePermissionsDialog.razor
|
||
* Tree View: Permission Categories
|
||
* Checkbox: Select/Deselect Permissions
|
||
* دکمه Save (فعلاً فقط UI؛ اتصال به RBAC Backend در مرحله بعد)
|
||
- [✅] Pages/System/Users.razor
|
||
* ستون Role
|
||
* دکمه Assign Role
|
||
(پیادهسازی بر اساس BackOffice/Pages/User/UserMainPage.razor و Components/UserRoleDialog.razor)
|
||
```
|
||
|
||
**ط. Withdrawal Reports** (2 روز)
|
||
```
|
||
- [ ] Pages/Commission/WithdrawalReports.razor
|
||
* Chart.js: تعداد و مبلغ برداشتها
|
||
* فیلتر Date Range
|
||
* دکمه Export Excel/PDF
|
||
```
|
||
|
||
**تخمین زمان کل**: 12 روز
|
||
|
||
---
|
||
|
||
## 🔵 بخش 4: FrontOffice.BFF - کارهای باقیمانده
|
||
|
||
**وضعیت**: 80% ✅ (Proto Projects + Handlers متصل به CMS)
|
||
**زمان تخمینی**: 3 روز باقیمانده
|
||
|
||
### ✅ تکمیل شده (2024-12-26):
|
||
|
||
**Proto Projects (7 پروژه جدید):**
|
||
```
|
||
✅ FrontOffice.BFF.Commission.Protobuf
|
||
✅ FrontOffice.BFF.ClubMembership.Protobuf
|
||
✅ FrontOffice.BFF.NetworkMembership.Protobuf
|
||
✅ FrontOffice.BFF.DiscountShop.Protobuf
|
||
✅ FrontOffice.BFF.Package.Protobuf (جدید)
|
||
✅ FrontOffice.BFF.User.Protobuf (موجود)
|
||
✅ FrontOffice.BFF.UserWallet.Protobuf (موجود)
|
||
```
|
||
|
||
**Handlers تکمیل شده:**
|
||
```
|
||
✅ GetMyClubMembershipQuery + Handler
|
||
✅ ActivateMyClubMembershipCommand + Handler
|
||
✅ GetMyCommissionPayoutsQuery + Handler
|
||
✅ GetMyWeeklyBalancesQuery + Handler
|
||
✅ GetMyNetworkTreeQuery + Handler
|
||
✅ GetMyNetworkStatisticsQuery + Handler
|
||
✅ GetMyNetworkPositionQuery + Handler (جدید با ResponseDto)
|
||
✅ Wallet Handlers (6 عدد - متصل به CMS)
|
||
```
|
||
|
||
### تسکهای باقیمانده:
|
||
|
||
**الف. Authentication APIs** (1 روز) - موجود نیاز به بررسی
|
||
```
|
||
- [✅] RegisterCommand + Handler
|
||
- [✅] LoginQuery + Handler
|
||
- [ ] VerifyOtpCommand + Handler (بررسی)
|
||
- [✅] RefreshTokenCommand + Handler
|
||
- [ ] LogoutCommand + Handler (بررسی)
|
||
- [✅] GetMyProfileQuery + Handler
|
||
- [✅] UpdateMyProfileCommand + Handler
|
||
```
|
||
|
||
**ب. Order APIs** (1 روز)
|
||
```
|
||
- [✅] GetMyOrdersQuery + Handler
|
||
- [✅] GetMyOrderQuery + Handler
|
||
- [ ] CreateOrderCommand + Handler
|
||
- [ ] CancelMyOrderCommand + Handler
|
||
- [ ] GetOrderTrackingQuery + Handler
|
||
```
|
||
|
||
**ج. Profile APIs** (0.5 روز)
|
||
```
|
||
- [✅] GetMyAddressesQuery + Handler
|
||
- [✅] CreateMyAddressCommand + Handler
|
||
- [✅] UpdateMyAddressCommand + Handler
|
||
- [✅] DeleteMyAddressCommand + Handler
|
||
- [ ] SetDefaultAddressCommand + Handler
|
||
```
|
||
|
||
**د. Club & Commission (Customer)** ✅ تکمیل شده
|
||
```
|
||
- [✅] GetMyClubMembershipQuery + Handler
|
||
- [✅] ActivateMyClubMembershipCommand + Handler
|
||
- [✅] GetMyCommissionPayoutsQuery + Handler
|
||
- [✅] RequestMyWithdrawalCommand + Handler
|
||
```
|
||
|
||
**ه. Network (Customer)** ✅ تکمیل شده
|
||
```
|
||
- [✅] GetMyNetworkTreeQuery + Handler
|
||
- [✅] GetMyNetworkPositionQuery + Handler
|
||
- [✅] GetMyNetworkStatisticsQuery + Handler
|
||
```
|
||
|
||
**و. Wallet (Customer)** ✅ تکمیل شده
|
||
```
|
||
- [✅] GetMyWalletQuery + Handler (با DiscountBalance)
|
||
- [✅] GetMyTransactionsQuery + Handler
|
||
- [✅] RequestWithdrawalCommand + Handler
|
||
- [✅] GetMyWithdrawalsQuery + Handler
|
||
- [✅] GetWithdrawalSettingsQuery + Handler
|
||
```
|
||
|
||
**ز. Cart (Customer)** (0.5 روز)
|
||
```
|
||
- [ ] GetMyCartQuery + Handler
|
||
- [ ] AddToMyCartCommand + Handler
|
||
- [ ] UpdateMyCartItemCommand + Handler
|
||
- [ ] DeleteMyCartItemCommand + Handler
|
||
- [ ] ClearMyCartCommand + Handler
|
||
- [ ] MergeGuestCartCommand + Handler
|
||
```
|
||
|
||
**مستندات**: `FrontOffice.BFF/README.md`
|
||
|
||
---
|
||
|
||
## 🟣 بخش 5: FrontOffice UI - کارهای باقیمانده
|
||
|
||
**وضعیت**: 60% ✅ (Mock Services → gRPC تبدیل شده)
|
||
**زمان تخمینی**: 2 هفته
|
||
|
||
### ✅ تکمیل شده (2024-12-26):
|
||
|
||
**Services متصل به BFF gRPC:**
|
||
```
|
||
✅ ClubMembershipService → ClubMembershipContract.ClubMembershipContractClient
|
||
✅ NetworkMembershipService → NetworkMembershipContract.NetworkMembershipContractClient
|
||
✅ CommissionService → CommissionContract.CommissionContractClient
|
||
✅ WalletService → UserWalletContract.UserWalletContractClient (6 متد)
|
||
```
|
||
|
||
**Proto References اضافه شده:**
|
||
```
|
||
✅ FrontOffice.BFF.ClubMembership.Protobuf
|
||
✅ FrontOffice.BFF.Commission.Protobuf
|
||
✅ FrontOffice.BFF.NetworkMembership.Protobuf
|
||
✅ FrontOffice.BFF.DiscountShop.Protobuf
|
||
✅ FrontOffice.BFF.UserWallet.Protobuf (ProjectReference)
|
||
```
|
||
|
||
### ✅ جمعبندی نهایی FrontOffice (سمت مشتری):
|
||
|
||
> **وضعیت**: 98% Complete - آماده Production 🎉
|
||
|
||
**تمام صفحات پیادهسازی شده:**
|
||
```
|
||
✅ Authentication: Register (OTP), Login (OTP), Contract Accept
|
||
✅ Profile: Index, Personal, Addresses, Settings, Wallet, Tree
|
||
✅ Store: Products, ProductDetail, Categories, Cart, CheckoutSummary
|
||
✅ Orders: Orders, OrderDetail (VAT), OrderTracking
|
||
✅ Commission: Dashboard, History, WeeklyBalance
|
||
✅ Network: Statistics
|
||
✅ Club: Membership, Features
|
||
✅ Packages: Packages, MyPackages, PackageDetail
|
||
✅ Static: About, FAQ, Contact (Mock)
|
||
```
|
||
|
||
**موارد Mock (Backlog - اولویت پایین):**
|
||
```
|
||
⏳ Contact Form → نیاز به CMS entity ContactMessage
|
||
⏳ ForgotPassword → فعلاً OTP داریم، نیاز نیست
|
||
⏳ ChangePassword → فعلاً OTP داریم، UI آماده برای آینده
|
||
⏳ DiscountCode → نیاز به CMS RPC ValidateDiscountCode
|
||
⏳ Reviews → نیاز به CMS entity Review
|
||
```
|
||
|
||
### ❌ تسکهای حذف شده (دیگر نیاز نیست):
|
||
|
||
**ج. Order Pages** (3 روز)
|
||
```
|
||
- [✅] Pages/Orders/MyOrders.razor
|
||
- [✅] Pages/Orders/OrderDetails.razor
|
||
- [✅] Pages/Orders/OrderTracking.razor
|
||
```
|
||
|
||
**د. Cart & Checkout** (3 روز)
|
||
```
|
||
- [✅] Pages/Cart/Index.razor (با نمایش VAT)
|
||
- [✅] Pages/Checkout/Shipping.razor
|
||
- [✅] Pages/Checkout/Payment.razor
|
||
- [✅] Pages/Checkout/Confirmation.razor
|
||
- [⏳] DiscountCode validation (نیاز به ValidateDiscountCode RPC در CMS)
|
||
```
|
||
|
||
**ه. Club & Commission** ✅ تکمیل شده (متصل به gRPC)
|
||
```
|
||
- [✅] Pages/Club/Membership.razor
|
||
- [✅] Pages/Commission/MyCommissions.razor
|
||
- [✅] Pages/Commission/Withdrawal.razor
|
||
```
|
||
|
||
**و. Network Pages** ✅ تکمیل شده (متصل به gRPC)
|
||
```
|
||
- [✅] Pages/Network/Tree.razor
|
||
- [✅] Pages/Network/Position.razor
|
||
```
|
||
|
||
**ز. Wallet Pages** ✅ تکمیل شده (متصل به gRPC)
|
||
```
|
||
- [✅] Pages/Wallet/Index.razor
|
||
- [✅] Pages/Wallet/Transactions.razor
|
||
- [✅] Pages/Wallet/Withdrawal.razor
|
||
```
|
||
|
||
**ح. Package Purchase** (2 روز)
|
||
```
|
||
- [ ] Pages/Packages/Index.razor
|
||
- [ ] Pages/Packages/PurchasePackage.razor
|
||
- [ ] Pages/Packages/MyPackages.razor
|
||
- [ ] Pages/Packages/PackageDetails.razor
|
||
```
|
||
|
||
### ⏳ نیاز به توسعه CMS:
|
||
```
|
||
- PackageDetail Reviews → نیاز به Review/Comment entity در CMS
|
||
- Checkout Discount Validation → نیاز به ValidateDiscountCode RPC در CMS
|
||
- Contact Form → نیاز به ContactMessage entity در CMS
|
||
```
|
||
|
||
**مستندات**: `FrontOffice/README.md`
|
||
|
||
---
|
||
|
||
## ⚙️ تنظیمات Production
|
||
|
||
### الف. Email (Gmail) - 15 دقیقه
|
||
1. ورود به Google Account Security
|
||
2. فعالسازی 2-Step Verification
|
||
3. ایجاد App Password
|
||
4. کپی پسورد 16 رقمی
|
||
5. آپدیت appsettings.Production.json:
|
||
```json
|
||
"Email": {
|
||
"SmtpUsername": "foursat@gmail.com",
|
||
"SmtpPassword": "xxxx xxxx xxxx xxxx"
|
||
}
|
||
```
|
||
|
||
### ب. SMS (کاوهنگار) - 15 دقیقه
|
||
1. ثبتنام در Kavenegar.com
|
||
2. کپی API Key
|
||
3. دریافت شماره Sender
|
||
4. آپدیت appsettings.Production.json:
|
||
```json
|
||
"Sms": {
|
||
"KavenegarApiKey": "YOUR_API_KEY",
|
||
"Sender": "10008663"
|
||
}
|
||
```
|
||
|
||
### ج. Connection String - 5 دقیقه
|
||
```json
|
||
"ConnectionStrings": {
|
||
"DefaultConnection": "Server=PRODUCTION_SERVER;Database=Foursat_CMS;..."
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 📚 مراجع و مستندات
|
||
|
||
### مستندات اصلی:
|
||
- totalDoc/CMS/implementation-progress.md (1812 خط)
|
||
- totalDoc/CMS/network-club-commission-system-v1.1.md (بیزینس)
|
||
- totalDoc/CMS/daya-loan-integration.md (361 خط)
|
||
- totalDoc/CMS/manual-payment-system.md (537 خط)
|
||
- totalDoc/BackOffice/development-plan.md (1462 خط)
|
||
- totalDoc/BackOffice.BFF/cms-integration.md
|
||
|
||
### داکیومنت هر تغییر:
|
||
- ✅ بعد از هر Feature: آپدیت implementation-progress.md
|
||
- ✅ بعد از هر API: آپدیت README.md مربوطه
|
||
- ✅ قبل از Commit: مقایسه داکیومنت با کد
|
||
- ✅ هر Business Logic: مستند کردن در مد مربوطه
|
||
|
||
---
|
||
|
||
## 🎯 اولویتبندی نهایی (برای شروع)
|
||
|
||
### هفته 1: Payment Gateway + CRUD
|
||
- روز 1-3: Payment Gateway Integration (Real API)
|
||
- روز 4: Tag Management
|
||
- روز 5: Product Bulk Operations
|
||
|
||
### هفته 2: Manual Payment + VAT
|
||
- روز 1-2: Manual Payment System
|
||
- روز 3-4: VAT System
|
||
- روز 5: Public Messages
|
||
|
||
### هفته 3-4: RBAC + BackOffice UI
|
||
- روز 1-5: RBAC پیادهسازی کامل
|
||
- روز 6-10: BackOffice UI صفحات جدید
|
||
|
||
### هفته 5-6: FrontOffice.BFF
|
||
- روز 1-10: FrontOffice.BFF APIs (همه)
|
||
|
||
### هفته 7-9: FrontOffice UI
|
||
- روز 1-15: FrontOffice UI Pages (همه)
|
||
|
||
---
|
||
|
||
**📅 زمان کل تخمینی**: 9 هفته (45 روز کاری)
|
||
|
||
**✅ بعد از تکمیل این موارد، پروژه 100% آماده Production خواهد بود.**
|