6.0 KiB
6.0 KiB
📝 Changelog - ۲۸ آذر ۱۴۰۴ (18 December 2025)
Session: بهبودات FrontOffice، مدیریت موجودی، ClubFeatures
🛒 سیستم مدیریت موجودی محصولات
CMS - SubmitShopBuyOrderCommandHandler
فایل: CMSMicroservice.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderCommandHandler.cs
تغییرات:
-
چک موجودی قبل از خرید:
- اگر محصول ناموجود شده (
RemainingCount <= 0) → خطا - اگر تعداد درخواستی > موجودی → خطا با جزئیات
- اگر محصول ناموجود شده (
-
کاهش موجودی بعد از پرداخت موفق:
foreach (var cartItem in user.UserCarts) { cartItem.Product.RemainingCount -= cartItem.Count; cartItem.Product.SaleCount += cartItem.Count; } -
پیامهای خطای فارسی:
"محصولات زیر ناموجود شدهاند: [لیست]""موجودی محصولات زیر کافی نیست: «نام»: درخواست X عدد، موجودی Y عدد"
FrontOffice - ProductDetail
فایلها:
Pages/Store/ProductDetail.razorPages/Store/ProductDetail.razor.cs
تغییرات:
- MaxQty داینامیک: از عدد ثابت 20 به
_product.RemainingCount - پراپرتی IsInStock:
_product.RemainingCount > 0 - UI موجودی:
- Chip سبز: "موجود در انبار (X عدد)"
- Chip قرمز: "ناموجود"
- غیرفعال کردن دکمه: وقتی محصول ناموجود
🎖️ ویژگیهای باشگاه مشتریان (ClubFeatures)
معماری اصلاحشده
- ClubFeature (جدول قالب):
Title,Description,DetailedDescriptionHtml,Icon,Color,IsActive,RequiredPoints,SortOrder - UserClubFeature (junction table):
UserId,ClubMembershipId,ClubFeatureId,IsActive,GrantedAt,Notes
فایلهای اصلاحشده:
CMS:
UserClubFeatureDto.cs: حذفDetailedDescriptionHtml,Icon,Colorclubmembership.proto: حذف فیلدهای 7,8,9 ازUserClubFeatureModelClubFeatureProfile.cs: حذف mapping های اضافی
BFF:
GetClubFeaturesQueryHandler.cs: حذف mapping های حذفشدهGetClubFeaturesResponseDto.cs: حذف فیلدها ازClubFeatureItemDtoconfiguration.proto: حذفdetailed_description_html,icon,colorازClubFeatureModelConfigurationProfile.cs: حذف mapping های اضافی
FrontOffice:
ClubConfigurationService.cs: حذف فیلدها ازClubFeatureDtoو mappingFeaturesPage.razor:- استفاده از آیکون ثابت
Star - حذف متد
GetMudIcon - تغییر جدول به
MudListساده - نمایش
Notesدر مدال جزئیات
- استفاده از آیکون ثابت
MembershipPage - مزایای عضویت
فایل: Pages/Club/MembershipPage.razor
مزایای جدید:
- ✅ شارژ ۵۶ میلیون تومان کیف پول فروشگاه تخفیفی
- ✅ عضویت در شبکه بازاریابی و دریافت پورسانت
- ✅ امکان جذب زیرمجموعه و گسترش شبکه
📍 مدال آدرسها
رفع باگها:
1. خطای Snackbar تکراری
مشکل: CS0102: already contains a definition for 'Snackbar'
علت: ISnackbar در _Imports.razor به صورت global inject شده بود
حل: حذف [Inject] private ISnackbar Snackbar از code-behind
فایلهای اصلاحشده:
AddAddressDialog.razor.csEditAddressDialog.razor.cs
2. خطای NullReferenceException
مشکل: Object reference not set to an instance of an object
علت: dialog.Result میتواند null باشد
حل: اضافه کردن null check
// قبل
if (!result.Canceled)
// بعد
if (result is not null && !result.Canceled)
فایل: Addresses.razor.cs
💰 VAT Service
تغییرات:
- نرخ پیشفرض: 9.99% (برای تشخیص داده سرور از local)
- استفاده در CheckoutSummary:
VAT.IsEnabled,VAT.VatPercentage,VAT.AddVAT() - کلید جدید:
VAT_PERCENTAGE_KEYدر LocalStorage
🛒 CartService Authentication
تغییرات:
- EnsureInitializedAsync(): متد جدید برای lazy loading
- IsAuthenticatedAsync(): چک توکن در LocalStorage
- عدم لود برای unauthenticated: سبد خرید فقط برای کاربران لاگینشده لود میشود
فایلهای آپدیتشده برای فراخوانی EnsureInitialized:
MainLayout.razor.csCart.razor.csProducts.razor.csProductDetail.razor.csCheckoutSummary.razor.cs
📊 خلاصه فایلهای تغییر یافته
CMS (5 فایل):
SubmitShopBuyOrderCommandHandler.cs- چک و کاهش موجودیUserClubFeatureDto.cs- حذف فیلدهاclubmembership.proto- حذف فیلدهاClubFeatureProfile.cs- حذف mapping
BFF (4 فایل):
GetClubFeaturesQueryHandler.cs- حذف mappingGetClubFeaturesResponseDto.cs- حذف فیلدهاconfiguration.proto- حذف فیلدهاConfigurationProfile.cs- حذف mapping
FrontOffice (12 فایل):
ProductDetail.razor- نمایش موجودیProductDetail.razor.cs- MaxQty داینامیکClubConfigurationService.cs- حذف فیلدهاFeaturesPage.razor- بازطراحی UIMembershipPage.razor- مزایای عضویتAddAddressDialog.razor.cs- رفع خطای SnackbarEditAddressDialog.razor.cs- رفع خطای SnackbarAddresses.razor.cs- رفع NullRefCartService.cs- Authentication checkVATService.cs- نرخ 9.99%CheckoutSummary.razor- استفاده از VATServiceMainLayout.razor.cs- EnsureInitializedAsync
✅ وضعیت نهایی
- Build: موفق
- تست دستی: آدرسها ✅، موجودی محصول ✅، ClubFeatures ✅