165 lines
6.2 KiB
Markdown
165 lines
6.2 KiB
Markdown
# فیچر فعالسازی (پرداخت) دستی باشگاه مشتریان
|
|
|
|
## خلاصه
|
|
این فیچر امکان فعالسازی دستی عضویت باشگاه مشتریان را برای ادمین فراهم میکند. ادمین میتواند کاربر را انتخاب کرده، تصویر فیش پرداخت را آپلود کند و عضویت را فعال کند.
|
|
|
|
## تاریخ: 2 ژانویه 2026
|
|
|
|
---
|
|
|
|
## تغییرات انجام شده
|
|
|
|
### 1. CMS (Backend)
|
|
|
|
#### Entity - `ManualPayment.cs`
|
|
- اضافه شدن فیلد `ImageDocumentId` برای ذخیره شناسه سند در FMS
|
|
|
|
```csharp
|
|
public long? ImageDocumentId { get; set; }
|
|
```
|
|
|
|
#### Proto - `manualpayment.proto`
|
|
- اضافه شدن `image_document_id` به `CreateManualPaymentRequest` (فیلد 7)
|
|
- اضافه شدن `image_document_id` به `ManualPaymentModel` (فیلد 21)
|
|
|
|
#### Command - `CreateManualPaymentCommand.cs`
|
|
- اضافه شدن پراپرتی `ImageDocumentId`
|
|
|
|
#### Handler - `CreateManualPaymentCommandHandler.cs`
|
|
- ذخیره `ImageDocumentId` از request در entity
|
|
|
|
---
|
|
|
|
### 2. BFF (Backend For Frontend)
|
|
|
|
#### Proto - `manualpayment.proto`
|
|
- اضافه شدن `image_document_id` به `ManualPaymentModel` (فیلد 21)
|
|
- اضافه شدن `FileUploadModel` برای آپلود فایل
|
|
- اضافه شدن `image_file` به `CreateManualPaymentRequest`
|
|
|
|
#### Command - `CreateManualPaymentCommand.cs`
|
|
- اضافه شدن `FileUploadDto` برای دریافت فایل از فرانت
|
|
|
|
#### Handler - `CreateManualPaymentCommandHandler.cs`
|
|
- اتصال به FMS برای آپلود فایل
|
|
- استخراج `ImagePath` و `ImageDocumentId` از پاسخ FMS
|
|
- ارسال هر دو به CMS
|
|
|
|
```csharp
|
|
var fileInfo = await _context.FileInfos.CreateNewFileInfoAsync(new()
|
|
{
|
|
Directory = "Images/ManualPayments",
|
|
IsBase64 = false,
|
|
MIME = request.ImageFile.Mime,
|
|
FileName = request.ImageFile.FileName,
|
|
File = ByteString.CopyFrom(request.ImageFile.File)
|
|
}, cancellationToken: cancellationToken);
|
|
|
|
if (fileInfo != null)
|
|
{
|
|
if (!string.IsNullOrWhiteSpace(fileInfo.File))
|
|
grpcRequest.ImagePath = fileInfo.File;
|
|
if (fileInfo.Id > 0)
|
|
grpcRequest.ImageDocumentId = fileInfo.Id;
|
|
}
|
|
```
|
|
|
|
#### Query Handler - `GetManualPaymentsQueryHandler.cs`
|
|
- اضافه شدن mapping برای `ImagePath` و `ImageDocumentId`
|
|
|
|
#### DTO - `GetManualPaymentsResponseDto.cs`
|
|
- اضافه شدن فیلدهای:
|
|
```csharp
|
|
public string? ImagePath { get; set; }
|
|
public long? ImageDocumentId { get; set; }
|
|
```
|
|
|
|
#### Mapping - `ManualPaymentProfile.cs`
|
|
- اضافه شدن mapping برای `FileUploadModel -> FileUploadDto`
|
|
|
|
---
|
|
|
|
### 3. Frontend (Blazor)
|
|
|
|
#### `ManualPaymentDialog.razor`
|
|
- استفاده از `UserAutoComplete` برای انتخاب کاربر
|
|
- استفاده از `MudFileUpload` برای آپلود تصویر فیش
|
|
- استفاده از `MudSelect` برای انتخاب نوع پرداخت
|
|
- پیشنمایش تصویر قبل از ارسال
|
|
- تغییر عنوانها از "پرداخت دستی" به "فعالسازی دستی"
|
|
|
|
#### `ManualPaymentDialog.razor.cs`
|
|
- هندل کردن انتخاب فایل با `IBrowserFile`
|
|
- تبدیل فایل به Base64 برای پیشنمایش
|
|
- ایجاد `FileUploadModel` برای ارسال به BFF
|
|
- مقادیر پیشفرض:
|
|
- `Type = 1` (واریز نقدی)
|
|
- `Description = "عضویت دستی باشگاه مشتریان"`
|
|
|
|
#### `ManualPayments.razor`
|
|
- تغییر عنوان صفحه به "فعالسازی (پرداخت) دستی"
|
|
- تغییر دکمه به "ثبت فعالسازی دستی جدید"
|
|
|
|
#### `NavMenu.razor`
|
|
- حذف آیتم منوی "پرداخت دستی عضویت"
|
|
- تغییر نام "پرداختهای دستی" به "فعالسازی (پرداخت) دستی"
|
|
|
|
#### حذف شده
|
|
- `ManualMembershipPayment.razor` و `ManualMembershipPayment.razor.cs`
|
|
|
|
---
|
|
|
|
## مقادیر ثابت
|
|
|
|
```csharp
|
|
// مبلغ پایه پکیج: 56 میلیون ریال
|
|
SystemConstants.BasePackageAmount = 56_000_000;
|
|
|
|
// شارژ کیف پول:
|
|
// - مجموع شارژ: 56M ریال
|
|
```
|
|
|
|
---
|
|
|
|
## فلو کامل
|
|
|
|
1. ادمین کاربر را با `UserAutoComplete` انتخاب میکند
|
|
2. نوع پرداخت را انتخاب میکند (پیشفرض: واریز نقدی)
|
|
3. توضیحات را وارد میکند (پیشفرض: عضویت دستی باشگاه مشتریان)
|
|
4. تصویر فیش را آپلود میکند (اختیاری)
|
|
5. دکمه ثبت را میزند
|
|
6. Frontend فایل را به BFF ارسال میکند
|
|
7. BFF فایل را به FMS آپلود میکند
|
|
8. FMS مسیر فایل (`File`) و شناسه سند (`Id`) را برمیگرداند
|
|
9. BFF هر دو را به CMS ارسال میکند
|
|
10. CMS تراکنش، پرداخت دستی و لاگ کیف پول را ثبت میکند
|
|
11. کیف پول کاربر شارژ میشود
|
|
|
|
---
|
|
|
|
## فایلهای تغییر یافته
|
|
|
|
### CMS
|
|
- `CMSMicroservice.Domain/Entities/Payment/ManualPayment.cs`
|
|
- `CMSMicroservice.Application/ManualPaymentCQ/Commands/CreateManualPayment/CreateManualPaymentCommand.cs`
|
|
- `CMSMicroservice.Application/ManualPaymentCQ/Commands/CreateManualPayment/CreateManualPaymentCommandHandler.cs`
|
|
- `Protos/manualpayment.proto`
|
|
|
|
### BFF
|
|
- `BackOffice.BFF.Application/ManualPaymentCQ/Commands/CreateManualPayment/CreateManualPaymentCommand.cs`
|
|
- `BackOffice.BFF.Application/ManualPaymentCQ/Commands/CreateManualPayment/CreateManualPaymentCommandHandler.cs`
|
|
- `BackOffice.BFF.Application/ManualPaymentCQ/Queries/GetManualPayments/GetManualPaymentsQueryHandler.cs`
|
|
- `BackOffice.BFF.Application/ManualPaymentCQ/Queries/GetManualPayments/GetManualPaymentsResponseDto.cs`
|
|
- `BackOffice.BFF.Application/ManualPaymentCQ/ManualPaymentProfile.cs`
|
|
- `Protobufs/BackOffice.BFF.ManualPayment.Protobuf/Protos/manualpayment.proto`
|
|
|
|
### Frontend
|
|
- `BackOffice/Pages/Payment/Components/ManualPaymentDialog.razor`
|
|
- `BackOffice/Pages/Payment/Components/ManualPaymentDialog.razor.cs`
|
|
- `BackOffice/Pages/Payment/ManualPayments.razor`
|
|
- `BackOffice/Shared/NavMenu.razor`
|
|
|
|
### حذف شده
|
|
- `BackOffice.Main/Pages/Payment/ManualMembershipPayment.razor`
|
|
- `BackOffice.Main/Pages/Payment/ManualMembershipPayment.razor.cs`
|