Files
docs/cms/REMAINING-TASKS.md
T

159 lines
8.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# کارهای باقیمانده - 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 بدون خطا** | ✅ 🎉 |