Files
docs/05-TASKS/BACKLOG.md
T
masoodafar-web 119e870a26 feat: Complete overhaul of FourSat documentation structure and content
- Added FINAL-STATUS.md detailing project completion and key metrics
- Created QUICK-REFERENCE.md for quick access to essential documents
- Updated README.md with project overview and quick start guide
- Established STRUCTURE.md outlining the final documentation structure
- Organized and archived old files, ensuring a clean and efficient directory
- Enhanced documentation quality with comprehensive metrics and checklists
2025-12-04 17:32:31 +03:30

46 KiB
Raw Blame History

📋 کارهای باقی‌مانده - تجمیع کامل پروژه FourSat

⚠️ نکته مهم: برای گزارش کامل آمادگی تحویل، مراجعه کنید به: DELIVERY-READINESS-REPORT.md

⚠️ نکته مهم توسعه: برای تسریع روند توسعه، handlers جدید BackOffice.BFF با TODO کامنت‌های دقیق پیاده‌سازی می‌شوند به جای implementation کامل. هر TODO شامل:

  • مراحل دقیق پیاده‌سازی (گام به گام)
  • نام دقیق type‌ها و namespace‌ها
  • نکات مهم درباره nullable types، casting، و proto mappings
  • این رویکرد سرعت توسعه را حفظ می‌کند بدون کاهش دقت
<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>

تاریخ به‌روزرسانی: 1403/09/14 (2024-12-04)
وضعیت کلی: 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: 85% (56 صفحه آماده Production - قابل تحویل به Admin)
  • FrontOffice.BFF: 20% (فقط برخی Queries پایه)
  • FrontOffice UI: 10% (چند صفحه اولیه)

🔴 اولویت‌های اصلی (باید انجام شوند)

  1. تکمیل Payment Gateway Integration (CMS Phase 10) Backend Complete (85%)
    • DayaPaymentService پیاده‌سازی کامل
    • GetWithdrawalReports Query (CMS + BackOffice.BFF)
    • ⏸️ CMS gRPC Service + BackOffice UI باقیمانده
  2. Club Discount Shop System (CMS Phase 9) Complete
  3. Product Bulk Operations Backend Complete (100%)
  4. Order Management Proto/gRPC/Mapster Complete (9 TODO handlers باقیمانده)
  5. Public Messages System Proto/gRPC Complete (5 TODO handlers باقیمانده)
  6. Package Purchase System Proto/gRPC Complete (4 TODO handlers باقیمانده)
  7. Discount Shop - BackOffice Integration 🔴 اولویت اول (0% - 19 handlers لازم)

📦 قابل تحویل به 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
    • UI برای Discount Shop, Public Messages, Reports

🎯 مسیر پیشنهادی توسعه

مرحله 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 (85%)
  │   ├── ✅ DayaPaymentService Implementation
  │   ├── ✅ GetWithdrawalReports (CMS + BFF)
  │   ├── [ ] CMS gRPC Service
  │   └── [ ] BackOffice UI (Reports + Withdrawal Management)
  ├── [ ] Product Bulk Operations - نیم روز
  ├── [ ] Order Management - نیم روز
  └── [ ] Public Messages System - نیم روز

مرحله 3: BackOffice UI تکمیلی
  ├── [ ] Financial Reports Page - 1.5 روز
  ├── [ ] Withdrawal Management Page - 2 روز
  └── [ ] Product Bulk Operations UI - نیم روز

مرحله 4: FrontOffice (اولویت اصلی بعدی)
  ├── FrontOffice.BFF APIs - 2 هفته
  │   ├── Browse Discount Shop Products
  │   ├── Shopping Cart Management
  │   ├── Order Placement & Payment
  │   └── Order Tracking
  └── FrontOffice UI Pages - 3 هفته
      ├── Product Catalog
      ├── Shopping Cart
      ├── Checkout Flow
      └── Order History

🔴 بخش 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) فوری

