Files
docs/migration/BACKOFFICE-BFF-MIGRATION.md
T

13 KiB

BackOffice BFF to CMS Migration Plan

هدف: حذف BackOffice.BFF و ارتباط مستقیم BackOffice (UI) با CMS

تاریخ شروع: 2025-02-07
تاریخ تکمیل Build Migration: 2025-02-08
وضعیت: Build Migration Complete (0 errors)


خلاصه اجرا

استراتژی انتخاب‌شده: Strategy C (استفاده مستقیم از Proto های CMS)

به جای حفظ DLL های BFF، مستقیماً CMSMicroservice.Protobuf را به عنوان ProjectReference اضافه کردیم و تمام using ها را تغییر دادیم.

نتایج:

  • تمام 208 reference از BackOffice.BFF.* به CMSMicroservice.Protobuf.Protos.* تغییر یافت
  • 24 DLL reference حذف و یک ProjectReference جایگزین شد
  • appsettings.json از BFF URL به CMS URL تغییر کرد
  • ~65 build error رفع شد
  • Build Succeeded با 0 خطا

مراحل مهاجرت

مرحله 1: مستندسازی سرویس‌های BackOffice UI

  • لیست تمام سرویس‌های استفاده شده در UI
  • شناسایی dependency ها
  • مستندسازی هر صفحه و کامپوننت

مرحله 2: مستندسازی سرویس‌های BackOffice.BFF

  • لیست تمام gRPC services در BFF
  • شناسایی endpoints و methods

مرحله 3: تحلیل و انتخاب استراتژی

  • تحلیل سه استراتژی ممکن (A, B, C)
  • انتخاب Strategy C: مستقیم از CMS protos

مرحله 4: مهاجرت کد

  • تغییر namespace ها (208 مورد)
  • رفع خطاهای Build (~65 خطا)
  • اصلاح proto های CMS (اضافه کردن فیلدهای مورد نیاز)
  • آپدیت مستندات

1. سرویس‌های استفاده شده در BackOffice UI

1.1 Services مستقیماً از CMS (gRPC Clients)

Service Usage Count Pages/Components
CategoryContract.CategoryContractClient 4 CategoryMultiSelectAutoComplete, CategoryMultiSelectCombo, CategoryAutoComplete
RoleContract.RoleContractClient 3 RoleAutoComplete, RoleTitleColumn, UserRoleDialog
ProductsContract.ProductsContractClient 1 ProductsAutoComplete
UserRoleContract.UserRoleContractClient 1 UserRoleDialog

1.2 Services از طریق BFF (Interface-based)

Service Interface Implementation Purpose
ITagService BFF → CMS مدیریت تگ‌ها
IDiscountCategoryService BFF → CMS دسته‌بندی‌های تخفیف
IPersianDateTimeService BFF Local تبدیل تاریخ شمسی

1.3 صفحات اصلی BackOffice

BackOffice/Pages/
├── Dashboard/           - داشبورد اصلی
├── User/                - مدیریت کاربران
├── UserRole/            - نقش‌های کاربری
├── Role/                - مدیریت نقش‌ها
├── Category/            - دسته‌بندی محصولات
├── Products/            - محصولات
├── Package/             - پکیج‌ها
├── Tag/                 - تگ‌ها
├── UserOrder/           - سفارشات
├── UserAddress/         - آدرس‌ها
├── Inventory/           - انبار
├── Payment/             - پرداخت‌ها
├── DiscountShop/        - فروشگاه تخفیف
├── Commission/          - کمیسیون
├── Network/             - شبکه
├── Club/                - باشگاه مشتریان
├── PublicMessages/      - پیام‌های عمومی
├── Settings/            - تنظیمات
└── SystemManagement/    - مدیریت سیستم

2. سرویس‌های BackOffice.BFF

2.1 لیست کامل gRPC Services در BFF

