This commit is contained in:
masoodafar-web
2026-01-03 18:27:49 +03:30
parent 0369292d7f
commit 5965b98728
156 changed files with 16082 additions and 0 deletions
+383
View File
@@ -0,0 +1,383 @@
# 📝 Changelog - ۶ دی ۱۴۰۴ (26 December 2025)
> **Session**: سیستم مدیریت نسخه اپلیکیشن (App Version Management) + نمایش کد معرف در درخت شبکه
---
## 🎯 خلاصه Session
این session شامل موارد زیر بود:
1. **App Version Management** - سیستم کامل مدیریت نسخه اپلیکیشن‌های موبایل
2. **ReferralCode در NetworkTree** - نمایش کد معرف در درخت شبکه FrontOffice
3. **BackOffice UI** - صفحه مدیریت نسخه‌ها در پنل ادمین
---
## ✨ New Features
### 1. 📱 سیستم مدیریت نسخه اپلیکیشن (App Version Management) ✅
**نیاز**: مدیریت نسخه‌های اپلیکیشن‌های موبایل و کنترل به‌روزرسانی اجباری
**معماری**:
```
┌─────────────────────────────────────────────────────────────┐
│ Flow Diagram │
├─────────────────────────────────────────────────────────────┤
│ │
│ BackOffice UI ──(gRPC)──► BackOffice.BFF ──(gRPC)──► CMS │
│ (Blazor) (API Gateway) (Database) │
│ │
│ /settings/app-versions AppVersionService AppVersions │
│ Table │
└─────────────────────────────────────────────────────────────┘
```
---
#### 1.1 CMS Layer (Database + gRPC) ✅
**Entity**: `AppVersion.cs` (موجود)
```csharp
public class AppVersion : BaseAuditableEntity
{
public string AppName { get; set; } // FoursatMarketApp, FoursatClubApp
public string CurrentVersion { get; set; } // 1.2.0
public string MinRequiredVersion { get; set; } // 1.0.0
public bool RequiresFullCacheClear { get; set; }
public string UpdateMessage { get; set; }
public string ReleaseNotes { get; set; }
public bool IsActive { get; set; }
}
```
**Protobuf**: `appversion.proto`
```protobuf
service AppVersionContract {
rpc GetAllAppVersions(GetAllAppVersionsRequest) returns (GetAllAppVersionsResponse);
rpc GetAppVersion(GetAppVersionRequest) returns (GetAppVersionResponse);
rpc UpdateAppVersion(UpdateAppVersionRequest) returns (google.protobuf.Empty);
}
```
**فایل‌ها**:
- `CMSMicroservice.Protobuf/Protos/appversion.proto`
- `CMSMicroservice.WebApi/Services/AppVersionService.cs`
- پکیج NuGet: `CMSMicroservice.Protobuf` v0.0.159
---
#### 1.2 BackOffice.BFF Layer ✅
**Protobuf اختصاصی**: `BackOffice.BFF.Configuration.Protobuf/Protos/appversion.proto`
```protobuf
option csharp_namespace = "BackOffice.BFF.Configuration.Protobuf.Protos.AppVersion";
service AppVersionContract {
rpc GetAllAppVersions(GetAllAppVersionsRequest) returns (GetAllAppVersionsResponse) {
option (google.api.http) = { get: "/AppVersion/GetAll" };
};
rpc GetAppVersion(GetAppVersionRequest) returns (GetAppVersionResponse) {
option (google.api.http) = { get: "/AppVersion/Get" };
};
rpc UpdateAppVersion(UpdateAppVersionRequest) returns (google.protobuf.Empty) {
option (google.api.http) = { post: "/AppVersion/Update" body: "*" };
};
}
```
**CQRS Components**:
| Component | Path | Description |
|-----------|------|-------------|
| `GetAllAppVersionsQuery` | ConfigurationCQ/Queries/ | Query با `IncludeInactive` |
| `GetAllAppVersionsResponseDto` | ConfigurationCQ/Queries/ | Response DTO با لیست آیتم‌ها |
| `GetAllAppVersionsQueryHandler` | ConfigurationCQ/Queries/ | Handler که CMS رو کال می‌کنه |
| `UpdateAppVersionCommand` | ConfigurationCQ/Commands/ | Command برای آپدیت |
| `UpdateAppVersionCommandHandler` | ConfigurationCQ/Commands/ | Handler که CMS رو کال می‌کنه |
**gRPC Service**: `AppVersionService.cs`
```csharp
public class AppVersionService : AppVersionContract.AppVersionContractBase
{
public override async Task<GetAllAppVersionsResponse> GetAllAppVersions(...)
public override async Task<GetAppVersionResponse> GetAppVersion(...)
public override async Task<Empty> UpdateAppVersion(...)
}
```
**Mapster Profile**: `AppVersionProfile.cs`
**فایل‌های جدید**:
- `src/BackOffice.BFF.Application/ConfigurationCQ/Queries/GetAllAppVersions/*`
- `src/BackOffice.BFF.Application/ConfigurationCQ/Commands/UpdateAppVersion/*`
- `src/BackOffice.BFF.WebApi/Services/AppVersionService.cs`
- `src/BackOffice.BFF.WebApi/Common/Mappings/AppVersionProfile.cs`
- `src/Protobufs/BackOffice.BFF.Configuration.Protobuf/Protos/appversion.proto`
**پکیج NuGet**: `Foursat.BackOffice.BFF.Configuration.Protobuf` v1.0.20
---
#### 1.3 BackOffice UI (Blazor) ✅
**مسیر صفحه**: `/settings/app-versions`
**Service Layer**:
`IAppVersionService.cs`:
```csharp
public interface IAppVersionService
{
Task<List<AppVersionDto>> GetAllAsync(bool includeInactive = false);
Task<AppVersionDto?> GetByNameAsync(string appName);
Task UpdateAsync(UpdateAppVersionDto dto);
}
```
`AppVersionDto.cs`:
```csharp
public class AppVersionDto
{
public long Id { get; set; }
public string AppName { get; set; }
public string AppNameDisplay { get; } // ترجمه فارسی
public string CurrentVersion { get; set; }
public string MinRequiredVersion { get; set; }
public bool RequiresFullCacheClear { get; set; }
public string UpdateMessage { get; set; }
public string ReleaseNotes { get; set; }
public bool IsActive { get; set; }
public DateTime? Created { get; set; }
public DateTime? LastModified { get; set; }
}
```
**UI Components**:
| Component | Description |
|-----------|-------------|
| `AppVersions.razor` | صفحه اصلی با جدول و کارت‌ها |
| `AppVersionEditDialog.razor` | Dialog ویرایش نسخه |
**ویژگی‌های صفحه**:
- 📋 جدول MudDataGrid با اطلاعات همه نسخه‌ها
- 🔍 فیلتر نمایش نسخه‌های غیرفعال
- 🃏 کارت خلاصه برای هر اپلیکیشن فعال
- ✏️ ویرایش با Dialog شامل:
- نسخه فعلی
- حداقل نسخه مورد نیاز
- نیاز به پاکسازی کش
- پیام به‌روزرسانی
- یادداشت‌های انتشار
- دلیل تغییر (برای لاگ)
**فایل‌های جدید**:
- `Services/AppVersion/IAppVersionService.cs`
- `Services/AppVersion/AppVersionService.cs`
- `Pages/Settings/AppVersions.razor`
- `Pages/Settings/Components/AppVersionEditDialog.razor`
**تغییرات در فایل‌های موجود**:
- `Common/Configure/ConfigureService.cs` - ثبت service و gRPC client
- `BackOffice.csproj` - آپدیت پکیج به v1.0.20
---
### 2. 🔗 نمایش کد معرف در درخت شبکه FrontOffice ✅
**نیاز**: نمایش کد معرف افرادی که در باشگاه فعالند کنار هر نود
**تغییرات**:
#### 2.1 CMS - Stored Procedure
`SP_GetNetworkTree.sql` - فیلد `ReferralCode` اضافه شده:
```sql
SELECT
...
u.ReferralCode,
...
FROM NetworkTree_CTE t
JOIN AspNetUsers u ON t.UserId = u.Id
```
#### 2.2 FrontOffice DTOs
`NetworkMembershipDtos.cs`:
```csharp
public class NetworkNodeDto
{
// ... existing fields
public string? ReferralCode { get; set; } // جدید
}
public class FlatNetworkNodeDto
{
// ... existing fields
public string? ReferralCode { get; set; } // جدید
}
```
#### 2.3 JavaScript - org-chart.js
```javascript
// فقط برای کاربران فعال باشگاه نمایش بده
${d.isClubActive && d.referralCode ? `
<div class="node-referral">
<span class="referral-label">کد معرف:</span>
<span class="referral-code">${d.referralCode}</span>
<button class="copy-btn" onclick="copyReferralCode('${d.referralCode}', event)">
<i class="fas fa-copy"></i>
</button>
</div>
` : ''}
```
#### 2.4 CSS - org-chart.css
```css
.node-referral {
display: flex;
align-items: center;
gap: 4px;
margin-top: 4px;
padding: 3px 6px;
background: rgba(76, 175, 80, 0.1);
border-radius: 4px;
font-size: 11px;
}
.referral-code {
font-weight: bold;
color: #4CAF50;
font-family: monospace;
}
.copy-btn {
background: transparent;
border: none;
cursor: pointer;
padding: 2px;
color: #666;
}
.copy-toast {
position: fixed;
bottom: 20px;
left: 50%;
transform: translateX(-50%);
background: #333;
color: white;
padding: 8px 16px;
border-radius: 4px;
z-index: 10000;
}
```
**فایل‌های تغییر یافته**:
- `FrontOffice/Utilities/NetworkMembershipDtos.cs`
- `FrontOffice/Utilities/NetworkMembershipService.cs`
- `FrontOffice/wwwroot/js/org-chart.js`
- `FrontOffice/wwwroot/css/org-chart.css`
---
## 📦 Package Updates
| Package | From | To | Project |
|---------|------|-----|---------|
| `CMSMicroservice.Protobuf` | 0.0.156 | 0.0.159 | BackOffice.BFF.Domain |
| `Foursat.BackOffice.BFF.Configuration.Protobuf` | 1.0.7 | 1.0.20 | BackOffice |
---
## 🗄️ Git Commits
### BackOffice.BFF
```
commit 6bc45e4
feat(bff): Add App Version management endpoints
- Add appversion.proto with GetAll, Get, Update RPCs
- Add GetAllAppVersionsQuery and handler
- Add UpdateAppVersionCommand and handler
- Add AppVersionService gRPC service
- Add AppVersionProfile for Mapster mappings
- Update IApplicationContractContext with AppVersions client
- Bump Configuration.Protobuf to 1.0.20
```
### BackOffice
```
commit 6b140c3
feat(backoffice): Add App Version management UI
- Add IAppVersionService interface and implementation
- Add AppVersions.razor page for managing app versions
- Add AppVersionEditDialog component for editing versions
- Register AppVersion gRPC client and service in DI
- Update Foursat.BackOffice.BFF.Configuration.Protobuf to 1.0.20
```
### CMS
```
commit bca3b7f
feat: Add ReferralCode to NetworkTree and NetworkMembershipProfile
- Add ReferralCode to SP_GetNetworkTree stored procedure
- Map ReferralCode in NetworkMembershipProfile
- Update networkmembership.proto with referral_code field
```
---
## ✅ Build Status
```bash
# CMS
cd /home/masoud/Apps/project/FourSat/CMS/src
dotnet build CMSMicroservice.WebApi/CMSMicroservice.WebApi.csproj
# Result: Build succeeded. 0 Error(s)
# BackOffice.BFF
cd /home/masoud/Apps/project/FourSat/BackOffice.BFF/src
dotnet build BackOffice.BFF.WebApi/BackOffice.BFF.WebApi.csproj
# Result: Build succeeded. 200 Warning(s), 0 Error(s)
# BackOffice
cd /home/masoud/Apps/project/FourSat/BackOffice/src
dotnet build BackOffice/BackOffice.csproj
# Result: Build succeeded. 246 Warning(s), 0 Error(s)
```
---
## 📊 آمار Session
| متریک | مقدار |
|-------|-------|
| فایل‌های جدید | 12 |
| فایل‌های تغییر یافته | 10 |
| قابلیت‌های جدید | 2 |
| خطوط کد اضافه شده | ~1000 |
| پکیج‌های NuGet آپدیت شده | 2 |
| Commits | 3 |
---
## 📍 مسیرهای دسترسی
| Feature | URL | Project |
|---------|-----|---------|
| مدیریت نسخه اپ‌ها | `/settings/app-versions` | BackOffice |
| درخت شبکه با کد معرف | `/profile/tree` | FrontOffice |
---
## ⚠️ یادآوری‌ها
1. **Stored Procedure**: اسکریپت `SP_GetNetworkTree.sql` باید روی دیتابیس production اجرا شود
2. **منوی BackOffice**: صفحه `/settings/app-versions` در منوی سایدبار اضافه نشده - در صورت نیاز `NavMenu.razor` آپدیت شود
---
## 🔗 Related Changelogs
- [CHANGELOG-2025-12-25.md](CHANGELOG-2025-12-25.md) - درخت شبکه BackOffice با d3-org-chart
- [CHANGELOG-2025-12-23.md](CHANGELOG-2025-12-23.md) - پیاده‌سازی Worker چتیکا