وضعیت: 85% تکمیل (گزارش‌های مالی افزوده شد)
زمان تخمینی: 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
- [ ] نمایش BankReferenceId و TrackingCode
- [ ] نمایش وضعیت PaymentFailed و دلیل خطا
- [ ] فیلترینگ بر اساس Status
- [ ] جستجو بر اساس UserId/IbanNumber

ج. BackOffice UI - Financial Reports (1.5 روز)

- [ ] صفحه گزارش‌های مالی با فیلترها (تاریخ، نوع دوره، وضعیت، کاربر)
- [ ] نمایش گزارش‌های دوره‌ای (روزانه/هفتگی/ماهانه)
- [ ] Chart.js visualization (نمودار میله‌ای/خطی)
- [ ] نمایش خلاصه آماری (کارت‌های اطلاعاتی)
- [ ] خروجی Excel (EPPlus)
- [ ] خروجی PDF (QuestPDF)

د. تست یکپارچه (نیم روز)

- [ ] تست تراکنش‌های واقعی با Daya API
- [ ] تست Callback/Webhook مدیریت
- [ ] تست retry logic در شرایط خطا

1.2 CRUD های اضافی بالا

وضعیت: 67% (Tag Management و Product Bulk Operations کامل شده)
زمان تخمینی: 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
- [ ] Dialog ایجاد/ویرایش Tag
- [ ] صفحه Assign Tags به محصولات

مستندات: Backend کامل، UI باقیمانده

ب. 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: ⏸️
- [ ] صفحه Bulk Edit Products
- [ ] DataGrid با انتخاب چندتایی
- [ ] فرم Bulk Update

ج. 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: ⏸️
- [ ] 4 Handlers (TODO)

BackOffice UI: ⏸️
- [ ] دکمه Cancel Order با Confirmation
- [ ] Dropdown تغییر Status
- [ ] فیلتر Date Range
- [ ] Dialog اعمال تخفیف

سطوح دسترسی:

  • 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 (TODO format):
    • CreatePublicMessage
    • UpdatePublicMessage
    • DeletePublicMessage
    • PublishMessage
    • ArchiveMessage
    • GetAllMessages
    • GetActiveMessages
    • GetPublicMessage

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<Product>

ج. Category Management Handlers (1 روز)

- [ ] CreateDiscountCategoryHandler
      Input: Name, Title, Description, ImagePath, ParentCategoryId
      
- [ ] UpdateDiscountCategoryHandler
      
- [ ] DeleteDiscountCategoryHandler
      Logic: چک می‌کند آیا زیرمجموعه یا محصول دارد
      
- [ ] GetDiscountCategoriesHandler ⭐
      Input: ParentCategoryId (nullable), IsActive
      Output: Tree structure با recursive children

د. Shopping Cart Handlers (1 روز)

- [ ] AddToCartHandler (برای Support)
- [ ] RemoveFromCartHandler
- [ ] UpdateCartItemCountHandler
- [ ] GetUserCartHandler ⭐
      Output: Cart Items + محاسبات (TotalPrice, DiscountAmount, FinalPrice)
- [ ] ClearCartHandler

ه. Order Management Handlers (1 روز)

- [ ] PlaceOrderHandler (کمتر استفاده می‌شود)
- [ ] CompleteOrderPaymentHandler (کمتر استفاده می‌شود)
- [ ] UpdateOrderStatusHandler ⭐⭐⭐
      Input: OrderId, NewStatus, TrackingCode, AdminNotes
      مهم‌ترین Handler برای Admin
      
- [ ] GetOrderByIdHandler ⭐⭐⭐
      Output: Order Details + Items + Address + Payment Info
      
- [ ] GetUserOrdersHandler ⭐⭐
      Input: UserId + Pagination
      Output: List<OrderSummary>

اولویت پیاده‌سازی:

  1. 🔴 فاز 1 (MVP - 2.5 روز): Product (5) + Category (4) + GetOrderById (1) + UpdateOrderStatus (1)
  2. 🟡 فاز 2 (Support - 1.5 روز): Cart (5) + GetUserOrders (1)