# Service Proto File Status CMS Equivalent
1 CategoryService category.proto Migrated CMSMicroservice.Protobuf.Protos.Category
2 ProductsService products.proto Migrated CMSMicroservice.Protobuf.Protos.Products
3 TagService tag.proto Migrated CMSMicroservice.Protobuf.Protos.Tag
4 ProductTagService producttag.proto Migrated CMSMicroservice.Protobuf.Protos.ProductTag
5 UserService user.proto Migrated CMSMicroservice.Protobuf.Protos.User
6 RoleService role.proto Migrated CMSMicroservice.Protobuf.Protos.Role
7 UserRoleService userrole.proto Migrated CMSMicroservice.Protobuf.Protos.UserRole
8 UserAddressService useraddress.proto Migrated CMSMicroservice.Protobuf.Protos.UserAddress
9 UserOrderService userorder.proto Migrated CMSMicroservice.Protobuf.Protos.UserOrder
10 InventoryService inventory.proto Migrated CMSMicroservice.Protobuf.Protos.Inventory
11 DiscountProductService discountproduct.proto Migrated CMSMicroservice.Protobuf.Protos.DiscountProduct
12 DiscountOrderService discountorder.proto Migrated CMSMicroservice.Protobuf.Protos.DiscountOrder
13 DiscountShoppingCartService discountshoppingcart.proto Migrated CMSMicroservice.Protobuf.Protos.DiscountCategory
14 CommissionService commission.proto Migrated CMSMicroservice.Protobuf.Protos.Commission
15 NetworkMembershipService networkmembership.proto Migrated CMSMicroservice.Protobuf.Protos.NetworkMembership
16 ClubMembershipService clubmembership.proto Migrated CMSMicroservice.Protobuf.Protos.ClubMembership
17 PublicMessageService publicmessage.proto Migrated CMSMicroservice.Protobuf.Protos (PublicMessage)
18 ConfigurationService configuration.proto Migrated CMSMicroservice.Protobuf.Protos.Configuration
19 OtpService otp.proto Migrated CMSMicroservice.Protobuf.Protos.OtpToken
20 HealthService health.proto Migrated CMSMicroservice.Protobuf.Protos.Health

Status Legend:

  • Migrated to CMS (Build compiles successfully)

3. منطق و Business Logic سرویس‌ها

3.1 CategoryService

Path: BackOffice.BFF/src/BackOffice.BFF.WebApi/Services/CategoryService.cs

Methods:

  • GetAllCategories() - دریافت تمام دسته‌بندی‌ها
  • GetCategory(id) - دریافت یک دسته‌بندی
  • CreateCategory() - ایجاد دسته‌بندی جدید
  • UpdateCategory() - ویرایش دسته‌بندی
  • DeleteCategory() - حذف دسته‌بندی

Business Logic:

[در انتظار تحلیل دقیق]

Dependencies:

  • CMS CategoryContract

3.2 TagService

Path: BackOffice.BFF/src/BackOffice.BFF.WebApi/Services/TagService.cs

Methods:

[در انتظار تحلیل]

Business Logic:

[در انتظار تحلیل]


4. پیشرفت مهاجرت

Services Migration Progress: 20/20 (100%)

Service Analysis Implementation Testing Docs Updated Completed
CategoryService
ProductsService
TagService
ProductTagService
UserService
RoleService
UserRoleService
UserAddressService
UserOrderService
InventoryService
DiscountProductService
DiscountOrderService
CommissionService
NetworkMembershipService
ClubMembershipService
PublicMessageService
ConfigurationService
OtpService
HealthService
AppVersionService

⚠️ توجه: ستون Testing هنوز انجام نشده - تست Runtime باید انجام شود.


5. تغییرات اعمال‌شده

5.1 تغییرات اصلی

  • csproj: حذف 24 رفرنس DLL و اضافه کردن یک ProjectReference به CMSMicroservice.Protobuf.csproj
  • appsettings.json: تغییر GwUrl از https://backoffice-bff.se.kbs1.ir به https://cms.se.kbs1.ir
  • ConfigureService.cs: تغییر تمام 24 using و اصلاح نام contract ها (OtpContractOtpTokenContract, InventoryBFFContractInventoryContract)
  • 208 فایل: تغییر namespace از BackOffice.BFF.* به CMSMicroservice.Protobuf.Protos.*

5.2 تغییرات Proto های CMS

فیلدهای زیر به proto های CMS اضافه شدند (چون BackOffice UI به آنها نیاز داشت):

