Files
CMS/docs/INVENTORY-REFACTORING-STATUS.md
T
masoodafar-web ca9b02a902
Build and Deploy to Kubernetes / build-and-deploy (push) Failing after 2m4s
chore: update Protobuf project version to 0.0.169
2026-01-03 15:38:33 +03:30

6.6 KiB

وضعیت 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 همگام شد (۳ ژانویه ۲۰۲۶)