# کارهای باقیمانده - 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 بدون خطا** | ✅ 🎉 |