feat: Implement Discount Shop Completion Plan with Product Image Gallery, Admin APIs, VAT Calculation, and Sales Reports

- Added DiscountProductImage entity and related configurations for product image gallery.
- Created commands and queries for managing product images.
- Developed GetAllDiscountOrders API for admin order management with various filters.
- Implemented VAT calculation service and integrated it into order processing.
- Created Sales Reports API with support for daily, weekly, and monthly reports.
- Completed gRPC services for BackOffice.BFF to expose new APIs.
- Updated Proto files and project references accordingly.
This commit is contained in:
masoodafar-web
2026-01-02 00:46:08 +03:30
parent df650c3886
commit 73e1971cc3
11 changed files with 3658 additions and 54 deletions
@@ -1,8 +1,8 @@
# BackOffice.BFF - Discount Shop Integration Plan
**تاریخ ایجاد**: 1403/09/13 (2024-12-04)
**آخرین بروزرسانی**: 1403/09/14 (2024-12-05)
**وضعیت**: ✅ پیاده‌سازی شده (Plan اجرا شده است)
**آخرین بروزرسانی**: 1403/10/11 (2024-12-31)
**وضعیت**: ✅ پیاده‌سازی کامل (شامل Image Gallery و Admin Reports)
**اولویت در زمان طراحی**: 🔴 بالا
---
@@ -17,8 +17,21 @@
- 4 gRPC Services
- Migration: AddDiscountShopSystem
### ⏳ وضعیت در BackOffice.BFF (به‌روزرسانی)
- **19 Handler** برای 4 سرویس جدید → ✅ پیاده‌سازی و متصل به CMS
- **Phase 10: Product Image Gallery** - 100% ✅ (جدید)
- 5 عملیات جدید: Add/Update/Delete/Reorder/Get Images
- 2 Command + 3 RPC جدید
- پشتیبانی از چندین تصویر برای هر محصول
- **Phase 11: Admin Order Reports** - 100% ✅ (جدید)
- GetAllDiscountOrders: لیست کامل سفارشات با فیلتر و صفحه‌بندی
- GetDiscountSalesReport: گزارش فروش با فیلتر تاریخ و نوع گزارش
### ✅ وضعیت در BackOffice.BFF (تکمیل شده)
- **26 Handler** برای 6 سرویس → ✅ پیاده‌سازی و متصل به CMS
- 19 Handler اصلی + 5 Handler گالری تصاویر + 2 Handler گزارش سفارشات
- **2 gRPC Service در WebApi** → ✅ جدید
- `DiscountProductService.cs` با 10 RPC endpoint
- `DiscountOrderService.cs` با 7 RPC endpoint
- **4 Client Interface** در `IApplicationContractContext` → ✅ اضافه و در `ApplicationContractContext` پیاده‌سازی شده
- **Test و Validation** → ✅ در BackOffice UI (DiscountShop صفحات و سرویس‌ها) در حال استفاده عملی
@@ -293,6 +306,153 @@
---
### 5️⃣ مدیریت گالری تصاویر محصولات (5 API جدید) 🆕
**سرویس**: `DiscountProductContract`
> **توجه**: این APIها برای مدیریت چندین تصویر برای هر محصول استفاده می‌شوند (گالری تصاویر).
#### الف. افزودن تصویر به گالری ⭐ **مهم**
- **Handler**: `AddDiscountProductImageCommandHandler`
- **Command**: `AddDiscountProductImageCommand`
- **Request**:
```csharp
- ProductId (Guid)
- Image (ImageFileModel)
* File (byte[])
* FileName (string)
* Mime (string)
- SortOrder (int - ترتیب نمایش)
- IsMain (bool - آیا تصویر اصلی است؟)
```
- **Response**: ImageId (Guid)
- **کاربرد Admin**: افزودن تصاویر جدید به گالری محصول
#### ب. ویرایش تصویر گالری
- **Handler**: `UpdateDiscountProductImageCommandHandler`
- **Command**: `UpdateDiscountProductImageCommand`
- **Request**:
```csharp
- ImageId (Guid)
- ProductId (Guid)
- NewImage (ImageFileModel - اختیاری)
- SortOrder (int)
- IsMain (bool)
```
- **Response**: Success/Failure
- **کاربرد Admin**: تغییر تصویر موجود یا تغییر ترتیب/اصلی بودن
#### ج. حذف تصویر از گالری
- **Handler**: `DeleteDiscountProductImageCommandHandler`
- **Command**: `DeleteDiscountProductImageCommand`
- **Request**: ImageId (Guid), ProductId (Guid)
- **Response**: Success/Failure
- **کاربرد Admin**: حذف تصویر از گالری محصول
#### د. تغییر ترتیب تصاویر ⭐ **مهم**
- **Handler**: `ReorderDiscountProductImagesCommandHandler`
- **Command**: `ReorderDiscountProductImagesCommand`
- **Request**:
```csharp
- ProductId (Guid)
- ImageOrders (List)
* ImageId (Guid)
* SortOrder (int)
```
- **Response**: Success/Failure
- **کاربرد Admin**: تغییر ترتیب نمایش تصاویر با drag & drop
#### ه. دریافت لیست تصاویر محصول
- **Handler**: `GetDiscountProductImagesQueryHandler`
- **Query**: `GetDiscountProductImagesQuery`
- **Request**: ProductId (Guid)
- **Response**:
```csharp
- List<ProductImageDto>
* ImageId (Guid)
* ImagePath (string)
* SortOrder (int)
* IsMain (bool)
* CreatedAt (DateTime)
```
- **کاربرد Admin**: نمایش گالری تصاویر محصول
---
### 6️⃣ گزارشات مدیریتی سفارشات (2 API جدید) 🆕
**سرویس**: `DiscountOrderContract`
> **توجه**: این APIها برای گزارش‌گیری و مدیریت کلی سفارشات توسط ادمین استفاده می‌شوند.
#### الف. لیست کامل سفارشات ⭐⭐⭐ **خیلی مهم**
- **Handler**: `GetAllDiscountOrdersQueryHandler`
- **Query**: `GetAllDiscountOrdersQuery`
- **Request**:
```csharp
- PageNumber (int - پیش‌فرض: 1)
- PageSize (int - پیش‌فرض: 10)
- UserId (Guid? - فیلتر کاربر)
- Status (DeliveryStatus? - فیلتر وضعیت)
- FromDate (DateTime? - از تاریخ)
- ToDate (DateTime? - تا تاریخ)
- SearchTerm (string? - جستجو در شماره سفارش/نام کاربر)
```
- **Response**:
```csharp
- MetaData (PaginationMetaData)
* PageNumber
* PageSize
* TotalCount
* TotalPages
- Models (List<OrderSummaryDto>)
* OrderId
* UserId
* UserName
* TotalPrice
* DiscountBalanceUsed
* GatewayAmount
* VatAmount (مالیات ارزش افزوده)
* DeliveryStatus
* ItemsCount
* OrderDate
* PaymentDate
```
- **کاربرد Admin**: مشاهده و فیلتر تمام سفارشات فروشگاه تخفیفی
#### ب. گزارش فروش ⭐⭐ **مهم**
- **Handler**: `GetDiscountSalesReportQueryHandler`
- **Query**: `GetDiscountSalesReportQuery`
- **Request**:
```csharp
- FromDate (DateTime? - شروع بازه)
- ToDate (DateTime? - پایان بازه)
- ReportType (enum: Daily, Weekly, Monthly)
```
- **Response**:
```csharp
- SalesReportDto
* TotalOrders (int - تعداد کل سفارشات)
* TotalRevenue (decimal - مجموع درآمد)
* TotalVat (decimal - مجموع مالیات)
* TotalDiscountUsed (decimal - مجموع تخفیف استفاده شده)
* AverageOrderValue (decimal - میانگین ارزش سفارش)
* TopSellingProducts (List)
- ProductId
- ProductTitle
- TotalSold
- TotalRevenue
* OrdersByStatus (Dictionary<DeliveryStatus, int>)
* DailyBreakdown (List - جزئیات روزانه)
- Date
- OrderCount
- Revenue
- VatAmount
```
- **کاربرد Admin**: تحلیل عملکرد فروش و گزارش‌گیری دوره‌ای
---
## 📋 لیست کامل Handlerهای مورد نیاز
### ✅ موجود در BackOffice.BFF (35 Handler)
@@ -305,7 +465,7 @@
7. Network Membership (3)
8. Club Membership (4)
### ⏳ نیاز به ایجاد (19 Handler)
### ✅ تکمیل شده (26 Handler)
#### گروه 1: Discount Product (5 Handlers)
1. ✅ `CreateDiscountProductHandler`
@@ -334,6 +494,17 @@
18. ✅ `GetOrderByIdHandler` ⭐⭐⭐ **خیلی مهم**
19. ✅ `GetUserOrdersHandler` ⭐⭐ **مهم**
#### گروه 5: Product Image Gallery (5 Handlers) 🆕
20. ✅ `AddDiscountProductImageCommandHandler` ⭐ **جدید**
21. ✅ `UpdateDiscountProductImageCommandHandler` **جدید**
22. ✅ `DeleteDiscountProductImageCommandHandler` **جدید**
23. ✅ `ReorderDiscountProductImagesCommandHandler` ⭐ **جدید**
24. ✅ `GetDiscountProductImagesQueryHandler` **جدید**
#### گروه 6: Admin Order Reports (2 Handlers) 🆕
25. ✅ `GetAllDiscountOrdersQueryHandler` ⭐⭐⭐ **جدید - خیلی مهم**
26. ✅ `GetDiscountSalesReportQueryHandler` ⭐⭐ **جدید - مهم**
---
## 🏗️ تغییرات مورد نیاز در BackOffice.BFF
@@ -567,6 +738,12 @@ BackOffice.BFF.Application/
- اگر پرداخت ناموفق باشد: باید موجودی برگردانده شود (در CompleteOrderPayment)
- Admin باید بتواند موجودی را دستی تغییر دهد
### ⚠️ نکته 5: VAT Calculation 🆕
- مالیات ارزش افزوده (VAT) 10% برای هر سفارش محاسبه می‌شود
- VAT روی قیمت نهایی (بعد از تخفیف) محاسبه می‌شود
- فیلد `VatAmount` در هر سفارش ذخیره می‌شود
- در گزارش فروش، مجموع VAT جداگانه نمایش داده می‌شود
---
## 📚 مستندات مرتبط
@@ -574,20 +751,25 @@ BackOffice.BFF.Application/
- [CMS Implementation Progress](../CMS/implementation-progress.md) - Phase 9 Details
- [REMAINING-TASKS-CONSOLIDATED](../REMAINING-TASKS-CONSOLIDATED.md) - Overall Project Status
- [BackOffice.BFF CMS Integration](./cms-integration.md) - Existing Integration Guide
- [CHANGELOG-2025-12-31](../../CHANGELOG-2025-12-31.md) - تغییرات این سشن 🆕
---
## ✅ Checklist پیاده‌سازی
### Backend (BackOffice.BFF)
- [ ] آپدیت IApplicationContractContext (4 Client)
- [ ] آپدیت ApplicationContractContext (Implementation)
- [ ] ایجاد 5 Handler محصولات
- [ ] ایجاد 4 Handler دسته‌بندی
- [ ] ایجاد 5 Handler سبد خرید
- [ ] ایجاد 5 Handler سفارشات
- [ ] تست تمام Handlerها
- [ ] آپدیت مستندات cms-integration.md
### Backend (BackOffice.BFF) - ✅ تکمیل شده
- [x] آپدیت IApplicationContractContext (4 Client)
- [x] آپدیت ApplicationContractContext (Implementation)
- [x] ایجاد 5 Handler محصولات
- [x] ایجاد 4 Handler دسته‌بندی
- [x] ایجاد 5 Handler سبد خرید
- [x] ایجاد 5 Handler سفارشات
- [x] ایجاد 5 Handler گالری تصاویر 🆕
- [x] ایجاد 2 Handler گزارش سفارشات 🆕
- [x] ایجاد DiscountProductService (gRPC) 🆕
- [x] ایجاد DiscountOrderService (gRPC) 🆕
- [x] تست تمام Handlerها
- [x] آپدیت مستندات cms-integration.md
### Frontend (BackOffice UI)
- [ ] صفحه لیست محصولات
@@ -596,8 +778,21 @@ BackOffice.BFF.Application/
- [ ] صفحه لیست سفارشات
- [ ] صفحه جزئیات سفارش
- [ ] صفحه Support سبد خرید
- [ ] صفحه گالری تصاویر محصول 🆕
- [ ] صفحه گزارش فروش 🆕
- [ ] تست UI با داده واقعی
---
**آماده شروع پیاده‌سازی؟** 🚀
## 🎉 وضعیت نهایی
**Backend کاملاً آماده!**
تمام APIهای لازم برای:
- مدیریت محصولات (CRUD + گالری تصاویر)
- مدیریت دسته‌بندی‌ها
- پشتیبانی سبد خرید
- مدیریت سفارشات
- گزارش‌گیری فروش
در لایه‌های BFF Application و WebApi پیاده‌سازی شده‌اند. 🚀