# 📋 کارهای باقی‌مانده - تجمیع کامل پروژه 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 --- > **تاریخ به‌روزرسانی**: ۱۲ دی ۱۴۰۴ (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 ``` #### ج. 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 ``` **اولویت پیاده‌سازی**: 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 خواهد بود.**