Files
CMS/docs/INVENTORY-REFACTORING-STATUS.md
T
masoodafar-web dde4c68b2f
Build and Deploy to Kubernetes / build-and-deploy (push) Failing after 2m33s
feat: Implement inventory and warehouse management features
- Add GetLowStockItemsResponseDto and LowStockItemDto for low stock item queries.
- Create CreateStockMovementCommand and its handler for managing stock movements.
- Implement CreateStockMovementCommandValidator for validating stock movement commands.
- Add GetStockMovementsQuery and its handler to retrieve stock movement records.
- Create GetStockMovementsResponseDto and StockMovementListDto for stock movement responses.
- Implement GetStockMovementsByInventoryItemQuery and its handler for fetching movements by inventory item.
- Add CreateWarehouseCommand and its handler for creating new warehouses.
- Implement CreateWarehouseCommandValidator for warehouse creation validation.
- Add DeleteWarehouseCommand and its handler for removing warehouses.
- Implement SetDefaultWarehouseCommand and its handler for setting a default warehouse.
- Create UpdateWarehouseCommand and its handler for updating warehouse details.
- Implement GetAllWarehousesQuery and its handler to retrieve all warehouses.
- Add GetWarehouseQuery and its handler for fetching a specific warehouse by ID.
- Implement SearchWarehousesQuery and its handler for searching warehouses based on criteria.
2026-01-03 11:59:08 +03:30

4.5 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 نیست

📝 نتیجه‌گیری

Refactoring با موفقیت تکمیل شد!

  • Application layer با ساختار *CQ/Commands/[Action]/ سازگار شد
  • Repository pattern کاملاً حذف شد
  • WebApi layer با Proto سازگار شد
  • Build همه پروژه‌ها موفق هست