Proto File Field Added Message
products.proto ImageFileModel image_file, ImageFileModel thumbnail_file CreateNewProductsRequest, UpdateProductsRequest
inventory.proto bool is_low_stock = 18 InventoryItemDto
discountproduct.proto ImageFileModel message + fields CreateDiscountProductRequest, UpdateDiscountProductRequest
package.proto BoostCardFileModel message + fields CreateNewPackageRequest, UpdatePackageRequest
manualpayment.proto FileUploadModel message + fields CreateManualPaymentRequest

5.3 تغییرات خاص فیلد/منطق

فایل تغییر
LoginPage.razor.cs SendOtpRequestCreateNewOtpTokenRequest + Purpose = "login"
VerifyCodePage.razor.cs VerifyOtpCodeRequestVerifyOtpTokenRequest + verify via UserClient
PublicMessageService.cs بازنویسی کامل: MessageIdId, MessageTypeType, StatusIsActive, TotalCountMetaData.TotalCount
UserPayouts.razor.cs تغییر از nested PaginationState/GetUserPayoutsFilter به فیلدهای flat
Configuration.razor تغییر از PageIndex/PageSize به nested PaginationState
HealthDashboard.razor GetSystemHealthRequestgoogle.protobuf.Empty + HealthStatus enum handling
NetworkTreeViewer.razor ActivationWeekDefinitionId از long? به string (StringValue)
PayoutDetailsDialog.razor Payout.LastModifiedPayout.Created (CMS فیلد LastModified ندارد)
UserOrderDetailsDialog.razor VAT فیلدها از flat به nested VatInfo.*
AppVersionService.cs حذف wrapper Item و تغییر فیلدهای response
ManualPayments.razor GetManualPaymentsRequestGetAllManualPaymentsRequest + enum casts
UserOrderMainPage.razor.cs PaymentStatus/DeliveryStatus/PaymentMethod enum casts + Clear*Item()

5.4 نکات فنی

  • BackOffice UI از gRPC Web استفاده می‌کند
  • Proto codegen rule: مقادیر enum با prefix، prefix آنها در C# حذف می‌شود (مثلاً DeliveryStatus_PendingDeliveryStatus.Pending)
  • الگوی oneof در CMS: oneof PaymentStatus_item { ... } → property accessor مستقیم PaymentStatus

5.5 چالش‌ها و حل‌شده‌ها

  • Authentication/Authorization: CMS از IdentityServer استفاده می‌کند
  • Proto incompatibility: فیلدهای جدید به CMS protos اضافه شدند
  • Nested vs Flat field pattern: هر سرویس به الگوی CMS proto خودش تبدیل شد
  • Enum handling: Cast های صریح اضافه شدند

5.6 مزایای حاصل‌شده

  • کاهش latency (حذف یک لایه میانی BFF)
  • ساده‌تر شدن معماری
  • کاهش هزینه deployment (یک سرویس کمتر)
  • بهبود performance

6. مراحل بعدی

Immediate Next Steps:

  1. ایجاد این مستند
  2. تحلیل دقیق هر service در BFF
  3. مهاجرت namespace ها (208 مورد)
  4. رفع خطاهای Build (~65 خطا)
  5. Build Succeeded با 0 خطا
  6. تست Runtime - deploy و تست عملکرد واقعی هر صفحه
  7. بررسی CMS backend - فیلدهای جدید اضافه‌شده به proto ها نیاز به handler در CMS دارند
  8. حذف BackOffice.BFF - بعد از تست موفق، سرویس BFF از deployment حذف شود

⚠️ نکات مهم برای Runtime:

  • فیلدهایی مثل is_low_stock در Inventory و image_file/thumbnail_file در Products فقط در proto اضافه شده‌اند
  • CMS backend باید handler آنها را برای populate کردن داده پیاده‌سازی کند
  • فیلدهای PublicMessage (IsDismissible, TargetAudience, Tags) در CMS وجود ندارند و به مقادیر default تنظیم شده‌اند

Last Updated: 2025-02-08
Document Version: 2.0
Status: Build Migration Complete - Runtime Testing Pending