Files
docs/99-ARCHIVE/REMAINING-TASKS-CONSOLIDATED-OLD.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

1411 lines
46 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 📋 کارهای باقی‌مانده - تجمیع کامل پروژه FourSat
> **⚠️ نکته مهم**: برای گزارش کامل آمادگی تحویل، مراجعه کنید به: [DELIVERY-READINESS-REPORT.md](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:
```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 خواهد بود.**