# وضعیت Refactoring سیستم انبارداری (Inventory) **تاریخ:** ۳ ژانویه ۲۰۲۶ **وضعیت:** ✅ تکمیل شده - Build موفق --- ## 📊 وضعیت Build | پروژه | وضعیت | |-------|--------| | CMSMicroservice.Domain | ✅ OK | | CMSMicroservice.Application | ✅ OK | | CMSMicroservice.Infrastructure | ✅ OK | | CMSMicroservice.WebApi | ✅ OK | --- ## ✅ کارهای انجام شده ### 1. حذف Repository Pattern فایل‌های حذف شده: - `Application/Common/Interfaces/Repositories/IInventoryItemRepository.cs` - `Application/Common/Interfaces/Repositories/IStockMovementRepository.cs` - `Application/Common/Interfaces/Repositories/IWarehouseRepository.cs` - `Infrastructure/Persistence/Repositories/InventoryItemRepository.cs` - `Infrastructure/Persistence/Repositories/StockMovementRepository.cs` - `Infrastructure/Persistence/Repositories/WarehouseRepository.cs` ### 2. حذف Features قدیمی فولدر حذف شده: - `Application/Features/` (کل فولدر) ### 3. ایجاد ساختار CQ جدید #### WarehouseCQ/ ``` WarehouseCQ/ ├── Commands/ │ ├── CreateWarehouse/ │ ├── UpdateWarehouse/ │ ├── DeleteWarehouse/ │ └── SetDefaultWarehouse/ └── Queries/ ├── GetWarehouse/ ├── GetAllWarehouses/ └── SearchWarehouses/ ``` #### InventoryItemCQ/ ``` InventoryItemCQ/ ├── Commands/ │ ├── CreateInventoryItem/ │ ├── UpdateInventoryItem/ │ ├── DeleteInventoryItem/ │ ├── UpdateInventoryQuantity/ │ ├── ReserveInventory/ │ ├── ReleaseReservedInventory/ │ ├── ReduceInventory/ │ └── IncreaseInventory/ └── Queries/ ├── GetInventoryItem/ ├── GetInventoryByProduct/ ├── GetAllInventoryItems/ └── GetLowStockItems/ ``` #### StockMovementCQ/ ``` StockMovementCQ/ ├── Commands/ │ └── CreateStockMovement/ └── Queries/ ├── GetStockMovements/ └── GetStockMovementsByInventoryItem/ ``` ### 4. Fix شدن InventoryProfile.cs - اصلاح enum names: `ProtoProductType.Unspecified` بجای `ProductTypeUnspecified` - حذف `new Int64Value` - Proto مستقیم `long?` میگیره - اصلاح expression tree برای `?.` operator ### 5. ساده‌سازی InventoryService.cs - متدهای اصلی (Warehouse, Query ها) کامل پیاده‌سازی شدن - متدهای پیچیده که نیاز به lookup دارن فعلاً TODO هستن --- ## ⚠️ متدهای TODO در InventoryService این متدها نیاز به پیاده‌سازی دارن (وقتی لازم شد): | متد | دلیل TODO | |-----|-----------| | `AddStock` | نیاز به lookup با ProductId/ProductType | | `AdjustStock` | نیاز به lookup با ProductId/ProductType | | `ReserveStock` | نیاز به lookup با ProductId/ProductType | | `ReleaseReservation` | نیاز به lookup با ProductId/ProductType | | `ConfirmSale` | نیاز به lookup با ProductId/ProductType | | `ProcessReturn` | نیاز به lookup با ProductId/ProductType | | `RecordLoss` | نیاز به lookup با ProductId/ProductType | | `BulkAddStock` | نیاز به loop و lookup | | `BulkAdjustStock` | نیاز به loop و lookup | | `GetInventorySummary` | نیاز به Query جدید | | `GetStockValueReport` | نیاز به Query جدید | --- ## 🎯 درس‌های آموخته شده 1. **همیشه اول Proto رو بررسی کن** - Proto مرجع اصلی API هست 2. **ساختار موجود رو تحلیل کن** - قبل از ساختن فایل جدید، نمونه‌های موجود رو ببین 3. **Mapping از Proto به Command** - نه برعکس! 4. **IApplicationDbContext** - الگوی استاندارد این پروژه برای دسترسی به DB 5. **بدون Repository** - این پروژه از Repository pattern استفاده نمیکنه 6. **Proto enum names** - نام‌ها در C# متفاوت هستن (مثلاً `Unspecified` بجای `PRODUCT_TYPE_UNSPECIFIED`) 7. **Int64Value در Proto** - در C# به `long?` تبدیل میشه، نیازی به `new Int64Value` نیست --- ## 🔄 همگام‌سازی BFF با CMS (۳ ژانویه ۲۰۲۶) ### تغییرات Proto BackOffice.BFF.Inventory.Protobuf با CMS همگام شد: | آیتم | قبل | بعد | |------|-----|-----| | ProductType enum | `REGULAR`, `DISCOUNT` | `REGULAR_PRODUCT`, `DISCOUNT_PRODUCT` | | StockMovementType | Sequential (0-9) | Grouped (10, 20, 30, 40, 50) | | Pagination | `page_index` | `page` | | Search | `search_term` | `search` | | Product name | `product_name` | `product_title` | ### فایل‌های آپدیت شده در BFF **Commands:** - `AddStock` - حذف Success, Message از Response - `AdjustStock` - Note→Reason, +ReferenceNumber - `RecordLoss` - Note→Reason, +ReferenceNumber - `UpdateInventorySettings` - InventoryItemId→Id **Queries:** - `GetAllInventoryItems` - PageIndex→Page, SearchTerm→Search, +ProductPrice - `GetStockMovements` - PageIndex→Page, +ProductTitle, +Created - `GetLowStockItems` - حذف Count، استفاده از Page/PageSize - `GetAllWarehouses` - ActiveOnly→IsActive, +Created, +LastModified **Mappings:** - `InventoryProfile.cs` - بازنویسی کامل برای فیلدهای جدید ### وضعیت Build BFF ``` Build succeeded. 0 Warning(s) 0 Error(s) ``` --- ## 📊 پوشش API - مقایسه CMS و BFF | عملیات | CMS | BFF | یادداشت | |--------|-----|-----|---------| | GetAllInventoryItems | ✅ | ✅ | همگام | | GetInventoryItem | ✅ | ✅ | همگام | | GetLowStockItems | ✅ | ✅ | همگام | | GetStockMovements | ✅ | ✅ | همگام | | GetAllWarehouses | ✅ | ✅ | همگام | | AddStock | ✅ | ✅ | همگام | | AdjustStock | ✅ | ✅ | همگام | | RecordLoss | ✅ | ✅ | همگام | | CreateWarehouse | ✅ | ✅ | همگام | | UpdateWarehouse | ✅ | ❌ | نیاز به پیاده‌سازی | | UpdateInventorySettings | ✅ | ✅ | همگام | | GetInventorySummary | TODO | ❌ | اولویت بالا | | GetStockValueReport | TODO | ❌ | اولویت بالا | | ProcessReturn | TODO | ❌ | اولویت متوسط | --- ## 📝 نتیجه‌گیری ✅ **Refactoring با موفقیت تکمیل شد!** - Application layer با ساختار `*CQ/Commands/[Action]/` سازگار شد - Repository pattern کاملاً حذف شد - WebApi layer با Proto سازگار شد - Build همه پروژه‌ها موفق هست - **BFF کاملاً با CMS همگام شد (۳ ژانویه ۲۰۲۶)**