# 📝 Changelog - ۱۱ دی ۱۴۰۴ (31 December 2025)

> **Session**: Discount Shop Admin APIs Complete + BFF Layer Implementation

---

## 🎯 خلاصه Session

این session شامل موارد زیر بود:

1. **Product Image Gallery** - گالری تصاویر محصولات فروشگاه تخفیفی (CMS + BFF)
2. **GetAllDiscountOrders API** - API مدیریت سفارشات فروشگاه تخفیفی برای ادمین
3. **VAT Calculation** - محاسبه مالیات بر ارزش افزوده
4. **Sales Reports API** - گزارشات فروش روزانه/هفتگی/ماهانه با تقویم فارسی
5. **BFF WebApi Services** - سرویس‌های gRPC برای BackOffice.BFF

---

## ✨ تغییرات

### 1. 🖼️ Product Image Gallery (Phase 1) ✅

**توضیح**: پشتیبانی از گالری تصاویر برای محصولات فروشگاه تخفیفی

**فایل‌های CMS ایجاد شده**:

| فایل | توضیح |
|------|-------|
| `Domain/DiscountProduct/DiscountProductImage.cs` | Entity گالری تصویر |
| `Infrastructure/.../DiscountProductImageConfiguration.cs` | تنظیمات EF Core |
| `Application/.../AddDiscountProductImage/` | Command افزودن تصویر |
| `Application/.../UpdateDiscountProductImage/` | Command ویرایش تصویر |
| `Application/.../DeleteDiscountProductImage/` | Command حذف تصویر |
| `Application/.../ReorderDiscountProductImages/` | Command مرتب‌سازی تصاویر |
| `Application/.../GetDiscountProductImages/` | Query دریافت تصاویر |

**فایل‌های BFF Application ایجاد شده**:

| فایل | توضیح |
|------|-------|
| `DiscountProductCQ/Commands/AddDiscountProductImage/` | Command + Handler |
| `DiscountProductCQ/Commands/UpdateDiscountProductImage/` | Command + Handler |
| `DiscountProductCQ/Commands/DeleteDiscountProductImage/` | Command + Handler |
| `DiscountProductCQ/Commands/ReorderDiscountProductImages/` | Command + Handler |
| `DiscountProductCQ/Queries/GetDiscountProductImages/` | Query + Handler |

**Entity Structure**:
```csharp
public class DiscountProductImage : BaseEntity<long>
{
    public long DiscountProductId { get; set; }
    public string ImagePath { get; set; }
    public string? ThumbnailPath { get; set; }
    public string? Title { get; set; }
    public string? AltText { get; set; }
    public int SortOrder { get; set; }
    public bool IsActive { get; set; }
}
```

---

### 2. 📋 GetAllDiscountOrders Admin API (Phase 2) ✅

**توضیح**: API برای مدیریت تمام سفارشات فروشگاه تخفیفی توسط ادمین

**فیلترهای پشتیبانی شده**:
- `UserId` - فیلتر بر اساس کاربر
- `PaymentStatus` - وضعیت پرداخت (Pending/Success/Reject)
- `DeliveryStatus` - وضعیت ارسال
- `UserMobile` - جستجو بر اساس موبایل
- `TrackingCode` - کد رهگیری
- `FromDate` / `ToDate` - بازه زمانی
- `MinAmount` / `MaxAmount` - بازه مبلغ

**فایل‌های CMS**:
- `Application/DiscountOrderCQ/Queries/GetAllDiscountOrders/`
- `WebApi/DiscountOrderService.cs` - افزودن RPC

**فایل‌های BFF**:
- `Application/DiscountOrderCQ/Queries/GetAllDiscountOrders/`

---

### 3. 💵 VAT Calculation (Phase 3) ✅

**توضیح**: سرویس محاسبه مالیات بر ارزش افزوده (۱۰٪)

**فایل‌های ایجاد شده**:
- `CMS/Application/Common/Services/VatCalculator.cs`

**متدها**:
```csharp
public class VatCalculator : IVatCalculator
{
    public const decimal VatRate = 0.10m; // 10% VAT
    
    public decimal CalculateVat(decimal amount);
    public decimal CalculateTotalWithVat(decimal amount);
    public decimal CalculateBaseFromTotal(decimal totalWithVat);
    public (decimal baseAmount, decimal vatAmount, decimal total) CalculateBreakdown(decimal amount);
}
```

**یکپارچه‌سازی**: در `PlaceOrderCommandHandler` استفاده شده

---

### 4. 📊 Sales Reports API (Phase 4) ✅

**توضیح**: گزارشات فروش با پشتیبانی تقویم فارسی

**انواع گزارش**:
- `Summary` - خلاصه کلی
- `Daily` - روزانه
- `Weekly` - هفتگی
- `Monthly` - ماهانه

**فایل‌های CMS**:
- `Application/DiscountOrderCQ/Queries/GetDiscountSalesReport/`