منتظر تکمیل CMS (قدیمی - حذف شد):

- [ ] PaymentHandler (بعد از Payment Gateway Integration)
      * InitiatePaymentHandler
      * VerifyPaymentHandler
      * ProcessPayoutHandler

- [ ] OrderVatHandler (بعد از VAT System)
      * GetCurrentVatPercentageHandler
      * SetDefaultVatPercentageHandler

- [ ] AuthorizationHandler (بعد از RBAC)
      * CheckUserPermissionHandler
      * GetUserRolesHandler
      * AssignRoleToUserHandler

- [ ] ManualPaymentHandlers (بعد از Manual Payment System)
      * CreateManualPaymentRequestHandler
      * ApproveManualPaymentHandler
      * RejectManualPaymentHandler
      * GetPendingManualPaymentsHandler

- [ ] PublicMessageHandlers (بعد از Public Messages)
      * CreatePublicMessageHandler
      * UpdatePublicMessageHandler
      * DeletePublicMessageHandler
      * PublishMessageHandler
      * GetAllPublicMessagesHandler
      * GetActiveMessagesHandler

- [ ] TagManagementHandlers
      * CreateTagHandler
      * UpdateTagHandler
      * DeleteTagHandler
      * GetAllTagsHandler

- [ ] ProductBulkHandlers
      * BulkUpdateProductPricesHandler
      * BulkUpdateProductStockHandler
      * GetLowStockProductsHandler

تخمین زمان: 5 روز (1 روز هر Feature)

مستندات: BackOffice.BFF/cms-integration.md


بخش 3: BackOffice UI - کارهای باقی‌مانده

وضعیت کلی: 100% برای صفحات فعلی
کارهای جدید: 10 صفحه جدید

منتظر تکمیل BFF:

الف. صفحه مدیریت تراکنش‌ها (2 روز)

- [ ] Pages/Payment/Transactions.razor
      * MudDataGrid با فیلتر
      * Columns: RefId, Amount, Status, Date, Gateway
      * دکمه View Details
      * فیلتر: Date Range, Status, Gateway Type
- [ ] Components/TransactionDetailsDialog.razor
      * نمایش جزئیات تراکنش
      * BankReferenceId, TrackingCode
      * وضعیت PaymentFailed و دلیل

ب. نمایش VAT در سفارشات (1 روز)

- [ ] آپدیت Pages/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"))
        {
            <MudNavLink ... />
        }
- [ ] Services/AuthorizationService.cs
      * HasPermission(string permission)
      * GetUserRole()
      * RefreshPermissions()

د. Public Messages Management (1 روز)

- [ ] Pages/Messages/MessagesList.razor
      * DataGrid: Title, Type, StartDate, EndDate, IsActive
      * دکمه‌های Create, Edit, Delete, Publish
- [ ] Components/MessageDialog.razor
      * فرم: Title, Content (TinyMCE), Type, Dates
      * پیش‌نمایش
- [ ] Components/MessagePreview.razor
      * Alert با رنگ بر اساس Type

ه. 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/Products/Tags.razor
      * DataGrid: Name, ProductCount
      * دکمه‌های Create, Edit, Delete
- [ ] Components/TagDialog.razor
- [ ] Components/AssignTagsDialog.razor

ز. Product Bulk Edit (1 روز)

- [ ] Pages/Products/BulkEdit.razor
      * DataGrid با Multiple Selection
      * فرم: Update Price, Update Stock, Toggle Status
      * دکمه Apply

ح. 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 - کارهای باقی‌مانده

وضعیت: 20% (فقط برخی Queries پایه موجود)
زمان تخمینی: 2 هفته

تسک‌های اصلی:

الف. Authentication APIs (3 روز)

