191 lines
6.6 KiB
Markdown
191 lines
6.6 KiB
Markdown
# وضعیت 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 همگام شد (۳ ژانویه ۲۰۲۶)**
|