Refactor code structure for improved readability and maintainability
This commit is contained in:
@@ -0,0 +1,158 @@
|
||||
# کارهای باقیمانده - CMS Microservice
|
||||
|
||||
> آخرین بروزرسانی: February 10, 2026
|
||||
> Build Status: ✅ SUCCESS (0 Errors)
|
||||
|
||||
---
|
||||
|
||||
## 📊 خلاصه وضعیت
|
||||
|
||||
| دسته | تعداد | وضعیت |
|
||||
|------|--------|--------|
|
||||
| ~~متدهای Unimplemented~~ | ~~30~~ → **0** | ✅ همه انجام شد |
|
||||
| ~~متدهای Mock/جعلی~~ | ~~13~~ → **0** | ✅ همه انجام شد |
|
||||
| ~~گزارشهای TODO (صفر برمیگردونه)~~ | ~~2~~ → **0** | ✅ هر دو پیاده شد |
|
||||
| ~~فایل تنظیمات اشتباه (Staging)~~ | ~~1~~ → **0** | ✅ فیکس شد |
|
||||
| ~~Entityهای تکراری مُرده~~ | ~~3~~ → **0** | ✅ حذف شد |
|
||||
| **مجموع باقیمانده** | **0** | ✅ 🎉 |
|
||||
|
||||
---
|
||||
|
||||
## ✅ کارهای انجامشده
|
||||
|
||||
### فاز ۱ — فیکسهای فوری ✅
|
||||
- [x] اصلاح `appsettings.Staging.json` — URL از `backoffice-bff` به `cms` تغییر کرد
|
||||
- [x] حذف `Products.cs`, `ProductImages.cs`, `ProductGalleries.cs` (Entityهای تکراری)
|
||||
- [x] اصلاح `nameof(Products)` → `nameof(Product)` در `GetCustomerProductsQueryHandler`
|
||||
|
||||
### فاز ۲ — ProductsService ✅ (8 متد)
|
||||
- [x] `BulkUpdateProductPrices` — بروزرسانی قیمت/تخفیف/تخفیف باشگاه
|
||||
- [x] `BulkUpdateProductStock` — بروزرسانی موجودی (SET/ADD/SUBTRACT)
|
||||
- [x] `GetLowStockProducts` — محصولات کمموجودی با صفحهبندی
|
||||
- [x] `ToggleProductStatus` — فعال/غیرفعال محصول
|
||||
- [x] `GetProductsForCategory` — DragDrop: محصولات برای دستهبندی
|
||||
- [x] `GetCategories` — DragDrop: دستهبندیها برای محصول
|
||||
- [x] `UpdateProductCategories` — DragDrop: بروزرسانی دستهبندیهای محصول
|
||||
- [x] `UpdateCategoryProducts` — DragDrop: بروزرسانی محصولات دستهبندی
|
||||
|
||||
### فاز ۳ — CityService ✅ (6 متد) + CategoryService ✅ (1 متد)
|
||||
- [x] `GetCitiesForCustomer` — لیست شهرها با فیلتر و صفحهبندی
|
||||
- [x] `GetCityByIdForCustomer` — شهر با ID
|
||||
- [x] `GetCitiesByStateForCustomer` — شهرهای استان
|
||||
- [x] `CreateCity` — ایجاد شهر
|
||||
- [x] `UpdateCity` — بروزرسانی شهر
|
||||
- [x] `DeleteCity` — حذف نرم شهر
|
||||
- [x] `GetCategoryByIdForCustomer` — دستهبندی با ID
|
||||
|
||||
### فاز ۴ — UserCartsService ✅ (5 متد)
|
||||
- [x] `AddNewUserCart` — افزودن به سبد خرید
|
||||
- [x] `UpdateUserCart` — بروزرسانی تعداد
|
||||
- [x] `DeleteUserCart` — حذف نرم
|
||||
- [x] `GetUserCart` — دریافت آیتم سبد
|
||||
- [x] `GetAllUserCartsByFilter` — لیست سبد خرید با فیلتر و صفحهبندی
|
||||
|
||||
### فاز ۵ — InventoryService ✅ (7 متد)
|
||||
- [x] `ReserveStock` — رزرو موجودی
|
||||
- [x] `ReleaseReservation` — آزادسازی رزرو
|
||||
- [x] `ConfirmSale` — تأیید فروش
|
||||
- [x] `ProcessReturn` — پردازش مرجوعی
|
||||
- [x] `BulkAddStock` — افزودن موجودی انبوه
|
||||
- [x] `GetInventorySummary` — خلاصه انبارداری (واقعی با DB)
|
||||
- [x] `GetStockValueReport` — گزارش ارزش موجودی (واقعی با DB)
|
||||
|
||||
### فاز ۶ — UserOrderService ✅ (8 Unimplemented + 3 Mock)
|
||||
- [x] `CreateNewUserOrder` — ایجاد سفارش
|
||||
- [x] `UpdateUserOrder` — بروزرسانی سفارش
|
||||
- [x] `DeleteUserOrder` — حذف نرم
|
||||
- [x] `CancelOrder` — لغو سفارش (ادمین)
|
||||
- [x] `UpdateOrderStatus` — بروزرسانی وضعیت
|
||||
- [x] `GetOrdersByDateRange` — سفارشات بازه زمانی
|
||||
- [x] `ApplyDiscountToOrder` — اعمال تخفیف
|
||||
- [x] `CalculateOrderPV` — محاسبه PV
|
||||
- [x] `CustomerCancelOrder` — لغو سفارش مشتری (با ریفاند کیف پول)
|
||||
- [x] `CustomerTrackOrder` — پیگیری سفارش واقعی
|
||||
- [x] `CustomerReorderPreviousOrder` — سفارش مجدد واقعی
|
||||
|
||||
### فاز ۷ — ConfigurationService ✅ (2 متد)
|
||||
- [x] `CreateOrUpdateConfiguration` → `FailedPrecondition` (عمداً read-only)
|
||||
- [x] `DeactivateConfiguration` → `FailedPrecondition` (عمداً read-only)
|
||||
|
||||
### فاز ۸ — UserService ✅ (5 متد Mock → واقعی)
|
||||
- [x] `GetCustomerUser` — خواندن از DB با `_context.Users` + JWT userId
|
||||
- [x] `UpdateCustomerProfile` — بروزرسانی FirstName/LastName/Email/NationalCode/BirthDate
|
||||
- [x] `ChangeCustomerPassword` — PBKDF2 verify + hash با `IHashService`
|
||||
- [x] `UploadCustomerAvatar` — ارسال به FMS با `IFileManagementService` + ذخیره URL
|
||||
- [x] `UpdateCustomerSettings` — بروزرسانی EmailNotifications/SmsNotifications/PushNotifications
|
||||
|
||||
### فاز ۹ — TransactionsService ✅ (2 متد Mock → واقعی)
|
||||
- [x] `CustomerPaymentRequest` — ایجاد Transaction + `IPaymentGatewayService.InitiatePaymentAsync`
|
||||
- [x] `CustomerPaymentVerification` — `IPaymentGatewayService.VerifyPaymentAsync` + آپدیت Transaction
|
||||
|
||||
### فاز ۱۰ — PackageService ✅ (2 متد Mock → واقعی)
|
||||
- [x] `CustomerPurchasePackage` — ایجاد Transaction + UserPackagePurchase + payment initiate
|
||||
- [x] `CustomerVerifyPackagePurchase` — verify payment + آپدیت Transaction و Purchase
|
||||
|
||||
### فاز ۱۱ — UserWalletService ✅ (1 متد Mock → واقعی)
|
||||
- [x] `CustomerWithdrawBalance` — آپدیت UserCommissionPayout با WithdrawalMethod/IbanNumber + Status=WithdrawRequested
|
||||
|
||||
---
|
||||
|
||||
## ✅ همه ۴۹ آیتم تکمیل شد! 🎉
|
||||
|
||||
> هیچ Mock یا Unimplemented متدی باقی نمانده.
|
||||
|
||||
---
|
||||
|
||||
## 📝 نکات فنی مهم
|
||||
|
||||
### سایر آیتمها (غیربحرانی)
|
||||
- `Infrastructure/Services/InventoryService.cs:L546` — یک `TODO: Implement rollback logic` (در لایه Infrastructure، نه WebApi)
|
||||
- `Infrastructure/Services/DayaLoanApiService.cs` — `MockDayaLoanApiService` (سرویس شبیهسازی API دایا — عمدی برای تست)
|
||||
|
||||
### الگوهای فنی استفادهشده
|
||||
- **oneof در protobuf**: باید از `request.HasPaymentStatus` استفاده بشه (نه `request.PaymentStatusItem != null`)
|
||||
- **StringValue wrapper**: در C# مستقیم `string` هست (بدون `.Value`)
|
||||
- **Int64Value wrapper**: در C# `long?` هست (`.Value` برای unwrap)
|
||||
- **DeliveryStatus**: در proto فقط ۵ مقدار (None تا Returned)، در Domain ۶ مقدار (+ Cancelled)
|
||||
- **ProductType**: در C# protobuf `ProductType.Unspecified` هست (نه `ProductTypeUnspecified`)
|
||||
- **ICurrentUserService.UserId**: `string?` — همیشه با `long.TryParse` تبدیل بشه
|
||||
- **IPaymentGatewayService**: ثبتشده در DI (`DayaPaymentService` واقعی / `MockPaymentGatewayService` تست)
|
||||
- **IHashService**: PBKDF2 — `HashPassword()` / `VerifyPassword()`
|
||||
- **IFileManagementService**: FMS gRPC — `UploadFileAsync(dir, bytes, mime, name, ct)`
|
||||
|
||||
---
|
||||
|
||||
## 📋 ترتیب انجام کارها (تکمیلشده)
|
||||
|
||||
- [x] فاز ۱ — فیکسهای فوری (Staging URL, Dead Entities)
|
||||
- [x] فاز ۲ — ProductsService (8 متد)
|
||||
- [x] فاز ۳ — CityService (6 متد) + CategoryService (1 متد)
|
||||
- [x] فاز ۴ — UserCartsService (5 متد)
|
||||
- [x] فاز ۵ — InventoryService (7 متد)
|
||||
- [x] فاز ۶ — UserOrderService (8 Unimplemented + 3 Mock)
|
||||
- [x] فاز ۷ — ConfigurationService (2 متد)
|
||||
- [x] فاز ۸ — UserService (5 Mock → واقعی)
|
||||
- [x] فاز ۹ — TransactionsService (2 Mock → واقعی)
|
||||
- [x] فاز ۱۰ — PackageService (2 Mock → واقعی)
|
||||
- [x] فاز ۱۱ — UserWalletService (1 Mock → واقعی)
|
||||
|
||||
---
|
||||
|
||||
## ✅ تاریخچه انجام کارها
|
||||
|
||||
| تاریخ | کار | وضعیت |
|
||||
|-------|------|--------|
|
||||
| Dec 2025 | مهاجرت ۲۰/۲۰ سرویس BackOffice BFF→CMS | ✅ |
|
||||
| Jan 2026 | فعالسازی ماژولهای DiscountShop | ✅ |
|
||||
| Feb 2026 | یکپارچهسازی FMS (آپلود فایل با ImageSharp) | ✅ |
|
||||
| Feb 2026 | رفع باگ OTP SMS (Kavenegar) | ✅ |
|
||||
| Feb 2026 | رفع باگ BCrypt Invalid Salt Version | ✅ |
|
||||
| Feb 2026 | شناسایی مشکل Token/Roles (`_Imports.razor`) | ✅ |
|
||||
| Feb 2026 | پیادهسازی ۳۰ متد Unimplemented | ✅ |
|
||||
| Feb 2026 | جایگزینی ۳ متد Mock (UserOrder مشتری) | ✅ |
|
||||
| Feb 2026 | فیکس Staging URL, Dead Entities, Build Errors | ✅ |
|
||||
| Feb 2026 | جایگزینی ۵ متد Mock (UserService) — DB+JWT+FMS+Hash | ✅ |
|
||||
| Feb 2026 | جایگزینی ۲ متد Mock (TransactionsService) — PaymentGateway | ✅ |
|
||||
| Feb 2026 | جایگزینی ۲ متد Mock (PackageService) — Purchase+Verify | ✅ |
|
||||
| Feb 2026 | جایگزینی ۱ متد Mock (UserWalletService) — Withdraw | ✅ |
|
||||
| Feb 2026 | **همه ۴۹/۴۹ آیتم تکمیل — Build بدون خطا** | ✅ 🎉 |
|
||||
Reference in New Issue
Block a user