2025-12-06 01:33:01 +03:30
|
|
|
|
# BackOffice Build Fix Status
|
|
|
|
|
|
|
|
|
|
|
|
> آخرین بروزرسانی: December 6, 2025
|
|
|
|
|
|
|
|
|
|
|
|
## وضعیت فعلی
|
|
|
|
|
|
|
|
|
|
|
|
**Build Status**: ✅ SUCCESS - 0 Error
|
|
|
|
|
|
|
|
|
|
|
|
### BackOffice.BFF Solution:
|
|
|
|
|
|
- **Build**: ✅ موفق - 0 Error
|
|
|
|
|
|
- **Proto Projects فعال**:
|
|
|
|
|
|
- ✅ BackOffice.BFF.Tag.Protobuf
|
|
|
|
|
|
- ✅ BackOffice.BFF.ProductTag.Protobuf
|
|
|
|
|
|
- ✅ BackOffice.BFF.DiscountProduct.Protobuf
|
|
|
|
|
|
- ✅ BackOffice.BFF.DiscountCategory.Protobuf
|
|
|
|
|
|
- ✅ BackOffice.BFF.DiscountOrder.Protobuf
|
|
|
|
|
|
- ✅ BackOffice.BFF.DiscountShoppingCart.Protobuf
|
|
|
|
|
|
- ✅ BackOffice.BFF.PublicMessage.Protobuf
|
|
|
|
|
|
- ✅ BackOffice.BFF.ManualPayment.Protobuf
|
|
|
|
|
|
|
|
|
|
|
|
### BackOffice UI:
|
|
|
|
|
|
- **Build**: ✅ موفق - 0 Error
|
|
|
|
|
|
- **Framework**: Blazor WebAssembly .NET 9.0
|
|
|
|
|
|
- **UI Library**: MudBlazor 8.14.0
|
|
|
|
|
|
|
|
|
|
|
|
### CMS Microservice:
|
|
|
|
|
|
- **Build**: ✅ موفق - 0 Error
|
|
|
|
|
|
|
|
|
|
|
|
**پیشرفت کلی**: از 60+ خطا به 0 خطا رسیدیم ✨
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2025-12-06 20:57:43 +03:30
|
|
|
|
## ⚠️ ملاحظات مهم Proto Packages
|
|
|
|
|
|
|
|
|
|
|
|
> **هشدار مهم**: هر تغییری در Proto files نیاز به این 3 مرحله دارد:
|
|
|
|
|
|
|
|
|
|
|
|
### چکلیست اجباری بعد از تغییر Proto:
|
|
|
|
|
|
|
|
|
|
|
|
1. **افزایش Version** در `.csproj`:
|
|
|
|
|
|
```xml
|
|
|
|
|
|
<Version>0.0.142</Version> → <Version>0.0.143</Version>
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
2. **Pack کردن** Proto project:
|
|
|
|
|
|
```bash
|
|
|
|
|
|
cd path/to/proto/project
|
|
|
|
|
|
dotnet pack -c Release
|
|
|
|
|
|
# ✅ خودکار push میشه به GitLab Registry
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
3. **Update Version** در پروژههای وابسته (لایه بالاتر):
|
|
|
|
|
|
```xml
|
|
|
|
|
|
<PackageReference Include="Foursat.CMSMicroservice.Protobuf" Version="0.0.143" />
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**مثال**: تغییر در CMS Proto → Pack → Update در BFF Protos → Pack → Update در UI
|
|
|
|
|
|
|
|
|
|
|
|
**⚠️ فراموش کردن این مراحل = Build Error یا Runtime Bug**
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2025-12-06 01:33:01 +03:30
|
|
|
|
## ماژولهای فعال شده (Enabled Modules)
|
|
|
|
|
|
|
|
|
|
|
|
### ✅ کاملاً فعال و تست شده:
|
|
|
|
|
|
|
|
|
|
|
|
1. **DiscountShop Module** (فروشگاه تخفیفی)
|
|
|
|
|
|
- ✅ DiscountProductsMainPage - مدیریت محصولات تخفیفی
|
|
|
|
|
|
- ✅ DiscountCategoriesMainPage - مدیریت دستهبندیها (با MudDataGrid)
|
|
|
|
|
|
- ✅ DiscountOrdersMainPage - مدیریت سفارشات
|
|
|
|
|
|
- ✅ SalesReports - گزارش فروش
|
|
|
|
|
|
- ✅ ProductImageGallery - گالری تصاویر (با MudBlazor 8 fixes)
|
|
|
|
|
|
- Services: IDiscountProductService, IDiscountCategoryService, IDiscountOrderService
|
|
|
|
|
|
|
|
|
|
|
|
2. **PublicMessages Module** (پیامهای عمومی)
|
|
|
|
|
|
- ✅ PublicMessagesMainPage - مدیریت پیامها
|
|
|
|
|
|
- ✅ MessageFormDialog - فرم ایجاد/ویرایش
|
|
|
|
|
|
- ✅ MessageViewDialog - نمایش جزئیات
|
|
|
|
|
|
- ✅ MessageTemplatesDialog - قالبهای آماده
|
|
|
|
|
|
- Services: IPublicMessageService
|
|
|
|
|
|
- Proto: BackOffice.BFF.PublicMessage.Protobuf
|
|
|
|
|
|
|
|
|
|
|
|
3. **ManualPayment Module** (پرداختهای دستی)
|
|
|
|
|
|
- ✅ ManualPayments - صفحه اصلی مدیریت
|
|
|
|
|
|
- ✅ ManualPaymentDialog - فرم ایجاد و تایید/رد
|
|
|
|
|
|
- Services: Direct gRPC to ManualPaymentContract
|
|
|
|
|
|
- Proto: BackOffice.BFF.ManualPayment.Protobuf
|
|
|
|
|
|
|
|
|
|
|
|
4. **Tag Module** (برچسبها)
|
|
|
|
|
|
- ✅ TagManagementPage - مدیریت تگها
|
|
|
|
|
|
- ✅ TagEditDialog - ویرایش تگ
|
|
|
|
|
|
- Services: ITagService, IProductTagService
|
|
|
|
|
|
- Proto: BackOffice.BFF.Tag.Protobuf, BackOffice.BFF.ProductTag.Protobuf
|
|
|
|
|
|
|
|
|
|
|
|
5. **Dashboard Widgets**
|
|
|
|
|
|
- ✅ DiscountShopWidget - آمار فروشگاه تخفیفی (7 روز اخیر)
|
|
|
|
|
|
|
|
|
|
|
|
6. **Payment Pages**
|
|
|
|
|
|
- ✅ Transactions - صفحه تراکنشها
|
|
|
|
|
|
|
|
|
|
|
|
7. **DragDrop Pages**
|
|
|
|
|
|
- ✅ CategoryProductsDragDropPage - مدیریت محصولات دسته
|
|
|
|
|
|
- ✅ ProductCategoriesDragDropPage - مدیریت دستههای محصول
|
|
|
|
|
|
|
|
|
|
|
|
8. **BulkEdit Module**
|
|
|
|
|
|
- ✅ BulkEdit - ویرایش گروهی محصولات (قیمت، موجودی، وضعیت)
|
|
|
|
|
|
- Proto: BackOffice.BFF.Products.Protobuf (BulkUpdateProductPrices, BulkUpdateProductStock, ToggleProductStatus)
|
|
|
|
|
|
- Note: استفاده از `BackOffice.BFF.Protobuf.Common.PaginationState` با using alias
|
|
|
|
|
|
|
2025-12-06 20:57:43 +03:30
|
|
|
|
9. **Product Image Management** - ✅ FULLY OPERATIONAL
|
|
|
|
|
|
- ✅ GalleryDialog - گالری تصاویر محصول
|
|
|
|
|
|
- ✅ CreateDialog - ایجاد محصول با آپلود تصویر
|
|
|
|
|
|
- ✅ UpdateDialog - ویرایش محصول با آپلود تصویر
|
|
|
|
|
|
- ✅ Proto: GetProductGallery, AddProductImage, RemoveProductImage
|
|
|
|
|
|
- ✅ Messages: ImageFileModel, ProductGalleryItem
|
|
|
|
|
|
- ✅ Backend: ProductsService methods uncommented and active
|
|
|
|
|
|
- ✅ CQRS Handlers: AddProductImageCommandHandler, GetProductGalleryQueryHandler, RemoveProductImageCommandHandler
|
|
|
|
|
|
- ✅ CMS Integration: ProductGalleries microservice connected
|
|
|
|
|
|
- ✅ Image Optimization: SixLabors.ImageSharp (1200x1200 + 300x300 thumbnail)
|
|
|
|
|
|
|
2025-12-06 01:33:01 +03:30
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## ماژولهای Exclude شده (نیاز به کار اضافی)
|
|
|
|
|
|
|
2025-12-06 20:57:43 +03:30
|
|
|
|
**هیچ فایلی Exclude نیست!** ✅
|
2025-12-06 01:33:01 +03:30
|
|
|
|
|
2025-12-06 20:57:43 +03:30
|
|
|
|
تمامی صفحات و کامپوننتها build میشوند. فقط Backend implementation برای Image Upload لازمه.
|
2025-12-06 01:33:01 +03:30
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## تغییرات مهم MudBlazor 8
|
|
|
|
|
|
|
|
|
|
|
|
### Breaking Changes برطرف شده:
|
|
|
|
|
|
|
|
|
|
|
|
1. **MudDialogInstance → IMudDialogInstance**
|
|
|
|
|
|
```csharp
|
|
|
|
|
|
// قبلی:
|
|
|
|
|
|
[CascadingParameter] MudDialogInstance MudDialog { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
// جدید:
|
|
|
|
|
|
[CascadingParameter] IMudDialogInstance MudDialog { get; set; }
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
2. **MudSwitch نیاز به T parameter**
|
|
|
|
|
|
```razor
|
|
|
|
|
|
<!-- قبلی: -->
|
|
|
|
|
|
<MudSwitch @bind-Checked="Model.IsActive" />
|
|
|
|
|
|
|
|
|
|
|
|
<!-- جدید: -->
|
|
|
|
|
|
<MudSwitch T="bool" @bind-Value="Model.IsActive" />
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
3. **MudChip نیاز به T parameter**
|
|
|
|
|
|
```razor
|
|
|
|
|
|
<!-- قبلی: -->
|
|
|
|
|
|
<MudChip>Text</MudChip>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- جدید: -->
|
|
|
|
|
|
<MudChip T="string">Text</MudChip>
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
4. **MudTreeView تغییر API**
|
|
|
|
|
|
- راهحل: جایگزینی با `MudDataGrid` در DiscountCategoriesMainPage
|
|
|
|
|
|
|
|
|
|
|
|
5. **MudFileUpload تغییر signature**
|
|
|
|
|
|
```csharp
|
|
|
|
|
|
// FilesChanged حالا IBrowserFile میگیرد نه IReadOnlyList
|
|
|
|
|
|
<MudFileUpload T="IReadOnlyList<IBrowserFile>" FilesChanged="OnFilesSelected" />
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
6. **DragEventArgs.PreventDefault() حذف شد**
|
|
|
|
|
|
```razor
|
|
|
|
|
|
<!-- استفاده از directive attribute: -->
|
|
|
|
|
|
@ondragover:preventDefault
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## تغییرات Proto
|
|
|
|
|
|
|
|
|
|
|
|
### 1. Google.Protobuf.WellKnownTypes Simplification
|
|
|
|
|
|
|
|
|
|
|
|
در همه جا از wrapper به مقدار مستقیم تغییر یافت:
|
|
|
|
|
|
|
|
|
|
|
|
```csharp
|
|
|
|
|
|
// قبلی (اشتباه):
|
|
|
|
|
|
request.UserId = new Google.Protobuf.WellKnownTypes.Int64Value { Value = userId };
|
|
|
|
|
|
request.Status = new Google.Protobuf.WellKnownTypes.Int32Value { Value = status };
|
|
|
|
|
|
request.ReferenceNumber = new Google.Protobuf.WellKnownTypes.StringValue { Value = refNum };
|
|
|
|
|
|
|
|
|
|
|
|
// جدید (صحیح):
|
|
|
|
|
|
request.UserId = userId;
|
|
|
|
|
|
request.Status = status;
|
|
|
|
|
|
request.ReferenceNumber = refNum;
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2. Timestamp to DateTime Conversion
|
|
|
|
|
|
|
|
|
|
|
|
```csharp
|
|
|
|
|
|
// Proto Timestamp به DateTime تبدیل میشود:
|
|
|
|
|
|
var dateTime = timestamp.ToDateTime(); // به جای ToLocalTime()
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## تغییرات معماری
|
|
|
|
|
|
|
|
|
|
|
|
### BasePageComponent Pattern
|
|
|
|
|
|
|
|
|
|
|
|
صفحات با فیلتر از `BasePageComponent` استفاده میکنند ولی `ReloadAsync()` ندارد.
|
|
|
|
|
|
راهحل: استفاده مستقیم از `MudDataGrid.ReloadServerData()`:
|
|
|
|
|
|
|
|
|
|
|
|
```csharp
|
|
|
|
|
|
private MudDataGrid<ModelType>? _dataGrid;
|
|
|
|
|
|
|
|
|
|
|
|
private async Task OnFilterSubmit()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (_dataGrid != null)
|
|
|
|
|
|
await _dataGrid.ReloadServerData();
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
- `ProductGalleryImage`
|
|
|
|
|
|
- `GetCategoriesRequest/Response`
|
|
|
|
|
|
- `UpdateProductCategoriesRequest`
|
|
|
|
|
|
- `GetProductsForCategoryRequest/Response`
|
|
|
|
|
|
- `UpdateCategoryProductsRequest`
|
|
|
|
|
|
|
|
|
|
|
|
### 3. تغییرات csproj
|
|
|
|
|
|
|
|
|
|
|
|
**Products از NuGet به ProjectReference تغییر کرد**:
|
|
|
|
|
|
```xml
|
|
|
|
|
|
<!-- قبلی: -->
|
|
|
|
|
|
<PackageReference Include="Foursat.BackOffice.BFF.Products.Protobuf" Version="0.0.8" />
|
|
|
|
|
|
|
|
|
|
|
|
<!-- جدید: -->
|
|
|
|
|
|
<ProjectReference Include="../../../BackOffice.BFF/src/Protobufs/BackOffice.BFF.Products.Protobuf/BackOffice.BFF.Products.Protobuf.csproj" />
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 4. فیکسهای MudBlazor
|
|
|
|
|
|
|
|
|
|
|
|
**MudSwitch T parameter**:
|
|
|
|
|
|
- `Pages/Settings/UserSettings.razor`
|
|
|
|
|
|
- `Pages/Club/ClubMembers.razor`
|
|
|
|
|
|
- `Pages/Configuration/Configuration.razor`
|
|
|
|
|
|
|
|
|
|
|
|
```razor
|
|
|
|
|
|
<!-- قبلی: -->
|
|
|
|
|
|
<MudSwitch @bind-Value="..." />
|
|
|
|
|
|
|
|
|
|
|
|
<!-- جدید: -->
|
|
|
|
|
|
<MudSwitch T="bool" @bind-Value="..." />
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 5. فیکس Snackbar Duplicate
|
|
|
|
|
|
|
|
|
|
|
|
در فایلهای زیر `[Inject] ISnackbar Snackbar` حذف شد (چون در `_Imports.razor` inject شده):
|
|
|
|
|
|
- `ApplyDiscountDialog.razor.cs`
|
|
|
|
|
|
- `CancelOrderDialog.razor.cs`
|
|
|
|
|
|
- `ChangeOrderStatusDialog.razor.cs`
|
|
|
|
|
|
|
|
|
|
|
|
### 6. فیکس ConfigureService.cs
|
|
|
|
|
|
|
|
|
|
|
|
Using های زیر comment شدند:
|
|
|
|
|
|
```csharp
|
|
|
|
|
|
// using BackOffice.Services.DiscountProduct;
|
|
|
|
|
|
// using BackOffice.Services.DiscountCategory;
|
|
|
|
|
|
// using BackOffice.Services.DiscountOrder;
|
|
|
|
|
|
// using BackOffice.Services.Tag;
|
|
|
|
|
|
// using BackOffice.Services.ProductTag;
|
|
|
|
|
|
// using BackOffice.Services.PublicMessage;
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## کارهای باقیمانده (TODO)
|
|
|
|
|
|
|
|
|
|
|
|
### فوری - نیاز به Proto Methods:
|
|
|
|
|
|
|
|
|
|
|
|
#### 1. Product Image Management
|
|
|
|
|
|
**فایلهای Excluded**:
|
|
|
|
|
|
- `Pages/Products/Components/GalleryDialog.razor`
|
|
|
|
|
|
- `Pages/Products/Components/CreateDialog.razor`
|
|
|
|
|
|
- `Pages/Products/Components/UpdateDialog.razor`
|
|
|
|
|
|
|
|
|
|
|
|
**Proto Methods مورد نیاز در `products.proto`**:
|
|
|
|
|
|
```protobuf
|
|
|
|
|
|
service ProductsContract {
|
|
|
|
|
|
// برای GalleryDialog:
|
|
|
|
|
|
rpc AddProductImage(AddProductImageRequest) returns (AddProductImageResponse);
|
|
|
|
|
|
rpc RemoveProductImage(RemoveProductImageRequest) returns (google.protobuf.Empty);
|
|
|
|
|
|
|
|
|
|
|
|
// برای Create/Update Dialogs:
|
|
|
|
|
|
rpc CreateProductWithImage(CreateProductWithImageRequest) returns (CreateProductResponse);
|
|
|
|
|
|
rpc UpdateProductWithImage(UpdateProductWithImageRequest) returns (google.protobuf.Empty);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
message ImageFileModel {
|
|
|
|
|
|
bytes file = 1;
|
|
|
|
|
|
string mime = 2;
|
|
|
|
|
|
string file_name = 3;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
message AddProductImageRequest {
|
|
|
|
|
|
int64 product_id = 1;
|
|
|
|
|
|
string title = 2;
|
|
|
|
|
|
ImageFileModel image_file = 3;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
message AddProductImageResponse {
|
|
|
|
|
|
int64 product_gallery_id = 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
message RemoveProductImageRequest {
|
|
|
|
|
|
int64 product_gallery_id = 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
message CreateProductWithImageRequest {
|
|
|
|
|
|
// ... سایر فیلدهای محصول
|
|
|
|
|
|
ImageFileModel image_file = 1;
|
|
|
|
|
|
ImageFileModel thumbnail_file = 2;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
message UpdateProductWithImageRequest {
|
|
|
|
|
|
int64 id = 1;
|
|
|
|
|
|
// ... سایر فیلدها
|
|
|
|
|
|
ImageFileModel image_file = 2;
|
|
|
|
|
|
ImageFileModel thumbnail_file = 3;
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**وضعیت**: 🔴 نیاز به پیادهسازی در Backend
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
#### 2. BulkEdit Refactoring
|
|
|
|
|
|
**فایل Excluded**: `Pages/Products/BulkEdit.razor`
|
|
|
|
|
|
|
|
|
|
|
|
**مشکل**: استفاده مستقیم از `CMSMicroservice.Protobuf.Protos`
|
|
|
|
|
|
|
|
|
|
|
|
**راهحل**:
|
|
|
|
|
|
1. حذف dependency به `CMSMicroservice.Protobuf`
|
|
|
|
|
|
2. افزودن bulk update methods به `products.proto`:
|
|
|
|
|
|
|
|
|
|
|
|
```protobuf
|
|
|
|
|
|
service ProductsContract {
|
|
|
|
|
|
rpc BulkUpdateProducts(BulkUpdateProductsRequest) returns (BulkUpdateProductsResponse);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
message BulkUpdateProductsRequest {
|
|
|
|
|
|
repeated int64 product_ids = 1;
|
|
|
|
|
|
google.protobuf.Int64Value new_price = 2;
|
|
|
|
|
|
google.protobuf.Int32Value new_discount = 3;
|
|
|
|
|
|
google.protobuf.Int32Value new_club_discount_percent = 4;
|
|
|
|
|
|
StockUpdateOperation stock_operation = 5;
|
|
|
|
|
|
google.protobuf.BoolValue status_enable = 6;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
enum StockUpdateOperation {
|
|
|
|
|
|
STOCK_NO_CHANGE = 0;
|
|
|
|
|
|
STOCK_SET = 1;
|
|
|
|
|
|
STOCK_ADD = 2;
|
|
|
|
|
|
STOCK_SUBTRACT = 3;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
message BulkUpdateProductsResponse {
|
|
|
|
|
|
int32 updated_count = 1;
|
|
|
|
|
|
repeated int64 failed_product_ids = 2;
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**وضعیت**: 🔴 نیاز به پیادهسازی در Backend
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
### اختیاری - بهبودها:
|
|
|
|
|
|
|
|
|
|
|
|
#### 3. Transactions API Implementation
|
|
|
|
|
|
**فایل**: `Pages/Payment/Transactions.razor`
|
|
|
|
|
|
|
|
|
|
|
|
**وضعیت فعلی**: ✅ Enabled ولی متد `LoadData` فقط `TODO` دارد
|
|
|
|
|
|
|
|
|
|
|
|
**نیاز**: پیادهسازی Transaction API در Backend
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## آمار نهایی
|
|
|
|
|
|
|
|
|
|
|
|
### ماژولهای فعال: 7 ✅
|
|
|
|
|
|
1. DiscountShop (Products, Categories, Orders, Reports)
|
|
|
|
|
|
2. PublicMessages
|
|
|
|
|
|
3. ManualPayments
|
|
|
|
|
|
4. Tag Management
|
|
|
|
|
|
5. Dashboard DiscountShopWidget
|
|
|
|
|
|
6. Transactions Page
|
|
|
|
|
|
7. DragDrop Pages (Category ↔ Products)
|
|
|
|
|
|
|
|
|
|
|
|
### ماژولهای Excluded: 3 ❌
|
|
|
|
|
|
1. GalleryDialog (نیاز به Image Upload API)
|
|
|
|
|
|
2. CreateDialog/UpdateDialog (نیاز به Image Upload API)
|
|
|
|
|
|
3. BulkEdit (نیاز به Refactoring + Bulk API)
|
|
|
|
|
|
|
|
|
|
|
|
### Build Errors: 0 🎉
|
|
|
|
|
|
### Proto Projects: 14 فعال
|
|
|
|
|
|
### صفحات فعال: ~30+
|
|
|
|
|
|
### کامپوننتهای فعال: ~50+
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Handler های موقتاً Exclude شده در BackOffice.BFF.Application
|
|
|
|
|
|
|
|
|
|
|
|
### فایلهای Exclude شده:
|
|
|
|
|
|
```xml
|
|
|
|
|
|
<Compile Remove="DiscountOrderCQ/**/*.cs" />
|
|
|
|
|
|
<Compile Remove="DiscountShoppingCartCQ/**/*.cs" />
|
|
|
|
|
|
<Compile Remove="ManualPaymentCQ/**/*.cs" />
|
|
|
|
|
|
<Compile Remove="ConfigurationCQ/**/*.cs" />
|
|
|
|
|
|
<Compile Remove="CommissionCQ/Commands/ProcessWithdrawal/**/*.cs" />
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### دلیل Exclude:
|
|
|
|
|
|
این Handler ها فیلدهای متفاوتی با proto های CMS دارند و نیاز به بازنویسی دارند.
|
|
|
|
|
|
|
|
|
|
|
|
### مثال عدم تطابق DiscountOrder:
|
|
|
|
|
|
**Handler انتظار دارد:**
|
|
|
|
|
|
- Request: `UserId`, `AddressId`, `DiscountBalanceAmount`, `GatewayAmount`
|
|
|
|
|
|
- Response: `OrderId`, `TrackingCode`, `RequiresGatewayPayment`, `GatewayPayableAmount`
|
|
|
|
|
|
|
|
|
|
|
|
**Proto CMS دارد:**
|
|
|
|
|
|
- Request: `user_id`, `user_address_id`, `discount_balance_to_use`, `notes`
|
|
|
|
|
|
- Response: `success`, `message`, `order_id`, `gateway_amount`, `payment_url`
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Proto Update های مورد نیاز
|
|
|
|
|
|
|
|
|
|
|
|
### UserOrder.Protobuf
|
|
|
|
|
|
متدهای زیر باید اضافه شوند:
|
|
|
|
|
|
- `CancelOrderAsync(CancelOrderRequest)`
|
|
|
|
|
|
- `ApplyDiscountToOrderAsync(ApplyDiscountToOrderRequest)`
|
|
|
|
|
|
- `UpdateOrderStatusAsync(UpdateOrderStatusRequest)`
|
|
|
|
|
|
|
|
|
|
|
|
فیلدهای زیر باید اضافه شوند:
|
|
|
|
|
|
- `VatAmount`
|
|
|
|
|
|
- `VatPercentage`
|
|
|
|
|
|
- `VatBaseAmount`
|
|
|
|
|
|
- `VatTotalAmount`
|
|
|
|
|
|
- `PaymentStatus.None`
|
|
|
|
|
|
|
|
|
|
|
|
### Products.Protobuf
|
|
|
|
|
|
متدهای زیر باید اضافه شوند:
|
|
|
|
|
|
- `AddProductImageAsync`
|
|
|
|
|
|
- `RemoveProductImageAsync`
|
|
|
|
|
|
|
|
|
|
|
|
فیلدهای زیر باید اضافه شوند:
|
|
|
|
|
|
- `ImageFile` (bytes)
|
|
|
|
|
|
- `ThumbnailFile` (bytes)
|
|
|
|
|
|
- `ImageFileModel` message
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## دستورات برای ادامه کار
|
|
|
|
|
|
|
|
|
|
|
|
### 1. اجرای build برای دیدن خطاهای فعلی:
|
|
|
|
|
|
```bash
|
|
|
|
|
|
cd /home/masoud/Apps/project/FourSat/BackOffice/src/BackOffice
|
|
|
|
|
|
dotnet build 2>&1 | grep -E "error CS|Error"
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2. فایلهای مهم برای بررسی:
|
|
|
|
|
|
- `BackOffice.csproj` - لیست exclude ها و references
|
|
|
|
|
|
- `ConfigureService.cs` - DI registrations
|
|
|
|
|
|
- `_Imports.razor` - global using و inject ها
|
|
|
|
|
|
|
|
|
|
|
|
### 3. Proto فایلهای مهم:
|
|
|
|
|
|
- `BackOffice.BFF/src/Protobufs/BackOffice.BFF.Products.Protobuf/Protos/products.proto`
|
|
|
|
|
|
- `BackOffice.BFF/src/Protobufs/BackOffice.BFF.UserOrder.Protobuf/Protos/userorder.proto`
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## چکلیست برای chat جدید
|
|
|
|
|
|
|
|
|
|
|
|
- [ ] خطاهای build رو چک کن
|
|
|
|
|
|
- [ ] `PaginationState` namespace رو فیکس کن
|
|
|
|
|
|
- [ ] `WithdrawalReports` binding رو فیکس کن
|
|
|
|
|
|
- [ ] `OpenGalleryDialog` رو comment کن در `ProductsMainPage`
|
|
|
|
|
|
- [ ] `DiscountShopWidget` رو از `SystemOverview` حذف کن
|
|
|
|
|
|
- [ ] تست build موفق
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## نکات مهم
|
|
|
|
|
|
|
|
|
|
|
|
1. **هیچ فایلی حذف نشده** - فقط از build exclude شدند
|
|
|
|
|
|
2. **Proto های local** از ProjectReference استفاده میکنند نه NuGet
|
|
|
|
|
|
3. **MudBlazor 8.14.0** نیاز به `T` parameter برای generic components دارد
|
|
|
|
|
|
4. **Snackbar** در `_Imports.razor` inject شده، نباید در component ها duplicate بشه
|