- [ ] RegisterCommand + Handler
- [ ] LoginQuery + Handler
- [ ] VerifyOtpCommand + Handler
- [ ] RefreshTokenCommand + Handler
- [ ] LogoutCommand + Handler
- [ ] GetMyProfileQuery + Handler
- [ ] UpdateMyProfileCommand + Handler

ب. Order APIs (3 روز)

- [ ] GetMyOrdersQuery + Handler
- [ ] GetMyOrderQuery + Handler
- [ ] CreateOrderCommand + Handler
- [ ] CancelMyOrderCommand + Handler
- [ ] GetOrderTrackingQuery + Handler

ج. Profile APIs (2 روز)

- [ ] GetMyAddressesQuery + Handler
- [ ] CreateMyAddressCommand + Handler
- [ ] UpdateMyAddressCommand + Handler
- [ ] DeleteMyAddressCommand + Handler
- [ ] SetDefaultAddressCommand + Handler

د. Club & Commission (Customer) (2 روز)

- [ ] GetMyClubMembershipQuery + Handler
- [ ] ActivateMyClubMembershipCommand + Handler
- [ ] GetMyCommissionPayoutsQuery + Handler
- [ ] RequestMyWithdrawalCommand + Handler

ه. Network (Customer) (2 روز)

- [ ] GetMyNetworkTreeQuery + Handler
- [ ] GetMyNetworkPositionQuery + Handler
- [ ] GetMyNetworkStatisticsQuery + Handler

و. Wallet (Customer) (2 روز)

- [ ] GetMyWalletQuery + Handler (با DiscountBalance)
- [ ] GetMyTransactionsQuery + Handler
- [ ] GetMyDiscountTransactionsQuery + Handler

ز. Cart (Customer) (2 روز)

- [ ] GetMyCartQuery + Handler
- [ ] AddToMyCartCommand + Handler
- [ ] UpdateMyCartItemCommand + Handler
- [ ] DeleteMyCartItemCommand + Handler
- [ ] ClearMyCartCommand + Handler
- [ ] MergeGuestCartCommand + Handler

مستندات: FrontOffice.BFF/README.md


🟣 بخش 5: FrontOffice UI - کارهای باقی‌مانده

وضعیت: 10% (چند صفحه پایه)
زمان تخمینی: 3 هفته

تسک‌های اصلی:

الف. Authentication Pages (3 روز)

- [ ] Pages/Auth/Register.razor
- [ ] Pages/Auth/Login.razor
- [ ] Pages/Auth/VerifyOtp.razor
- [ ] Pages/Auth/ForgotPassword.razor

ب. Profile Pages (4 روز)

- [ ] Pages/Profile/Index.razor
- [ ] Pages/Profile/EditProfile.razor
- [ ] Pages/Profile/Addresses.razor
- [ ] Pages/Profile/ChangePassword.razor

ج. Order Pages (5 روز)

- [ ] Pages/Orders/MyOrders.razor
- [ ] Pages/Orders/OrderDetails.razor
- [ ] Pages/Orders/Tracking.razor

د. Cart & Checkout (5 روز)

- [ ] Pages/Cart/Index.razor (با نمایش VAT)
- [ ] Pages/Checkout/Shipping.razor
- [ ] Pages/Checkout/Payment.razor
- [ ] Pages/Checkout/Confirmation.razor

ه. Club & Commission (4 روز)

- [ ] Pages/Club/Membership.razor
- [ ] Pages/Commission/MyCommissions.razor
- [ ] Pages/Commission/Withdrawal.razor

و. Network Pages (2 روز)

- [ ] Pages/Network/Tree.razor
- [ ] Pages/Network/Position.razor

مستندات: FrontOffice/README.md


⚙️ تنظیمات Production

الف. Email (Gmail) - 15 دقیقه

  1. ورود به Google Account Security
  2. فعال‌سازی 2-Step Verification
  3. ایجاد App Password
  4. کپی پسورد 16 رقمی
  5. آپدیت appsettings.Production.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:
    "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 خواهد بود.