feat: implement Proto DLL migration and update domain references

This commit is contained in:
masoodafar-web
2026-01-04 23:05:46 +03:30
parent 910a1ebfcc
commit b7543fc10c
@@ -0,0 +1,289 @@
# Session 2026-01-03: Proto DLL Migration & Domain Changes
> **تاریخ**: January 3, 2026
> **موضوع**: مایگریشن به DLL-based Proto References + تغییر دامنه‌ها
---
## 📋 خلاصه تغییرات
### 1. ✅ مایگریشن Proto References به DLL-based Approach
**مشکل**: در CI/CD نمی‌توانستیم از `ProjectReference` به پروژه‌های proto در `BackOffice.BFF` استفاده کنیم چون ریپوها جدا هستند.
**راه‌حل**: ایجاد سیستم hybrid با DLL های pre-built:
#### فایل‌های ایجاد شده:
1. **`BackOffice/build-deps.sh`**:
```bash
#!/bin/bash
# Build all BFF proto dependencies and copy DLLs to libs folder
# Builds all 24 proto projects from BackOffice.BFF/src/Protobufs/
# Copies DLLs to BackOffice/libs/ folder
# Supports both net8.0 and net9.0 target frameworks
```
2. **`BackOffice/libs/`**: فولدر شامل 24 فایل DLL:
- `BackOffice.BFF.Category.Protobuf.dll`
- `BackOffice.BFF.ClubMembership.Protobuf.dll`
- `BackOffice.BFF.Commission.Protobuf.dll`
- `BackOffice.BFF.Common.Protobuf.dll`
- `BackOffice.BFF.Configuration.Protobuf.dll`
- `BackOffice.BFF.DiscountCategory.Protobuf.dll`
- `BackOffice.BFF.DiscountOrder.Protobuf.dll`
- `BackOffice.BFF.DiscountProduct.Protobuf.dll`
- `BackOffice.BFF.DiscountShoppingCart.Protobuf.dll`
- `BackOffice.BFF.Health.Protobuf.dll`
- `BackOffice.BFF.Inventory.Protobuf.dll`
- `BackOffice.BFF.ManualPayment.Protobuf.dll`
- `BackOffice.BFF.NetworkMembership.Protobuf.dll`
- `BackOffice.BFF.Otp.Protobuf.dll`
- `BackOffice.BFF.Package.Protobuf.dll`
- `BackOffice.BFF.Products.Protobuf.dll`
- `BackOffice.BFF.ProductTag.Protobuf.dll`
- `BackOffice.BFF.PublicMessage.Protobuf.dll` ⚠️ (net8.0)
- `BackOffice.BFF.Role.Protobuf.dll`
- `BackOffice.BFF.Tag.Protobuf.dll`
- `BackOffice.BFF.User.Protobuf.dll`
- `BackOffice.BFF.UserAddress.Protobuf.dll`
- `BackOffice.BFF.UserOrder.Protobuf.dll`
- `BackOffice.BFF.UserRole.Protobuf.dll`
#### تغییرات در `BackOffice/src/BackOffice/BackOffice.csproj`:
**PackageReferences اضافه شده** (برای transitive dependencies):
```xml
<!-- Proto dependencies (needed when using DLL references) -->
<PackageReference Include="Google.Protobuf" Version="3.28.3"/>
<PackageReference Include="Grpc.Core.Api" Version="2.71.0"/>
<PackageReference Include="Google.Api.CommonProtos" Version="2.10.0"/>
<PackageReference Include="FluentValidation" Version="11.2.2"/>
<PackageReference Include="FluentValidation.DependencyInjectionExtensions" Version="11.2.2"/>
```
**Conditional ItemGroups**:
```xml
<!-- CI/CD Mode: Use pre-built DLLs from libs/ folder -->
<ItemGroup Condition="Exists('../../libs/BackOffice.BFF.Common.Protobuf.dll')">
<Reference Include="BackOffice.BFF.Common.Protobuf">
<HintPath>../../libs/BackOffice.BFF.Common.Protobuf.dll</HintPath>
</Reference>
<!-- ... all 24 proto DLLs ... -->
</ItemGroup>
<!-- Development Mode: Fallback to ProjectReference if libs/ doesn't exist -->
<ItemGroup Condition="!Exists('../../libs/BackOffice.BFF.Common.Protobuf.dll')">
<ProjectReference Include="..\..\..\BackOffice.BFF\src\Protobufs\BackOffice.BFF.Common.Protobuf\BackOffice.BFF.Common.Protobuf.csproj"/>
<!-- ... all 24 proto projects ... -->
</ItemGroup>
```
#### تغییرات در `BackOffice/Dockerfile`:
```dockerfile
# Copy pre-built proto DLLs
COPY ["libs/", "libs/"]
```
#### مشکلات حل شده:
1. **Google.Protobuf Version Conflict**:
- مشکل: `PublicMessage.Protobuf` از ورژن `3.28.3` استفاده می‌کرد ولی بقیه از `3.23.3`
- راه‌حل: آپگرید به `3.28.3` در `BackOffice.csproj`
2. **Grpc.Core.Api Version Conflict**:
- مشکل: Downgrade از `2.71.0` به `2.54.0`
- راه‌حل: تنظیم explicit version `2.71.0` در `BackOffice.csproj`
3. **PublicMessage.Protobuf Missing**:
- مشکل: این پروژه `net8.0` است نه `net9.0`
- راه‌حل: اسکریپت `build-deps.sh` حالا هر دو framework را چک می‌کند
### نتیجه:
✅ **Build: SUCCESS** (0 Errors, 246 Warnings - فقط MudBlazor)
✅ **Publish: SUCCESS** - همه 24 proto assembly به WASM کامپایل شدند
✅ **CI/CD Ready**: می‌توان با `./build-deps.sh` قبل از build، DLL ها را آماده کرد
---
## 2. ✅ تغییر دامنه‌ها (Domain Migration)
### تغییر از `*.foursat.afrino.co` به `*.se.kbs1.ir`
**دستور اجرا شده**:
```bash
cd /home/masoud/Apps/project/FourSat
find . -type f \( -name "*.json" -o -name "*.yml" -o -name "*.yaml" \) \
-exec sed -i 's/foursat\.afrino\.co/se.kbs1.ir/g' {} \;
```
#### فایل‌های تغییر یافته:
**Workflow Files** (`.gitea/workflows/*.yml`):
- `BackOffice/.gitea/workflows/prod-deploy.yml`
- `BackOffice/.gitea/workflows/kub-deploy.yml`
- `BackOffice.BFF/.gitea/workflows/prod-deploy.yml`
- `BackOffice.BFF/.gitea/workflows/kub-deploy.yml`
- `FrontOffice/.gitea/workflows/prod-deploy.yml`
- `FrontOffice/.gitea/workflows/kub-deploy.yml`
- `FrontOffice.BFF/.gitea/workflows/prod-deploy.yml`
- `FrontOffice.BFF/.gitea/workflows/kub-deploy.yml`
- `CMS/.gitea/workflows/prod-deploy.yml`
- `CMS/.gitea/workflows/kub-deploy.yml`
**تغییرات در Workflows**:
```yaml
# قبل:
EXTERNAL_REGISTRY: git.foursat.afrino.co
"insecure-registries": ["git.foursat.afrino.co", "gitea-svc:3000"]
# بعد:
EXTERNAL_REGISTRY: git.se.kbs1.ir
"insecure-registries": ["git.se.kbs1.ir", "gitea-svc:3000"]
```
**Configuration Files** (appsettings):
- `BackOffice/src/BackOffice/wwwroot/appsettings.json`
- `BackOffice/src/BackOffice/wwwroot/appsettings.Staging.json`
- `FrontOffice/src/FrontOffice.Main/appsettings.json`
- `FrontOffice/src/FrontOffice.Main/appsettings.Staging.json`
- `FrontOffice.BFF/src/FrontOffice.BFF.WebApi/appsettings.json`
**تغییرات در appsettings**:
```json
// BackOffice
"GwUrl": "https://backoffice-bff.se.kbs1.ir"
// FrontOffice
"GwUrl": "https://frontoffice-bff.se.kbs1.ir"
// FrontOffice.BFF
"CMSMSAddress": "https://cms.se.kbs1.ir"
```
### نتیجه:
✅ **21 فایل** با موفقیت تغییر کرد
✅ **0 آدرس قدیمی** باقی مانده
---
## 3. ✅ تغییر Git Remote URLs
**دستورات اجرا شده**:
```bash
# FrontOffice
cd FrontOffice
git remote set-url kub-stage https://git.se.kbs1.ir/admin/FrontOffice.git
# BackOffice
cd BackOffice
git remote set-url kub-stage https://git.se.kbs1.ir/admin/BackOffice.git
# BackOffice.BFF
cd BackOffice.BFF
git remote set-url kub-stage https://git.se.kbs1.ir/admin/BackOffice.BFF.git
# FrontOffice.BFF
cd FrontOffice.BFF
git remote set-url kub-stage https://git.se.kbs1.ir/admin/FrontOffice.BFF.git
# CMS
cd CMS
git remote set-url gitea https://git.se.kbs1.ir/admin/CMS.git
# totalDoc
cd totalDoc
git remote set-url foursatDocs https://git.se.kbs1.ir/FourSat/docs.git
```
### نتیجه:
✅ **6 ریپو** بروز شد
✅ همه remote ها به `git.se.kbs1.ir` تغییر کرد
---
## 📊 آمار کلی
| مورد | تعداد |
|------|-------|
| Proto DLL های ایجاد شده | 24 |
| فایل‌های JSON/YAML تغییر یافته | 21 |
| Git Repositories بروز شده | 6 |
| Build Errors | 0 ✅ |
| Build Warnings | 246 (MudBlazor) |
---
## 🚀 دستورات CI/CD
### قبل از Build/Deploy:
```bash
# 1. Build proto dependencies
cd /home/masoud/Apps/project/FourSat/BackOffice
./build-deps.sh
# 2. Build project
cd src
dotnet build BackOffice.sln -c Release
# 3. Publish
dotnet publish BackOffice/BackOffice.csproj -c Release -o ./publish
```
### بررسی Output:
```bash
# تعداد proto assemblies در output
ls ./publish/wwwroot/_framework/*.wasm | grep "BackOffice.BFF" | wc -l
# Result: 24 ✅
```
---
## 🔧 Troubleshooting
### اگر Build شکست:
1. **بررسی libs/ folder**:
```bash
ls BackOffice/libs/*.dll | wc -l
# باید 24 باشد
```
2. **Rebuild proto dependencies**:
```bash
cd BackOffice
rm -rf libs/
./build-deps.sh
```
3. **بررسی Package Versions**:
- `Google.Protobuf`: باید `3.28.3` باشد
- `Grpc.Core.Api`: باید `2.71.0` باشد
### اگر Git Push شکست:
```bash
# تست اتصال به remote جدید
git ls-remote https://git.se.kbs1.ir/admin/BackOffice.git
```
---
## 📝 نکات مهم
1. **PublicMessage.Protobuf** تنها پروژه‌ای است که `net8.0` دارد
2. اسکریپت `build-deps.sh` خودکار هر دو framework را چک می‌کند
3. در Development Mode می‌توان از ProjectReference استفاده کرد (اگر libs/ وجود نداشته باشد)
4. همه آدرس‌های `*.foursat.afrino.co` به `*.se.kbs1.ir` تغییر کرد
5. همه Git remote ها بروز شدند
---
## ✅ Status: COMPLETED
**تاریخ تکمیل**: January 3, 2026
**Build Status**: ✅ SUCCESS
**Publish Status**: ✅ SUCCESS
**Domain Migration**: ✅ COMPLETED
**Git Remotes**: ✅ UPDATED