Files
CMS/MIGRATION-PROGRESS.md
T
masoodafar-web 658d076bdf Complete FrontOffice BFF to CMS Migration
- Migrated all 9 services from FrontOffice.BFF to CMS architecture
- Enhanced user.proto with 7 additional Customer API endpoints:
  * UpdateCustomerProfile, GetCustomerProfile
  * ChangeCustomerPassword with validation
  * GetCustomerReferrals with commission stats
  * UploadCustomerAvatar with file validation
  * GetCustomerSettings, UpdateCustomerSettings
- All services now support Customer endpoints with /Customer/ prefix
- Mock implementations with realistic Persian data
- Fixed namespace conflicts and compilation issues
- Comprehensive testing completed for all endpoints
- Services migrated: Categories, City, UserCarts, Products, UserWallet,
  Transaction, UserOrder, Package, User (enhanced)
2026-01-30 08:53:09 +03:30

6.0 KiB

FrontOffice.BFF to CMS Migration Progress

Migration Overview

مهاجرت سرویس‌های FrontOffice.BFF به CMS Microservice با معماری Clean Architecture و gRPC.

Completed Services

1. Categories Service

  • Status: Complete
  • Proto Definition: categories.proto
  • Service Implementation: CategoryService.cs
  • Methods Migrated:
    • Admin Methods:
      • AddNewCategory - افزودن دسته‌بندی جدید
      • UpdateCategory - بروزرسانی دسته‌بندی
      • DeleteCategory - حذف دسته‌بندی
      • GetCategory - دریافت یک دسته‌بندی
      • GetAllCategoriesByFilter - دریافت لیست دسته‌بندی‌ها
    • Customer Methods:
      • GetActiveCategoriesForCustomer - دریافت دسته‌بندی‌های فعال برای مشتری

2. City Service

  • Status: Complete
  • Proto Definition: city.proto
  • Service Implementation: CityService.cs
  • Methods Migrated:
    • Admin Methods:
      • AddNewCity - افزودن شهر جدید
      • UpdateCity - بروزرسانی شهر
      • DeleteCity - حذف شهر
      • GetCity - دریافت یک شهر
      • GetAllCitiesByFilter - دریافت لیست شهرها
    • Customer Methods:
      • GetActiveCitiesForCustomer - دریافت شهرهای فعال برای مشتری

3. UserCarts Service

  • Status: Complete
  • Proto Definition: usercarts.proto
  • Service Implementation: UserCartsService.cs
  • Methods Migrated:
    • Admin Methods:
      • AddNewUserCart - افزودن سبد خرید جدید
      • UpdateUserCart - بروزرسانی سبد خرید
      • DeleteUserCart - حذف سبد خرید
      • GetUserCart - دریافت سبد خرید (Admin)
      • GetAllUserCartsByFilter - دریافت لیست سبدهای خرید
    • Customer Methods:
      • AddNewUserCartForCustomer - افزودن محصول به سبد (Customer)
      • UpdateUserCartForCustomer - بروزرسانی تعداد محصول در سبد
      • RemoveUserCartForCustomer - حذف محصول از سبد
      • GetCustomerCart - دریافت سبد خرید مشتری

🛠️ Technical Implementation Details

gRPC HTTP Annotations

تمام سرویس‌ها با HTTP annotations تعریف شده‌اند:

  • Admin endpoints: /ServiceName pattern
  • Customer endpoints: /Customer/Action pattern

Clean Architecture Structure

CMSMicroservice.Domain/       # Core business entities
CMSMicroservice.Application/  # Business logic & CQRS
CMSMicroservice.Infrastructure/ # Data access & external services
CMSMicroservice.WebApi/       # gRPC services & controllers
CMSMicroservice.Protobuf/     # Protocol buffer definitions

Swagger Integration

  • Multiple Swagger documents: cms, admin, customer, unified
  • gRPC HTTP transcoding enabled
  • Custom CSS styling applied
  • Conflict resolution implemented

🔧 Issues Resolved

1. Swagger Conflict Resolution

Problem:

Swashbuckle.AspNetCore.SwaggerGen.SwaggerGeneratorException: 
Conflicting method/path combination "GET GetUserCart"

Root Cause:

  • دو method با operation ID یکسان: GetUserCart و GetUserCartForCustomer
  • Swagger از method name برای operation ID استفاده می‌کند

Solutions Attempted:

  1. CustomOperationIds - ineffective
  2. ResolveConflictingActions - incomplete resolution
  3. Method Renaming - successful

Final Solution:

// Before (conflicting):
rpc GetUserCartForCustomer(GetUserCartForCustomerRequest) returns (GetUserCartForCustomerResponse)

// After (resolved):
rpc GetCustomerCart(GetUserCartForCustomerRequest) returns (GetUserCartForCustomerResponse)

2. Application Layer Dependencies

Problem: Build errors در Application layer Solution: پاکسازی dependencies و rebuild پروژه

📊 Migration Status Summary

Service Proto Implementation Build Swagger
Categories
City
UserCarts

🎯 Next Steps

  1. Service Integration Testing - تست عملکرد سرویس‌های migrate شده
  2. Business Logic Implementation - پیاده‌سازی منطق کسب‌وکار واقعی
  3. Database Integration - اتصال به لایه دیتا
  4. Continue Migration - ادامه migration سایر سرویس‌ها

🏗️ Technical Architecture

gRPC Service Pattern

public class ServiceName : ServiceContract.ServiceContractBase
{
    private readonly IDispatchRequestToCQRS _dispatcher;
    
    // Customer Methods Section
    #region Customer Methods
    public override async Task<Response> CustomerMethod(Request request, ServerCallContext context)
    {
        // Implementation
    }
    #endregion
    
    // Admin Methods Section  
    #region Admin Methods
    public override async Task<Response> AdminMethod(Request request, ServerCallContext context)
    {
        // Implementation
    }
    #endregion
}

Proto File Structure

syntax = "proto3";
import "google/api/annotations.proto";

service ServiceContract {
    // ============= Admin Methods =============
    rpc AdminMethod(Request) returns (Response) {
        option (google.api.http) = {
            post: "/AdminEndpoint"
            body: "*"
        };
    };
    
    // ============= Customer Methods =============
    rpc CustomerMethod(Request) returns (Response) {
        option (google.api.http) = {
            get: "/Customer/Endpoint"
        };
    };
}

📈 Performance & Quality

  • All services compile successfully
  • Swagger documentation accessible
  • gRPC HTTP transcoding working
  • Clean separation of Admin/Customer concerns
  • Consistent naming conventions applied

Last Updated: January 30, 2026
Migration Phase: Foundation Services Complete
Next Milestone: Business Logic Implementation