# Customer Methods Implementation Checklist *چک‌لیست پیاده‌سازی متدهای Customer* ## 📋 ProductsService Customer Methods ### ✅ آماده‌سازی پایه - [x] Proto contracts تعریف شده - [x] Service class ایجاد شده - [x] 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 ### ✅ آماده‌سازی پایه - [x] Proto contracts تعریف شده - [x] Service class ایجاد شده - [x] 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 (تکمیل شده ✅) - [x] **AddNewUserCartForCustomer** - از CMS Application استفاده می‌کند - [x] **UpdateUserCartForCustomer** - از CMS Application استفاده می‌کند - [x] **RemoveUserCartForCustomer** - از CMS Application استفاده می‌کند - [x] **GetUserCartForCustomer** - از CMS Application استفاده می‌کند --- ## 🔧 راهنمای پیاده‌سازی ### الگوی کلی برای Customer Methods: ```csharp public override async Task 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: ```bash # 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