57 KiB
📋 کارهای باقیمانده - تجمیع کامل پروژه FourSat
⚠️ نکته مهم: برای گزارش کامل آمادگی تحویل، مراجعه کنید به: 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):
- فعالسازی Using statements برای proto clients
- ثبت gRPC Clients در DI container
- ثبت 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):
- ساخت
DiscountCategoryService.cs(4 RPCs) - ساخت
DiscountShoppingCartService.cs(5 RPCs) - ساخت
TagService.cs(6 RPCs) - ساخت
ProductTagService.cs(5 RPCs) - ساخت Handlers برای ProductTag (Update, Delete, Get, GetAll)
- اصلاح Handlers برای DiscountShoppingCart (مطابقت با CMS proto)
- فعالسازی
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 + 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 (MVP - 2.5 روز): Product (5) + Category (4) + GetOrderById (1) + UpdateOrderStatus (1)
- 🟡 فاز 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 دقیقه
- ورود به Google Account Security
- فعالسازی 2-Step Verification
- ایجاد App Password
- کپی پسورد 16 رقمی
- آپدیت appsettings.Production.json:
"Email": { "SmtpUsername": "foursat@gmail.com", "SmtpPassword": "xxxx xxxx xxxx xxxx" }
ب. SMS (کاوهنگار) - 15 دقیقه
- ثبتنام در Kavenegar.com
- کپی API Key
- دریافت شماره Sender
- آپدیت appsettings.Production.json:
"Sms": { "KavenegarApiKey": "YOUR_API_KEY", "Sender": "10008663" }
ج. Connection String - 5 دقیقه
"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 خواهد بود.