3c729304db
Corrections verified against actual CMS/BackOffice/FrontOffice source code: - ClubActivationFee: 25,200,000 (not 25,000,000) - Tree depth: no limit (15 is commission calculation depth only) - IPG wallet charge: Balance=56M + Discount=56M - DayaLoan wallet charge: Balance=56M + Discount=112M (2×) - Discount: per-product MaxDiscountPercent (not fixed 30%) - VAT: 10% (ShopVAT) vs 9% (discount store PlaceOrder) - Kavenegar template: 'Afrino' only (not verify-foursat) - SMS sender: 1000001110100 - DayaLoan job: every 20min (not 15min) - Commission job: Sunday 00:05 (not Saturday) - Network tree: on User entity (not separate NetworkNode table) - UserWallets entity (not UserWalletBalances) - OTP: 6 digits, 5 attempts, 2min TTL, 60s cooldown - Removed non-existent constants (ClubJoiningPercentage, ClubActivationThreshold) - Fixed Hangfire Chatika interval: every 5min - Removed InventorySync from recurring jobs list
7.1 KiB
7.1 KiB
🔄 مهاجرت داده، BFF و Gateway
منابع ادغامشده:
BACKOFFICE-BFF-MIGRATION.md,customer-facing-capabilities-codex.md,DATA-TABLE-MAPPINGS.md,DATAMIGRATION-README.md,FRONTOFFICE-TO-CMS-MIGRATION.md,GATEWAY-REMOVAL-MIGRATION-PLAN.md,MIGRATION-PROGRESS.md
آخرین بروزرسانی: اسفند ۱۴۰۴
۱. تاریخچه مهاجرتها
Timeline:
▸ فاز ۱: FrontOffice REST → CMS gRPC (مستقیم)
▸ فاز ۲: BackOffice REST → CMS gRPC (مستقیم)
▸ فاز ۳: حذف BFF/Gateway
▸ فاز ۴: حذف API Gateway (Ocelot)
▸ فاز ۵: یکپارچهسازی Proto packages
▸ فاز ۶: Data migration از سیستم قدیم
۲. حذف BFF (Backend-for-Frontend)
۲.۱ قبل
FrontOffice ──HTTP/REST──→ BFF ──gRPC──→ CMS
BackOffice ──HTTP/REST──→ BFF ──gRPC──→ CMS
BFF مسئولیتها:
• تبدیل REST↔gRPC
• Aggregation
• Auth proxy
• Rate limiting
۲.۲ بعد (فعلی)
FrontOffice ──gRPC──→ CMS (مستقیم)
BackOffice ──gRPC──→ CMS (مستقیم)
مزایا:
✅ حذف ۱ سرویس از deployment
✅ کاهش ~50ms latency per request
✅ Type-safety از proto تا UI
✅ سادهسازی debug و logging
✅ کاهش maintenance cost
۲.۳ مراحل مهاجرت
مرحله ۱: ایجاد gRPC client wrappers در FrontOffice
ProductService.cs → _client.GetProductsAsync(request)
OrderService.cs → _client.GetOrdersAsync(request)
...
مرحله ۲: جایگزینی HttpClient با GrpcChannel
services.AddGrpcClient<ProductServiceClient>(o => {
o.Address = new Uri(config["Grpc:CmsUrl"]);
});
مرحله ۳: حذف BFF project
- حذف BFF از solution
- حذف BFF از docker-compose
- حذف BFF از K8s manifests
مرحله ۴: تست end-to-end
- تست هر صفحه FrontOffice
- تست هر صفحه BackOffice
- Performance benchmark
۳. حذف API Gateway (Ocelot)
۳.۱ قبل
Client → nginx → Ocelot Gateway → { CMS, BFF, FileService }
↑
URL routing, rate limiting, auth
۳.۲ بعد
Client → nginx → Ingress → { CMS, BackOffice, FrontOffice }
↑
Path-based routing in Ingress
۳.۳ دلایل حذف
✅ Ocelot maintenance burden → حذف
✅ K8s Ingress → routing بومی
✅ Let's Encrypt → TLS بومی
✅ gRPC → type-safe بدون نیاز به gateway
۴. FrontOffice to CMS Migration
۴.۱ Service Mapping
| FrontOffice Service | BFF Endpoint (حذفشده) | CMS gRPC Service |
|---|---|---|
ProductService |
GET /api/products |
ProductService.GetProducts |
OrderService |
POST /api/orders |
OrderService.CreateOrder |
UserService |
POST /api/auth/login |
UserService.Login |
ClubService |
GET /api/club/tree |
ClubService.GetNetworkTree |
BlogService |
GET /api/blog/posts |
BlogService.GetPosts |
PaymentService |
POST /api/payment/create |
PaymentService.CreatePayment |
FileService |
POST /api/files/upload |
FileService.Upload |
SitePageService |
GET /api/pages/{type} |
SitePageService.GetPage |
۴.۲ DTO Mapping
BFF DTOs (حذفشده) → Proto Messages (فعلی)
ProductDto → ProductMessage
OrderDto → OrderMessage
UserDto → UserMessage
Proto-generated classes مستقیم در UI استفاده میشوند
یا به local DTOs map میشوند (برای UI-specific fields)
۵. Data Migration (سیستم قدیم → جدید)
۵.۱ پروژه DataMigration
DataMigration/
├── FourSat.DataMigration/ ← Console app
│ ├── Program.cs
│ ├── Migrators/
│ │ ├── UserMigrator.cs
│ │ ├── ProductMigrator.cs
│ │ ├── OrderMigrator.cs
│ │ └── ClubMigrator.cs
│ └── Mappings/
│ └── TableMappings.cs
└── FourSat.GeographySeeder/ ← Seed geography data
├── Program.cs
└── Data/
├── provinces.json
└── cities.json
۵.۲ Data Table Mappings
| جدول مبدأ (قدیم) | جدول مقصد (CMS) | نکات |
|---|---|---|
dbo.Users |
CMS.Users |
PhoneNumber as primary identifier |
dbo.Products |
CMS.Products |
ImageUrl migration needed |
dbo.Orders |
CMS.Orders |
Status enum remapping |
dbo.Categories |
CMS.Categories |
Hierarchical → ParentId |
dbo.NetworkTree |
CMS.Users |
Binary tree via NetworkParentId + LegPosition روی User |
dbo.Wallets |
CMS.UserWallets |
۳ wallet types: Balance, NetworkBalance, DiscountBalance |
dbo.Transactions |
CMS.Transactions |
Type enum remapping |
dbo.Memberships |
CMS.UserClubMemberships |
+ Contract creation |
۵.۳ SQL Scripts مهاجرت
| اسکریپت | کاربرد |
|---|---|
MigrateUsersToClubMembership.sql |
انتقال همه کاربران |
MigrateSpecificUsersToClubMembership.sql |
انتقال انتخابی |
ChargeUserWallets.sql |
شارژ اولیه کیفپولها |
AddIsActiveToUserClubFeatures.sql |
افزودن فیلد IsActive |
SeedSitePages.sql |
داده اولیه صفحات سایت |
SystemConfigurations.sql |
مقادیر پیشفرض تنظیمات |
populate-weekly-commission-pools.sql |
داده تاریخی Pool |
update_products_price_10_percent.sql |
افزایش قیمت ۱۰% |
۶. Geography Seeder
FourSat.GeographySeeder:
• ۳۱ استان
• ~۱۲۰۰ شهر
• منبع: دیتای رسمی تقسیمات کشوری
• فرمت: JSON → EF Core Seed
استفاده:
dotnet run --project FourSat.GeographySeeder
۷. Customer-Facing Capabilities Codex
۷.۱ خلاصه (بزرگترین سند — ۵,۳۰۰ خط)
این سند شامل مستندسازی کامل تمام قابلیتهای کاربرمحور سیستم است:
| بخش | محتوا |
|---|---|
| User Journey | فلوی کامل از ثبتنام تا خرید |
| Store Features | لیست محصول، فیلتر، سبد، پرداخت |
| Club Features | عضویت، درخت، کمیسیون، قرارداد |
| Content | بلاگ، صفحات، SEO |
| Admin Features | مدیریت محصول، سفارش، کاربر |
| Integration | Chatika، ZarinPal، Kavenegar، Daya |
| Mobile | Responsive، PWA (planned) |
۸. وضعیت مهاجرت
| مهاجرت | وضعیت | درصد |
|---|---|---|
| FrontOffice BFF → gRPC | ✅ | 100% |
| BackOffice BFF → gRPC | ✅ | 100% |
| API Gateway حذف | ✅ | 100% |
| Data Migration (Users) | ✅ | 100% |
| Data Migration (Products) | ✅ | 100% |
| Data Migration (Orders) | ✅ | 100% |
| Data Migration (Club/Network) | ✅ | 100% |
| Geography Seeder | ✅ | 100% |
| Proto package unification | ✅ | 100% |