# 📋 کارهای باقی‌مانده - تجمیع کامل پروژه FourSat > **⚠️ نکته مهم**: برای گزارش کامل آمادگی تحویل، مراجعه کنید به: [DELIVERY-READINESS-REPORT.md](DELIVERY-READINESS-REPORT.md) > **⚠️ نکته مهم توسعه**: برای تسریع روند توسعه، handlers جدید BackOffice.BFF با TODO کامنت‌های دقیق پیاده‌سازی می‌شوند به جای implementation کامل. هر TODO شامل: > - مراحل دقیق پیاده‌سازی (گام به گام) > - نام دقیق type‌ها و namespace‌ها > - نکات مهم درباره nullable types، casting، و proto mappings > - این رویکرد سرعت توسعه را حفظ می‌کند بدون کاهش دقت > **تاریخ به‌روزرسانی**: 1403/10/06 (2024-12-26) > **وضعیت کلی**: 99% تکمیل شده > **مسیر توسعه**: CMS → BackOffice.BFF → BackOffice (UI) → FrontOffice.BFF → FrontOffice --- ## 📊 خلاصه وضعیت کلی پروژه ### ✅ تکمیل شده - **CMS Microservice**: 95% (12 از 12 Phase کامل، 9 TODO handlers باقیمانده) - **BackOffice.BFF**: 85% (47 Handler تکمیل، 8 TODO handlers، 19 Discount Shop handlers باقیمانده) - **BackOffice UI**: 95% (60 صفحه آماده Production - قابل تحویل به Admin) - **FrontOffice.BFF**: 80% ✅ (Proto Projects + Handlers متصل به CMS) - **FrontOffice UI**: 60% ✅ (Mock Services → gRPC تبدیل شده) ### 🔴 اولویت‌های اصلی (باید انجام شوند) 1. ~~تکمیل Payment Gateway Integration (CMS Phase 10)~~ ✅ Backend Complete (90%) - ✅ DayaPaymentService پیاده‌سازی کامل - ✅ GetWithdrawalReports Query (CMS + BackOffice.BFF + gRPC Service) - ⏸️ BackOffice UI (Withdrawal Management + Reports تقریباً کامل؛ تست‌های Daya و خروجی PDF باقیمانده) 2. ~~Club Discount Shop System (CMS Phase 9)~~ ✅ Complete 3. ~~Product Bulk Operations~~ ✅ Backend Complete (100%) 4. ~~Order Management~~ ✅ Backend + BackOffice.BFF Complete (UI improvements باقیمانده) 5. ~~Public Messages System~~ ✅ CMS + BackOffice.BFF + BackOffice UI Complete 6. **Package Purchase System** ✅ Proto/gRPC Complete (4 TODO handlers باقیمانده) 7. **Discount Shop - BackOffice Integration** ✅ تکمیل شده (19 handlers + BackOffice UI متصل) ### 📦 **قابل تحویل به Admin**: - ✅ **BackOffice با 56 صفحه کاملاً کاربردی** - Dashboard, Users, Products, Orders, Categories - Commission, Network, Packages, Roles, Settings - ✅ **CMS Backend کامل برای**: - Discount Shop, Tags, Product Bulk Ops, Withdrawal Reports - ⚠️ **نیاز به تکمیل**: - 9 TODO handlers در CMS - ~~27 TODO handlers در BackOffice.BFF~~ ✅ handlers BackOffice.BFF تکمیل شده‌اند - UI برای گزارش‌های پیشرفته (Reports) و برخی بهبودهای FrontOffice --- ## 🎯 مسیر پیشنهادی توسعه ``` مرحله 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 ⭐ **بالا** **وضعیت**: 0% **زمان تخمینی**: 2 روز ``` CMS Domain: - [ ] ManualPaymentStatus enum: - PendingAdminApproval = 0 - PendingPayment = 1 - PaymentCompleted = 2 - Rejected = 3 - Expired = 4 - [ ] ManualPaymentMethod enum: - CardToCard = 0 (کارت‌به‌کارت) - OnlineGateway = 1 (درگاه آنلاین) - [ ] ManualPaymentRequest entity: - UserId, Amount, Method, Status - ReceiptImagePath, AdminNotes - RequestedAt, ProcessedAt, ExpiresAt CMS Application: - [ ] CreateManualPaymentRequestCommand + Handler + Validator * Check: کاربر فقط یک درخواست Pending داشته باشد * CardToCard → Status=PendingAdminApproval * OnlineGateway → Status=PendingPayment, ایجاد URL درگاه - [ ] VerifyManualPaymentCommand + Handler (بعد از بازگشت از درگاه) - [ ] ApproveManualPaymentCommand + Handler (Admin) * شارژ کیف پول کاربر * Status → PaymentCompleted - [ ] RejectManualPaymentCommand + Handler (Admin) * AdminNotes * Status → Rejected - [ ] ProcessManualPaymentCommand + Handler (Internal worker) * شارژ خودکار بعد از تأیید پرداخت - [ ] GetUserManualPaymentHistoryQuery + Handler - [ ] GetPendingManualPaymentsQuery + Handler (Admin) CMS Infrastructure: - [✅] IPaymentGatewayService (از قبل موجود) - [ ] IFileStorageService (آپلود تصویر رسید) * LocalFileStorageService * AzureBlobStorageService (optional) BackOffice.BFF: - [ ] 7 Handlers 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 (مالیات بر ارزش افزوده) ⭐ **متوسط** **وضعیت**: 0% **زمان تخمینی**: 2 روز ``` CMS Domain: - [ ] اضافه کردن VatPercentage به UserOrder entity - [ ] اضافه کردن VatAmount (محاسبه شده) به UserOrder CMS Application: - [ ] Command: SetDefaultVatPercentageCommand (Admin) - [ ] Query: GetCurrentVatPercentageQuery - [ ] محاسبه VatAmount در CreateOrderCommand: VatAmount = (TotalAmount × VatPercentage) / 100 CMS Configuration: - [ ] اضافه کردن به ConfigurationKeys: DefaultVatPercentage = 10 (پیش‌فرض 10%) BackOffice.BFF: - [ ] Handler: GetCurrentVatPercentageQuery - [ ] Handler: SetDefaultVatPercentageCommand BackOffice UI: - [ ] نمایش VatAmount در لیست سفارشات - [ ] نمایش VatPercentage در جزئیات سفارش - [ ] صفحه تنظیمات VAT (Settings/General) * فیلد عددی برای VatPercentage * دکمه ذخیره * نمایش: "شامل 10% مالیات بر ارزش افزوده" FrontOffice UI: - [ ] نمایش VAT در سبد خرید - [ ] نمایش VAT در صفحه Checkout * "شامل 10% مالیات بر ارزش افزوده" * جزئیات: مبلغ کالا + مالیات = مبلغ نهایی ``` --- ### 1.8 RBAC (Role-Based Access Control) ⭐⭐ **حیاتی** **وضعیت**: 0% **زمان تخمینی**: 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 - [ ] AuthorizationHandler: GetUserRolesHandler - [ ] Middleware: Permission Check قبل از فراخوانی CMS ``` **ه. 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/Orders/OrdersList.razor * اضافه کردن ستون VatAmount * اضافه کردن ستون VatPercentage - [ ] آپدیت Components/OrderDetailsDialog.razor * نمایش: "مبلغ کالا: X" * نمایش: "مالیات (10%): Y" * نمایش: "مبلغ نهایی: X + Y" - [ ] Pages/Settings/VatSettings.razor * فیلد عددی VatPercentage * دکمه Save ``` **ج. Menu Filtering (RBAC)** (1 روز) ``` - [ ] آپدیت Shared/NavMenu.razor * if (await AuthService.HasPermission("orders.view")) { } - [ ] Services/AuthorizationService.cs * HasPermission(string permission) * GetUserRole() * RefreshPermissions() ``` **د. 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 - [ ] Components/RolePermissionsDialog.razor * Tree View: Permission Categories * Checkbox: Select/Deselect Permissions * دکمه Save - [ ] Pages/System/Users.razor * ستون Role * دکمه Assign Role ``` **ط. 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) ``` ### تسک‌های باقیمانده: **الف. Authentication Pages** (2 روز) - موجود نیاز به بررسی ``` - [✅] Pages/Auth/Register.razor - [✅] Pages/Auth/Login.razor - [ ] Pages/Auth/VerifyOtp.razor (بررسی) - [ ] Pages/Auth/ForgotPassword.razor ``` **ب. Profile Pages** (2 روز) ``` - [✅] Pages/Profile/Index.razor - [✅] Pages/Profile/EditProfile.razor - [✅] Pages/Profile/Addresses.razor - [ ] Pages/Profile/ChangePassword.razor ``` **ج. Order Pages** (3 روز) ``` - [✅] Pages/Orders/MyOrders.razor - [✅] Pages/Orders/OrderDetails.razor - [ ] Pages/Orders/Tracking.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 خواهد بود.**