**فایل‌های BFF**:
- `Application/DiscountOrderCQ/Queries/GetDiscountSalesReport/`

**Response Structure**:
```csharp
public class DiscountSalesReportDto
{
    public SalesSummaryDto Summary { get; set; }
    public List<PeriodSalesDto> Periods { get; set; }
}

public class SalesSummaryDto
{
    public int TotalOrders { get; set; }
    public int SuccessfulOrders { get; set; }
    public int PendingOrders { get; set; }
    public int RejectedOrders { get; set; }
    public decimal TotalRevenue { get; set; }
    public decimal TotalDiscountUsed { get; set; }
    public decimal TotalGatewayPayments { get; set; }
    public decimal TotalVat { get; set; }
    public int UniqueCustomers { get; set; }
}
```

---

### 5. 🔌 BFF WebApi gRPC Services (Phase 5) ✅

**توضیح**: سرویس‌های gRPC در لایه WebApi برای expose کردن APIها

**فایل‌های ایجاد شده**:

| فایل | توضیح |
|------|-------|
| `BackOffice.BFF.WebApi/Services/DiscountProductService.cs` | سرویس محصولات تخفیفی |
| `BackOffice.BFF.WebApi/Services/DiscountOrderService.cs` | سرویس سفارشات تخفیفی |

**تغییرات Proto Projects**:
```xml
<!-- Before -->
<Protobuf GrpcServices="Client" />

<!-- After -->
<Protobuf GrpcServices="Both" />
```

**فایل‌های تغییر یافته**:
- `BackOffice.BFF.DiscountProduct.Protobuf.csproj`
- `BackOffice.BFF.DiscountOrder.Protobuf.csproj`
- `BackOffice.BFF.WebApi.csproj` - افزودن references

**DiscountProductService Endpoints**:
```csharp
// Product CRUD
CreateDiscountProduct
UpdateDiscountProduct
DeleteDiscountProduct
GetDiscountProductById
GetDiscountProducts

// Image Gallery (NEW)
AddDiscountProductImage
UpdateDiscountProductImage
DeleteDiscountProductImage
ReorderDiscountProductImages
GetDiscountProductImages
```

**DiscountOrderService Endpoints**:
```csharp
// Order Management
PlaceOrder
CompleteOrderPayment
UpdateOrderStatus
GetOrderById
GetUserOrders

// Admin APIs (NEW)
GetAllDiscountOrders
GetDiscountSalesReport
```

---

## 📁 ساختار فایل‌های جدید

```
CMS/src/
├── CMSMicroservice.Application/
│   ├── Common/Services/VatCalculator.cs
│   └── DiscountOrderCQ/Queries/
│       ├── GetAllDiscountOrders/
│       │   ├── GetAllDiscountOrdersQuery.cs
│       │   └── GetAllDiscountOrdersQueryHandler.cs
│       └── GetDiscountSalesReport/
│           ├── GetDiscountSalesReportQuery.cs
│           └── GetDiscountSalesReportQueryHandler.cs
├── CMSMicroservice.Domain/DiscountProduct/
│   └── DiscountProductImage.cs
├── CMSMicroservice.Infrastructure/.../
│   └── DiscountProductImageConfiguration.cs
└── CMSMicroservice.Protobuf/Protos/
    ├── discountproduct.proto (updated)
    └── discountorder.proto (updated)

BackOffice.BFF/src/
├── BackOffice.BFF.Application/
│   ├── DiscountProductCQ/
│   │   ├── Commands/
│   │   │   ├── AddDiscountProductImage/
│   │   │   ├── UpdateDiscountProductImage/
│   │   │   ├── DeleteDiscountProductImage/
│   │   │   └── ReorderDiscountProductImages/
│   │   └── Queries/
│   │       └── GetDiscountProductImages/
│   └── DiscountOrderCQ/Queries/
│       ├── GetAllDiscountOrders/
│       └── GetDiscountSalesReport/
├── BackOffice.BFF.WebApi/Services/
│   ├── DiscountProductService.cs (NEW)
│   └── DiscountOrderService.cs (NEW)
└── Protobufs/
    ├── BackOffice.BFF.DiscountProduct.Protobuf/ (GrpcServices=Both)
    └── BackOffice.BFF.DiscountOrder.Protobuf/ (GrpcServices=Both)
```

---

## ✅ Build Status

| Project | Status |
|---------|--------|
| CMS Solution | ✅ Build Succeeded |
| BackOffice.BFF Solution | ✅ Build Succeeded |

---

## 🔜 Next Steps

1. **BackOffice UI** - اتصال پنل ادمین به APIهای جدید
2. **FrontOffice.BFF** - پیاده‌سازی APIها برای فرانت‌آفیس (اگر نیاز باشد)
3. **Unit Tests** - نوشتن تست‌های واحد
