Implement Persian Date Conversion and Enhance User Network Information Service
- Added PersianDateTimeService for converting Gregorian dates to Persian format in the BackOffice frontend. - Updated multiple frontend pages (Dashboard, UserPayouts, WorkerControl, UserNetworkInfo) to utilize the new Persian date service. - Enhanced GetUserNetworkPositionDto with 28+ new fields for comprehensive user network data. - Updated GetUserNetworkPositionQueryHandler to include new methods for calculating network statistics. - Modified Protobuf messages to accommodate the new fields, increasing from 14 to 42. - Refined week number calculation algorithm to ensure consistency across C# and SQL implementations. - Created new CSV and Excel files for binary plan calculations. - Ensured all changes are tested and validated for accuracy and performance.
This commit is contained in:
+122
-3
@@ -1,9 +1,122 @@
|
||||
# 🎯 اسپرینت جاری (Current Sprint)
|
||||
|
||||
**تاریخ شروع**: ۱۴ آذر ۱۴۰۴
|
||||
**آخرین بروزرسانی**: ۱۵ آذر ۱۴۰۴
|
||||
**آخرین بروزرسانی**: ۲۸ آذر ۱۴۰۴
|
||||
**مدت**: 2 هفته
|
||||
**هدف**: تکمیل FrontOffice UI و یکپارچهسازی BFF
|
||||
**هدف**: تکمیل BackOffice UI و رفع Anti-Patterns معماری
|
||||
|
||||
---
|
||||
|
||||
## 🔧 تغییرات اخیر (۲۸ آذر) - Session 2
|
||||
|
||||
### ✅ سیستم مدیریت موجودی محصولات
|
||||
**CMS Handler**: چک موجودی در `SubmitShopBuyOrderCommandHandler`
|
||||
- چک موجودی قبل از تأیید سفارش
|
||||
- کاهش `RemainingCount` و افزایش `SaleCount` بعد از پرداخت
|
||||
- پیام خطای فارسی با جزئیات محصول و تعداد
|
||||
|
||||
**FrontOffice ProductDetail**:
|
||||
- `MaxQty` داینامیک بر اساس موجودی واقعی
|
||||
- نمایش Chip موجودی (سبز/قرمز) با تعداد
|
||||
- غیرفعال کردن دکمه افزودن وقتی ناموجود
|
||||
|
||||
### ✅ ویژگیهای باشگاه (ClubFeatures) - اصلاح معماری
|
||||
**حذف فیلدها از UserClubFeature**:
|
||||
- `DetailedDescriptionHtml`, `Icon`, `Color` فقط در `ClubFeature` (جدول قالب)
|
||||
- `UserClubFeature` فقط: `IsActive`, `GrantedAt`, `Notes`
|
||||
|
||||
**فایلهای اصلاحشده**:
|
||||
- CMS: `UserClubFeatureDto`, `clubmembership.proto`, `ClubFeatureProfile`
|
||||
- BFF: `GetClubFeaturesQueryHandler`, `GetClubFeaturesResponseDto`, `configuration.proto`, `ConfigurationProfile`
|
||||
- FrontOffice: `ClubConfigurationService`, `FeaturesPage`
|
||||
|
||||
**MembershipPage - مزایای عضویت**:
|
||||
1. شارژ ۵۶ میلیون تومان کیف پول فروشگاه تخفیفی
|
||||
2. عضویت در شبکه بازاریابی و دریافت پورسانت
|
||||
3. امکان جذب زیرمجموعه
|
||||
|
||||
### ✅ رفع باگ مدال آدرسها
|
||||
- **Snackbar تکراری**: حذف inject از code-behind (global در `_Imports.razor`)
|
||||
- **NullReferenceException**: null check برای `dialog.Result`
|
||||
|
||||
### ✅ VAT و Cart Services
|
||||
- **VATService**: نرخ پیشفرض 9.99% برای debug
|
||||
- **CartService**: `EnsureInitializedAsync` + `IsAuthenticatedAsync` برای لود فقط برای کاربران لاگینشده
|
||||
|
||||
---
|
||||
|
||||
## 🔧 تغییرات قبلی (۲۸ آذر) - Session 1
|
||||
|
||||
### ✅ نمودار درختی شبکه در FrontOffice با d3-org-chart
|
||||
**کتابخانهها**: d3-org-chart v3 + d3.js v7 + d3-flextree v2.1.2
|
||||
**ویژگیها**:
|
||||
- نمایش درختی باینری شبکه
|
||||
- کلیک روی نود → نمایش درخت زیرمجموعه
|
||||
- دکمه بازگشت به نود قبلی
|
||||
- دکمه "درخت من" برای بازگشت به درخت کاربر
|
||||
- انتخاب عمق درخت با MudSelect (2-10 سطح)
|
||||
- FitToScreen برای تناسب با صفحه
|
||||
- Responsive با MudBlazor components
|
||||
|
||||
### ✅ API جدید GetSubordinateTree
|
||||
**Proto**: `GetSubordinateTreeRequest` با `target_user_id` و `max_depth`
|
||||
**BFF Handler**: `GetSubordinateTreeQueryHandler.cs`
|
||||
**Frontend Service**: `GetSubordinateTreeAsync(targetUserId, maxDepth)`
|
||||
**امنیت**: JWT Authentication (بدون check سنگین subordinate)
|
||||
|
||||
### ✅ رفع مشکل Encoding فارسی در Geography
|
||||
**Entity های تغییر یافته**: Country, State, City
|
||||
**تغییرات Configuration**: `NVARCHAR` با `Persian_100_CI_AI` collation
|
||||
**Migration**: `FixPersianCollation_Geography`
|
||||
|
||||
---
|
||||
|
||||
## 🔧 تغییرات قبلی (۱۷ آذر)
|
||||
|
||||
### ✅ رفع Anti-Pattern معماری در BackOffice.BFF
|
||||
**مشکل**: BackOffice.BFF.WebApi از پکیجهای Protobuf مربوط به CMS استفاده میکرد
|
||||
**راهحل**:
|
||||
- ساخت Protobuf های اختصاصی BackOffice.BFF (ClubMembership, Commission, Configuration, NetworkMembership)
|
||||
- تغییر namespace از `CMSMicroservice` به `Foursat.BackOffice.BFF.*`
|
||||
- تغییر GrpcServices از "Client" به "Both" (برای پشتیبانی هم از Server و هم Client)
|
||||
- نسخههای منتشر شده: 0.0.6 (ClubMembership, Commission, NetworkMembership), 1.0.6 (Configuration)
|
||||
|
||||
### ✅ اضافه شدن HTTP Annotations به Protobuf
|
||||
- افزودن `google/api/annotations.proto` به 4 پروژه Protobuf
|
||||
- پیادهسازی HTTP endpoints برای Swagger: 33 endpoint
|
||||
- ClubMembership: 7 endpoints
|
||||
- Commission: 14 endpoints
|
||||
- Configuration: 5 endpoints
|
||||
- NetworkMembership: 7 endpoints
|
||||
- نصب `Google.Api.CommonProtos v2.10.0`
|
||||
|
||||
### ✅ رفع مشکل Mapster با Immutable Types
|
||||
- ساخت `NetworkMembershipProfile.cs` با استفاده از `MapWith()`
|
||||
- مپینگ دستی برای `RepeatedField` و `Timestamp`
|
||||
- رفع خطای "Cannot convert immutable type"
|
||||
|
||||
### ✅ پشتیبانی از Multi-Role Authorization
|
||||
- تغییر `AuthorizationService` برای خواندن چندین رول از JWT
|
||||
- اضافه شدن متد `GetUserRolesAsync()`
|
||||
- استفاده از `user.FindAll(ClaimTypes.Role)` بجای `FindFirst`
|
||||
- پشتیبانی از رولهای آرایهای در `ApiAuthenticationStateProvider`
|
||||
|
||||
### ✅ نمایش درختی شبکه (Network Tree Visualization)
|
||||
- پیادهسازی درخت تعاملی با D3.js v7
|
||||
- ویژگیهای درخت:
|
||||
- Zoom & Pan با mouse/touch
|
||||
- دکمه Reset برای بازگشت به حالت اولیه
|
||||
- رنگبندی: سبز (فعال), قرمز (غیرفعال), سبز (چپ), نارنجی (راست)
|
||||
- کلیک روی node برای بارگذاری درخت آن کاربر
|
||||
- Responsive با viewBox و preserveAspectRatio
|
||||
- اضافه شدن `UserAutoComplete` برای جستجوی کاربر
|
||||
- جستجوی همزمان در Mobile, FirstName, LastName, NationalCode
|
||||
- نمایش نام + موبایل در لیست
|
||||
|
||||
### ✅ رفع مشکلات UI
|
||||
- رفع NullReferenceException در `NetworkTreeViewer` (JoinedAt null check)
|
||||
- رفع timing issue در render درخت (StateHasChanged + Task.Delay)
|
||||
- رفع خطای JSInterop با استفاده از `setDotNetReference`
|
||||
|
||||
---
|
||||
|
||||
@@ -42,10 +155,16 @@ GitLab Registry: `https://git.afrino.co/api/packages/FourSat/nuget/index.json`
|
||||
- ✅ **CMS Microservice**: ~98% Complete
|
||||
- ✅ **Daya Loan Integration**: 100% Complete (Real API implemented - Dec 6, 2025)
|
||||
- ✅ **BackOffice.BFF**: 100% Complete (35+ Handlers)
|
||||
- ✅ **Architecture Fixed**: Anti-pattern با CMS Protobuf رفع شد
|
||||
- ✅ **HTTP Annotations**: 33 endpoint با Swagger support
|
||||
- ✅ **Mapster Profiles**: NetworkMembership, Products با MapWith()
|
||||
- ✅ **FrontOffice.BFF**: 98% Complete (همه سرویسهای مورد نیاز مشتری پیادهسازی شده)
|
||||
|
||||
### Frontend:
|
||||
- ✅ **BackOffice UI**: ~95% Complete (60+ صفحه)
|
||||
- ✅ **BackOffice UI**: ~97% Complete (65+ صفحه)
|
||||
- ✅ **Multi-Role Authorization**: پشتیبانی از چندین نقش همزمان
|
||||
- ✅ **Network Tree Visualization**: نمایش درختی تعاملی با D3.js
|
||||
- ✅ **User AutoComplete**: جستجوی پیشرفته کاربران
|
||||
- ✅ **FrontOffice UI**: **98% Complete** (تمام صفحات مورد نیاز مشتری پیادهسازی شده)
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user