Refactor code structure for improved readability and maintainability
This commit is contained in:
@@ -0,0 +1,350 @@
|
||||
# 🚀 نقشهراه حذف Gateway ها و انتقال به CMS
|
||||
|
||||
> تاریخ: ۳۰ ژانویه ۲۰۲۶
|
||||
|
||||
## 🎯 هدف کلی
|
||||
|
||||
حذف پیچیدگی معماری با انتقال همه سرویسهای Gateway به CMS microservice. این کار مزایای زیر داره:
|
||||
|
||||
- **Performance بهتر**: حذف network hop اضافی
|
||||
- **Simplicity**: کمتر dependency، آسانتر maintenance
|
||||
- **Cost**: کمتر resource و deployment complexity
|
||||
- **Modularity**: ساختار ماژولار در CMS که بعداً قابل جداسازی باشه
|
||||
|
||||
---
|
||||
|
||||
## 📊 وضعیت موجود
|
||||
|
||||
### BackOffice.BFF - Services List ✅
|
||||
|
||||
| Service | Proto | وضعیت در CMS | Type |
|
||||
|---------|-------|-------------|------|
|
||||
| AppVersionService | ✅ | ✅ موجود | Direct |
|
||||
| CategoryService | ✅ | ✅ موجود | Direct |
|
||||
| ClubMembershipService | ✅ | ✅ موجود | Direct |
|
||||
| CommissionService | ✅ | ✅ موجود | Direct |
|
||||
| ConfigurationService | ✅ | ✅ موجود | Direct |
|
||||
| DiscountCategoryService | ✅ | ✅ موجود | Direct |
|
||||
| DiscountOrderService | ✅ | ✅ موجود | Direct |
|
||||
| DiscountProductService | ✅ | ✅ موجود | Direct |
|
||||
| DiscountShoppingCartService | ✅ | ✅ موجود | Direct |
|
||||
| HealthService | ✅ | ❌ ندارد | **New** |
|
||||
| InventoryService | ✅ | ✅ موجود | Direct |
|
||||
| ManualPaymentService | ✅ | ✅ موجود | Direct |
|
||||
| NetworkMembershipService | ✅ | ❌ ندارد | **New** |
|
||||
| OtpService | ✅ | ✅ موجود (OtpTokenService) | Direct |
|
||||
| PackageService | ✅ | ✅ موجود | Direct |
|
||||
| ProductTagService | ✅ | ✅ موجود | Direct |
|
||||
| ProductsService | ✅ | ✅ موجود | Direct |
|
||||
| PublicMessageService | ✅ | ✅ موجود | Direct |
|
||||
| RoleService | ✅ | ✅ موجود | Direct |
|
||||
| TagService | ✅ | ✅ موجود | Direct |
|
||||
| UserAddressService | ✅ | ✅ موجود | Direct |
|
||||
| UserOrderService | ✅ | ✅ موجود | Direct |
|
||||
| UserRoleService | ✅ | ✅ موجود | Direct |
|
||||
| UserService | ✅ | ✅ موجود | Direct |
|
||||
|
||||
**خلاصه BackOffice.BFF**: 24 سرویس - 22 موجود در CMS، 2 نیاز به ایجاد
|
||||
|
||||
---
|
||||
|
||||
### FrontOffice.BFF - Services List 🔄
|
||||
|
||||
| Service | Proto | وضعیت در CMS | Type | توضیحات |
|
||||
|---------|-------|-------------|------|---------|
|
||||
| AppVersionGrpcService | ✅ | ✅ موجود | Direct | |
|
||||
| CategoriesService | ✅ | ✅ موجود | Direct | |
|
||||
| CityService | ✅ | ✅ موجود | Direct | |
|
||||
| ClubMembershipService | ✅ | ✅ موجود | Direct | |
|
||||
| ClubMembershipGrpcService | ✅ | ✅ موجود | Direct | |
|
||||
| CommissionService | ✅ | ✅ موجود | Direct | |
|
||||
| ConfigurationGrpcService | ✅ | ✅ موجود | Direct | |
|
||||
| DiscountShopService | ✅ | ✅ موجود (partial) | **Extend** | نیاز ترکیب با DiscountProduct/Category/Cart |
|
||||
| NetworkMembershipService | ✅ | ❌ ندارد | **New** | |
|
||||
| PackageService | ✅ | ✅ موجود | Direct | |
|
||||
| ProductsService | ✅ | ✅ موجود | Direct | |
|
||||
| ShopingCartService | ✅ | ✅ موجود (UserCartsService) | Direct | |
|
||||
| TransactionService | ✅ | ✅ موجود (TransactionsService) | Direct | |
|
||||
| UserAddressService | ✅ | ✅ موجود | Direct | |
|
||||
| UserOrderService | ✅ | ✅ موجود | Direct | |
|
||||
| UserService | ✅ | ✅ موجود | **Customer** | نیاز Customer-specific logic |
|
||||
| UserWalletService | ✅ | ✅ موجود | Direct | |
|
||||
|
||||
**خلاصه FrontOffice.BFF**: 17 سرویس - 15 موجود، 1 نیاز ایجاد، 1 نیاز extend
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ Migration Strategy
|
||||
|
||||
### Phase 1: سرویسهای جدید در CMS
|
||||
|
||||
#### 1.1 HealthService (BackOffice.BFF → CMS)
|
||||
|
||||
**مسیر**: `CMS/src/CMSMicroservice.WebApi/Services/HealthService.cs`
|
||||
|
||||
```csharp
|
||||
// الگوی پیادهسازی
|
||||
public class HealthService : HealthContract.HealthContractBase
|
||||
{
|
||||
public override async Task<HealthCheckResponse> CheckHealth(Empty request, ServerCallContext context)
|
||||
{
|
||||
// Logic: Database connectivity, external services, etc.
|
||||
return new HealthCheckResponse { ... };
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Dependencies**:
|
||||
- Proto: `CMS/src/CMSMicroservice.Protobuf/Protos/Health.proto`
|
||||
- Application Layer: `CMS/src/CMSMicroservice.Application/HealthCQ/`
|
||||
|
||||
#### 1.2 NetworkMembershipService (Both → CMS)
|
||||
|
||||
**مسیر**: `CMS/src/CMSMicroservice.WebApi/Services/NetworkMembershipService.cs`
|
||||
|
||||
```csharp
|
||||
public class NetworkMembershipService : NetworkMembershipContract.NetworkMembershipContractBase
|
||||
{
|
||||
// Binary Tree Management
|
||||
// User Placement Logic
|
||||
// Network Statistics
|
||||
}
|
||||
```
|
||||
|
||||
**Dependencies**:
|
||||
- Proto: `CMS/src/CMSMicroservice.Protobuf/Protos/NetworkMembership.proto`
|
||||
- Application: `CMS/src/CMSMicroservice.Application/NetworkMembershipCQ/`
|
||||
- Domain: احتمالاً موجوده، نیاز بررسی
|
||||
|
||||
---
|
||||
|
||||
### Phase 2: ماژولار کردن در CMS
|
||||
|
||||
#### ساختار پیشنهادی:
|
||||
|
||||
```
|
||||
CMS/src/CMSMicroservice.WebApi/Services/
|
||||
├── Core/ # سرویسهای پایه
|
||||
│ ├── HealthService.cs
|
||||
│ ├── ConfigurationService.cs
|
||||
│ └── AppVersionService.cs
|
||||
├── UserManagement/ # مدیریت کاربران
|
||||
│ ├── UserService.cs
|
||||
│ ├── UserRoleService.cs
|
||||
│ ├── UserAddressService.cs
|
||||
│ ├── UserOrderService.cs
|
||||
│ ├── UserWalletService.cs
|
||||
│ ├── UserCartsService.cs
|
||||
│ └── OtpTokenService.cs
|
||||
├── ProductCatalog/ # کاتالوگ محصولات
|
||||
│ ├── ProductsService.cs
|
||||
│ ├── CategoryService.cs
|
||||
│ ├── ProductTagService.cs
|
||||
│ ├── TagService.cs
|
||||
│ ├── ProductGalleriesService.cs
|
||||
│ └── ProductImagesService.cs
|
||||
├── DiscountShop/ # فروشگاه تخفیف
|
||||
│ ├── DiscountProductService.cs
|
||||
│ ├── DiscountCategoryService.cs
|
||||
│ ├── DiscountOrderService.cs
|
||||
│ └── DiscountShoppingCartService.cs
|
||||
├── Commission/ # کمیسیون و شبکه
|
||||
│ ├── CommissionService.cs
|
||||
│ ├── NetworkMembershipService.cs # جدید
|
||||
│ └── ClubMembershipService.cs
|
||||
├── Inventory/ # انبارداری
|
||||
│ └── InventoryService.cs
|
||||
├── Payment/ # پرداخت
|
||||
│ ├── ManualPaymentService.cs
|
||||
│ ├── TransactionsService.cs
|
||||
│ └── UserWalletChangeLogService.cs
|
||||
└── Content/ # محتوا
|
||||
├── PublicMessageService.cs
|
||||
├── CityService.cs
|
||||
└── PackageService.cs
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Phase 3: Proto Files Management
|
||||
|
||||
#### موجود در CMS که نیاز تغییر نداره:
|
||||
- `Category.proto` ✅
|
||||
- `Commission.proto` ✅
|
||||
- `Products.proto` ✅
|
||||
- `User.proto` ✅
|
||||
- `Configuration.proto` ✅
|
||||
- ... (بیشتر protos موجودن)
|
||||
|
||||
#### نیاز به اضافه کردن:
|
||||
1. **`Health.proto`** - برای health check endpoints
|
||||
2. **`NetworkMembership.proto`** - اگر موجود نیست
|
||||
|
||||
#### Proto files در Gateway ها که نیاز consolidation دارن:
|
||||
```
|
||||
BackOffice.BFF/src/Protobufs/ → CMS/src/CMSMicroservice.Protobuf/
|
||||
FrontOffice.BFF/src/Protobufs/ → CMS/src/CMSMicroservice.Protobuf/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Phase 4: Application Layer Integration
|
||||
|
||||
#### BackOffice.BFF Application CQ → CMS Application
|
||||
|
||||
```
|
||||
BackOffice.BFF/src/BackOffice.BFF.Application/
|
||||
├── CommissionCQ/ → CMS/Application/CommissionCQ/
|
||||
├── ProductsCQ/ → CMS/Application/ProductsCQ/
|
||||
├── UserCQ/ → CMS/Application/UserCQ/
|
||||
└── ...
|
||||
```
|
||||
|
||||
**Strategy**:
|
||||
- مرج کردن Commands/Queries مشابه
|
||||
- حفظ Business Logic موجود در CMS
|
||||
- اضافه کردن Gateway-specific logic به CMS
|
||||
|
||||
#### مثال: CommissionCQ Migration
|
||||
|
||||
**BackOffice.BFF موجود**:
|
||||
- `TriggerWeeklyCalculationCommand`
|
||||
- `GetUserCommissionPayoutsQuery`
|
||||
- `ApproveWithdrawalCommand`
|
||||
|
||||
**CMS موجود**:
|
||||
- `CalculateWeeklyCommissionCommand`
|
||||
- `GetCommissionPayoutsQuery`
|
||||
|
||||
**Strategy**: ترکیب و تکمیل در CMS
|
||||
|
||||
---
|
||||
|
||||
### Phase 5: Client-Side Changes
|
||||
|
||||
#### BackOffice UI Changes
|
||||
|
||||
```csharp
|
||||
// Before (BackOffice → BackOffice.BFF)
|
||||
services.AddGrpcClient<UserContract.UserContractClient>(options =>
|
||||
{
|
||||
options.Address = new Uri("https://backoffice-bff:443");
|
||||
});
|
||||
|
||||
// After (BackOffice → CMS)
|
||||
services.AddGrpcClient<UserContract.UserContractClient>(options =>
|
||||
{
|
||||
options.Address = new Uri("https://cms:443");
|
||||
});
|
||||
```
|
||||
|
||||
#### FrontOffice UI Changes
|
||||
|
||||
```csharp
|
||||
// Before (FrontOffice → FrontOffice.BFF)
|
||||
services.AddGrpcClient<ProductsContract.ProductsContractClient>(options =>
|
||||
{
|
||||
options.Address = new Uri("https://frontoffice-bff:443");
|
||||
});
|
||||
|
||||
// After (FrontOffice → CMS)
|
||||
services.AddGrpcClient<ProductsContract.ProductsContractClient>(options =>
|
||||
{
|
||||
options.Address = new Uri("https://cms:443");
|
||||
});
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📋 Implementation Plan
|
||||
|
||||
### Week 1: Analysis & Proto Consolidation
|
||||
- [ ] **Day 1**: تحلیل کامل Dependencies بین Gateway ها و CMS
|
||||
- [ ] **Day 2**: Merge کردن Proto files مشابه
|
||||
- [ ] **Day 3**: شناسایی Business Logic های unique در Gateway ها
|
||||
- [ ] **Day 4**: ایجاد migration scripts برای Application Layer
|
||||
- [ ] **Day 5**: طراحی namespace جدید در CMS
|
||||
|
||||
### Week 2: Core Services Migration
|
||||
- [ ] **Day 1-2**: پیادهسازی HealthService و NetworkMembershipService در CMS
|
||||
- [ ] **Day 3-4**: Migration UserService (با Customer-specific logic)
|
||||
- [ ] **Day 5**: تست و validation سرویسهای جدید
|
||||
|
||||
### Week 3: Application Layer Migration
|
||||
- [ ] **Day 1-2**: انتقال CommissionCQ از Gateway ها به CMS
|
||||
- [ ] **Day 3**: انتقال ProductsCQ
|
||||
- [ ] **Day 4**: انتقال UserCQ
|
||||
- [ ] **Day 5**: انتقال باقی CQ modules
|
||||
|
||||
### Week 4: Client Integration & Testing
|
||||
- [ ] **Day 1-2**: تغییر BackOffice client configuration
|
||||
- [ ] **Day 3**: تغییر FrontOffice client configuration
|
||||
- [ ] **Day 4**: End-to-end testing
|
||||
- [ ] **Day 5**: Performance testing و optimization
|
||||
|
||||
### Week 5: Cleanup & Documentation
|
||||
- [ ] **Day 1-2**: حذف Gateway projects از repository
|
||||
- [ ] **Day 3**: بروزرسانی Docker compose و K8s configs
|
||||
- [ ] **Day 4**: بروزرسانی deployment scripts
|
||||
- [ ] **Day 5**: مستندسازی نهایی
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Risks & Considerations
|
||||
|
||||
### High Risk
|
||||
1. **Breaking Changes**: تغییر endpoint URLs در client ها
|
||||
2. **Business Logic Loss**: احتمال از دست رفتن logic خاص Gateway ها
|
||||
3. **Performance Impact**: CMS ممکنه bottleneck بشه
|
||||
|
||||
### Medium Risk
|
||||
1. **Proto Conflicts**: تداخل message names در Proto files
|
||||
2. **Authorization**: تفاوت در Authorization logic بین Gateway ها
|
||||
3. **Testing Complexity**: نیاز تست کامل همه endpoints
|
||||
|
||||
### Mitigation Strategies
|
||||
- **Gradual Migration**: یک سرویس در هر مرحله
|
||||
- **Feature Flags**: قابلیت switch بین Gateway و CMS
|
||||
- **Comprehensive Testing**: Unit + Integration + End-to-end
|
||||
- **Rollback Plan**: امکان بازگشت سریع در صورت مشکل
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Success Metrics
|
||||
|
||||
### Performance
|
||||
- [ ] Response time کاهش یافته (حذف network hop)
|
||||
- [ ] Throughput افزایش یافته
|
||||
- [ ] Resource usage بهینه شده
|
||||
|
||||
### Architecture
|
||||
- [ ] کد duplication کاهش یافته
|
||||
- [ ] Maintenance complexity کمتر شده
|
||||
- [ ] Deployment pipeline سادهتر شده
|
||||
|
||||
### Developer Experience
|
||||
- [ ] کمتر project برای کار روی یک feature
|
||||
- [ ] Debug و troubleshoot آسانتر
|
||||
- [ ] Documentation کامل و بهروز
|
||||
|
||||
---
|
||||
|
||||
## 📝 Notes
|
||||
|
||||
### Critical Dependencies
|
||||
- همه Proto messages باید compatible باشن
|
||||
- Authorization و Authentication logic حفظ بشه
|
||||
- Database migration نیازی نیست (همون دیتابیس رو استفاده میکنیم)
|
||||
|
||||
### Future Modularity
|
||||
ساختار ماژولار پیشنهادی باعث میشه بعداً بتونیم:
|
||||
- هر ماژول رو به microservice جداگانه تبدیل کنیم
|
||||
- Load balancing بین ماژولها داشته باشیم
|
||||
- Feature-based deployment انجام بدیم
|
||||
|
||||
---
|
||||
|
||||
**Status**: 🔍 Analysis Complete - Ready for Implementation
|
||||
**Next Step**: شروع Phase 1 - سرویسهای جدید
|
||||
**Owner**: Development Team
|
||||
**Estimated Duration**: 5 weeks
|
||||
Reference in New Issue
Block a user