Files
docs/CUSTOMER-METHODS-IMPLEMENTATION-CHECKLIST.md
T

4.2 KiB

Customer Methods Implementation Checklist

چک‌لیست پیاده‌سازی متدهای Customer

📋 ProductsService Customer Methods

آماده‌سازی پایه

  • Proto contracts تعریف شده
  • Service class ایجاد شده
  • Method signatures صحیح

🔄 نیاز به پیاده‌سازی

  • GetProductsForCustomer

    • اتصال به GetProductsQuery از Application layer
    • فیلتر محصولات فعال (IsActive = true)
    • Pagination support
    • تبدیل Domain models به Proto responses
  • GetProductByIdForCustomer

    • اتصال به GetProductByIdQuery
    • بررسی دسترسی مشتری
    • Error handling برای محصول ناموجود
  • GetProductsByCategoryForCustomer

    • اتصال به GetProductsByCategoryQuery
    • فیلتر بر اساس دسته‌بندی
    • Category validation

📋 UserOrderService Customer Methods

آماده‌سازی پایه

  • Proto contracts تعریف شده
  • Service class ایجاد شده
  • Method signatures صحیح

🔄 نیاز به پیاده‌سازی

  • CreateNewOrderForCustomer

    • اتصال به CreateOrderCommand از Application layer
    • Order validation logic
    • Cart items validation
    • Customer validation
    • Error handling
  • GetOrderHistoryForCustomer

    • اتصال به GetOrdersQuery
    • فیلتر بر اساس CustomerId
    • Pagination support
  • GetOrderDetailForCustomer

    • اتصال به GetOrderByIdQuery
    • بررسی ownership (سفارش متعلق به همین مشتری)
    • Security check
  • CancelOrderForCustomer

    • اتصال به CancelOrderCommand
    • Business rules validation
    • Order status checks

📋 UserCartsService (تکمیل شده )

  • AddNewUserCartForCustomer - از CMS Application استفاده می‌کند
  • UpdateUserCartForCustomer - از CMS Application استفاده می‌کند
  • RemoveUserCartForCustomer - از CMS Application استفاده می‌کند
  • GetUserCartForCustomer - از CMS Application استفاده می‌کند

🔧 راهنمای پیاده‌سازی

الگوی کلی برای Customer Methods:

public override async Task<TResponse> MethodNameForCustomer(
    TRequest request, ServerCallContext context)
{
    try 
    {
        // 1. Validation
        if (/* invalid input */) 
            throw new RpcException(new Status(StatusCode.InvalidArgument, "Invalid input"));
            
        // 2. استفاده از Application layer
        var command/query = new TCommand/TQuery 
        { 
            /* map from request */
        };
        
        var result = await _dispatcher.DispatchAsync(command/query);
        
        // 3. تبدیل به Proto response
        return new TResponse 
        {
            /* map from result */
        };
    }
    catch (Exception ex)
    {
        throw new RpcException(new Status(StatusCode.Internal, ex.Message));
    }
}

نکات مهم:

  • همیشه از IDispatchRequestToCQRS استفاده کنید
  • Proto dependencies را در Application layer قرار ندهید
  • Error handling مناسب پیاده‌سازی کنید
  • Customer authorization را بررسی کنید

Quick Commands

Build & Test:

# Build
cd /home/masoud/Apps/project/FourSat/CMS/src
dotnet build CMS.sln

# Run  
cd CMSMicroservice.WebApi
dotnet run

# Test specific endpoint
curl -X GET "http://localhost:32847/Customer/Products/GetProductsForCustomer"

Swagger Access:

http://localhost:32847/swagger/index.html

📅 اولویت‌بندی کار

Week 1: Products Customer Methods

  1. GetProductsForCustomer (اولویت بالا)
  2. GetProductByIdForCustomer
  3. GetProductsByCategoryForCustomer

Week 2: Orders Customer Methods

  1. CreateNewOrderForCustomer (اولویت بالا)
  2. GetOrderHistoryForCustomer
  3. GetOrderDetailForCustomer
  4. CancelOrderForCustomer

Week 3: Testing & Polish

  1. Unit tests
  2. Integration tests
  3. Performance optimization
  4. Documentation updates