Files
docs/overview/OVERVIEW-03-CHANGELOG.md
T
masoodafar-web e6d086b559 Docs: Phase 8b-8d — BO CRUD expansion + FO Customer RPCs + Proto cleanup
- PACKAGE-TRANSFORMATION-TASKS.md: Add phases 8b, 8c, 8d with full details
  Updated overview diagram, commit hashes, status to 0-8d complete
- OVERVIEW-03-CHANGELOG.md: Add Phase 8b (BO CRUD) + Phase 8a+8c (FO)
  Updated summary table to 99% (240/241 complete)
2026-02-26 18:04:04 +03:30

335 lines
19 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.
# 📜 تاریخچه کارهای انجام‌شده
> **همه فعالیت‌های پروژه به صورت بولت با توضیح یک‌خطی و درصد تکمیل**
> **آخرین بروزرسانی:** اسفند ۱۴۰۴ (بروزرسانی: فاز ۸b-۸d — BO CRUD + FO Customer RPCs + Proto cleanup | NuGet v0.0.186)
---
## خلاصه کلی
| حوزه | تعداد آیتم | تکمیل‌شده | درصد کل |
|------|-----------|----------|---------|
| **BackOffice** | 61 | 61 | **100%** |
| **FrontOffice** | 40 | 40 | **100%** |
| **CMS Core** | 72 | 72 | **100%** |
| **Package-Based System** | 30 | 30 | **100%** |
| **Deployment** | 22 | 21 | **95%** |
| **Migration** | 16 | 16 | **100%** |
| **مجموع** | **241** | **240** | **99%** |
---
## ۱. BackOffice — فازها (98% کامل)
### Phase 1-3: پایه و ساختار
- ✅ ارتقا به MudBlazor v8 — تغییر تمام کامپوننت‌ها به API جدید
- ✅ پیاده‌سازی MainLayout با Drawer و AppBar — RTL support
- ✅ ایجاد NavMenu با آیکون‌ها و گروه‌بندی — دسته‌بندی منطقی
- ✅ پیاده‌سازی الگوی Code-behind — جدا کردن logic از markup
- ✅ اضافه کردن Theme سفارشی — رنگ‌ها و فونت Vazirmatn
### Phase 4-6: محصولات و فروشگاه
- ✅ صفحه لیست محصولات — MudDataGrid با pagination
- ✅ فرم ایجاد/ویرایش محصول — MudForm با FluentValidation
- ✅ آپلود تصویر محصول — Drag & drop با preview
- ✅ مدیریت دسته‌بندی‌ها — CRUD درختی
- ✅ AppImage کامپوننت — تصاویر مربعی ۱:۱ همه‌جا
### Phase 7-9: سفارشات و مالی
- ✅ لیست سفارشات — فیلتر وضعیت، تاریخ، مبلغ
- ✅ جزئیات سفارش — آیتم‌ها + تراکنش‌ها
- ✅ تغییر وضعیت سفارش — با تأیید دیالوگ
- ✅ گزارش مالی — خلاصه تراکنش‌ها
### Phase 10-12: کاربران و باشگاه
- ✅ لیست کاربران — جستجو + فیلتر نقش
- ✅ مدیریت عضویت باشگاه — فعال/غیرفعال
- ✅ نمای درخت شبکه — نمایش باینری با سطوح
- ✅ مدیریت کمیسیون — مشاهده Pool هفتگی
### Phase 13-15: محتوا و تنظیمات
- ✅ مدیریت بلاگ — CRUD پست‌ها با ادیتور HTML
- ✅ مدیریت صفحات سایت — Shopify-style typed editors
- ✅ HomePageEditor — ویرایش Hero, Featured, Promotion
- ✅ AboutPageEditor — ویرایش متن درباره‌ما
- ✅ ContactPageEditor — اطلاعات تماس
- ✅ LicensesPageEditor — مجوزها
- ✅ ادیتور SystemConstants — تنظیمات key-value
### Phase 16-17: موجودی و نهایی‌سازی
- ✅ صفحه موجودی — با MudAutocomplete برای انتخاب محصول
- ✅ ایجاد خودکار رکورد موجودی — هنگام ساخت محصول
- ✅ Hangfire InventorySync — ایجاد رکوردهای گمشده
- ⬜ Dark Mode — طراحی نشده (Phase آینده)
### Phase 18: بهبود UI ادمین (اسفند ۱۴۰۴)
- ✅ UserAutoComplete در ActivateClubDialog — جایگزین MudNumericField برای انتخاب کاربر
- ✅ فیلتر کاربر در صفحه ClubMembers — UserAutoComplete در تولبار جستجو
- ✅ نمایش نام کاربر در WalletManagementPage — TemplateColumn با UserName + ID
### Phase 8b: CRUD پکیج کامل (اسفند ۱۴۰۴)
- ✅ CreateDialog: اضافه ۱۲ فیلد جدید — SortOrder, ActivationFee, DiscountMultiplier, MagicWallet*, MaxBalancesPerLeg, MaxNetworkLevel, IsActive, IsBasePackage, SupportsDirectPurchase, SupportsDayaPurchase
- ✅ UpdateDialog: همان ۱۲ فیلد جدید — ایجاد فرم کامل ادمین
- ✅ PackageMainPage Grid: ۴ ستون جدید — قیمت (N0), ترتیب, وضعیت (فعال/غیرفعال chip), نوع (پایه/عادی chip)
- ✅ فیکس `HasPurchasedGoldenPackage``HasPurchasedPackage` — UserNetworkInfo.razor
- ✅ NuGet bump 0.0.184 → 0.0.186 + local feed source
---
## ۲. FrontOffice — فازها (95% کامل)
### UI Modernization Phase 1-3
- ✅ ارتقا به MudBlazor v8 — همه کامپوننت‌ها
- ✅ MainLayout جدید — Header + Footer + RTL
- ✅ AuthLayout — صفحات Login/Register
- ✅ Landing Page — Hero + Features + Counter + CTA
- ✅ اصلاح انیمیشن Counter — linear interpolation
### فروشگاه (Phase 4-5)
- ✅ Regular Store — لیست محصولات با Lazy Load (12/page)
- ✅ Discount Store — لیست با Lazy Load + hybrid payment
- ✅ ProductCard مشترک — تصویر مربعی + قیمت + دکمه
- ✅ CategoryFilter — فیلتر دسته‌بندی sidebar
- ✅ ProductDetail — جزئیات + تصویر بزرگ + سبد
- ✅ سبد خرید — Regular + Discount جداگانه
- ✅ Checkout — پرداخت ZarinPal + ترکیبی
### باشگاه (Phase 6)
- ✅ داشبورد باشگاه — ۳ کیف‌پول + آمار
- ✅ نمای درخت شبکه — باینری بصری
- ✅ امضای قرارداد — OTP + scroll-to-bottom
- ✅ صفحه Chatika — چت AI
- ✅ کیف‌پول جادویی — MagicWallet.razor + فرم شارژ + پروگرس‌بار سقف
### فعال‌سازی درگاه پرداخت (اسفند ۱۴۰۴)
- ✅ دکمه پرداخت شارژ کیف‌پول اعتباری — ChargeDiscountWallet.razor فعال شد (حذف «بزودی»)
- ✅ دکمه پرداخت شارژ کیف‌پول جادویی — MagicWallet.razor فعال شد (حذف «بزودی»)
- ✅ دکمه‌های پرداخت مستقیم خرید پکیج — Index.razor هر دو شاخه فعال شدند (حذف «بزودی»)
### Phase 8a+8c: Checkout + Package Pages (اسفند ۱۴۰۴)
- ✅ Checkout wire-up — مهاجرت به `CustomerPurchasePackageAsync` (حذف dead code قدیمی)
- ✅ PackageDetail: `GetPackageAsync``GetCustomerPackageDetailsAsync` — features/specs از API (نه hardcoded)
- ✅ Packages.razor: un-exclude از build + dynamic feature bullets از `CustomerPackageModel`
- ✅ PackageService: `PackageDto` غنی‌شده با ۸ فیلد جدید + `GetUserPackageStatusAsync` متصل به RPC واقعی
- ✅ NuGet bump 0.0.182 → 0.0.186 + local feed source
- ✅ فیکس GwUrl پروداکشن — تصحیح از cms.kbs1.ir به cms.kbs2.ir
### محتوا و ناوبری
- ✅ بلاگ — لیست + جزئیات + pagination
- ✅ صفحات سایت — About, Contact, FAQ, Terms, Privacy, Licenses
- ✅ ناوبری Auth-Aware — مسیردهی بر اساس نقش
- ✅ Home → Club Dashboard / Store بر اساس وضعیت
- ⬜ Mobile Responsive — Phase 7 (برنامه‌ریزی‌شده)
- ⬜ PWA — نیاز به Service Worker
- ⬜ Bottom Navigation (موبایل) — طراحی نشده
---
## ۳. CMS Core (97% کامل)
### ساختار و معماری
- ✅ CQRS با MediatR — Commands + Queries + Handlers
- ✅ gRPC Services — ۱۱ سرویس اصلی
- ✅ EF Core 9 — Migrations + Seeding
- ✅ Hangfire — ۴ Background Job
- ✅ JWT Authentication — Claims-based
- ✅ ICurrentUserService — جداسازی Admin/Customer
### محصولات و فروشگاه
- ✅ Product CRUD — با auto-inventory
- ✅ Category CRUD — درختی
- ✅ Inventory management — auto-create + sync job
- ✅ GetProductsPaged — با PaginationState
- ✅ File upload/download — streaming gRPC
### مالی و پرداخت
- ✅ ZarinPal Integration — IPG + Verify
- ✅ PYMS Service — سرویس مرکزی پرداخت
- ✅ ۳ Wallet System — Balance, Network, Discount
- ✅ Transaction logging — همه تراکنش‌ها
### باشگاه
- ✅ Binary Tree — SP_GetNetworkTree
- ✅ Weekly Balance Calculation — sp_CalculateWeeklyBalances
- ✅ Commission Pool — sp_CalculateWeeklyCommissionPool
- ✅ Contract System — OTP + acceptance
- ✅ Club Features — activate/deactivate
- ✅ DayaLoan Integration — Hangfire + Polly
### 🪄 کیف‌پول جادویی (Magic Wallet) — فاز 1-6 ✅
- ✅ فاز ۱: WalletMode enum + UserWallet fields + ClubMembershipCycle entity + TransactionType (14,15)
- ✅ فاز ۲: Trigger ورود/خروج Magic در SubmitShopBuyOrder + ActivateClubMembership Cycle
- ✅ فاز ۳: ChargeMagicWallet + VerifyMagicWalletCharge + HTTP callback + gRPC RPCs
- ✅ فاز ۴: فیلتر Magic از کمیسیون (C# + SP) + تاریخ Cycle
- ✅ فاز ۵: MagicWallet.razor UI + WalletService + تایل داشبورد
- ✅ فاز ۶: محدودیت دایا بعد از دور اول + محدودیت فعالسازی در حالت Magic
### VAT
- ✅ اصلاح VAT از 9% به 10% در همه فایل‌ها (VatCalculator, UserOrderService, Checkout, VATService)
### فعال‌سازی درگاه و تنظیمات محیطی (اسفند ۱۴۰۴)
- ✅ تنظیم MerchantId جدید ZarinPal — `4225d555-5fa9-4df0-9b61-1ce152cbbba8`
- ✅ تنظیمات محیطی — Staging: UseSandbox=true / Production: UseSandbox=false
- ✅ فعال‌سازی MagicWalletCycleSeed در Production
- ✅ تنظیم Kestrel Http2 + Seq logging برای Production
- ✅ بهبود user_name در proto — فیلد جدید در GetAllUserWalletByFilterResponseModel
- ✅ اغنای پاسخ UserWalletService — join با جدول Users برای نمایش نام کاربر
- ✅ ارتقای Proto NuGet به نسخه 0.0.183
### محتوا
- ✅ Blog CRUD — با pagination
- ✅ SitePage Settings — JSON typed
- ✅ SystemConfigurations — key-value
- ⬜ Product Bundle — طراحی‌شده، پیاده‌سازی نشده
- ⬜ Manual Payment — طراحی‌شده، پیاده‌سازی نشده
- ⬜ API Rate Limiting — برنامه‌ریزی‌شده
---
## ۴. Deployment و زیرساخت (95% کامل)
- ✅ Docker Compose — تمام سرویس‌ها
- ✅ Dockerfile (CMS) — multi-stage build
- ✅ K8s Manifests — Deployment + Service + Ingress
- ✅ CI/CD Pipeline — Gitea Actions
- ✅ Nexus Repository — NuGet + Docker proxy
- ✅ Offline Deployment — کامل با اسکریپت‌ها
- ✅ Proto Package — NuGet packaging + distribution
- ✅ Health Check scripts — K8s + service
- ✅ Mirror Configuration — Docker + NuGet
- ✅ Base Image Caching — pull + save + load
- ✅ مرج پروداکشن CMS — حل conflict در appsettings.Production.json + حذف migration تکراری u21
- ✅ مرج پروداکشن FrontOffice — ۲۱ فایل، ۴۰۰ insertion + فیکس GwUrl
- ✅ مرج پروداکشن BackOffice — ۳۶ فایل، بدون conflict
- ✅ اجرای Migration روی پروداکشن — ExpandDiscountProductFullInformation روی DB کی‌بی‌اس
- ⬜ Monitoring (Prometheus/Grafana) — برنامه‌ریزی‌شده
- ⬜ Log Aggregation (ELK/Seq) — Seq تنظیم شده در Production (http://seq-svc:5341)
---
## ۵. Migration (100% کامل)
- ✅ FrontOffice REST → gRPC — همه سرویس‌ها migrate شدند
- ✅ BackOffice REST → gRPC — همه سرویس‌ها migrate شدند
- ✅ BFF حذف — یک لایه کمتر در deployment
- ✅ API Gateway (Ocelot) حذف — K8s Ingress جایگزین
- ✅ Data Migration — Users, Products, Orders, Club
- ✅ Geography Seeder — ۳۱ استان + ۱۲۰۰ شهر
- ✅ SQL Scripts — ۱۴ اسکریپت مهاجرت اجرا شدند
- ✅ Proto Package Unification — یک package مشترک
- ✅ Binary Tree Reconstruction — از سیستم قدیم
---
## ۶. مستندات (100% کامل)
- ✅ ایجاد totalDoc repository — مخزن مرکزی docs
- ✅ جمع‌آوری ۵۳ فایل از ۵ مخزن مختلف
- ✅ تجمیع به ۱۵ فایل ساختارمند — Business + Technical + Overview
- ✅ Index و Cross-reference — نقشه ارتباطات
- ✅ واژه‌نامه و استانداردها
- ✅ نقشه راه آینده
---
## ۷. تحول سیستم پکیج‌بیس (Package-Based Transformation) — 90%
> 📦 تبدیل سیستم تک‌پکیجی hardcoded به معماری چند‌پکیجی داینامیک
> مرجع: [BIZ-PACKAGE-BASED-SYSTEM.md](../business/BIZ-PACKAGE-BASED-SYSTEM.md) | [PACKAGE-TRANSFORMATION-TASKS.md](../roadmap/PACKAGE-TRANSFORMATION-TASKS.md)
### Phase 0 — فیکس باگ‌های فوری ✅ (`8b9c317`, `fe3edd1`)
- ✅ B1: DiscountBalance شارژ نمی‌شد در VerifyGoldenPackagePurchase — اضافه `DiscountBalance += Amount × 2` + WalletChangeLog
- ✅ B2: UserPackagePurchase ساخته نمی‌شد در VerifyGoldenPackagePurchase — ساخت record بعد verify
- ✅ B3: UserPackagePurchase ساخته نمی‌شد در VerifyPackagePurchase — ساخت record
- ✅ B4: UserPackagePurchase ساخته نمی‌شد در VerifyBasePackagePayment — ساخت record
- ✅ B6: EXIT Magic Mode — ریست PackagePurchaseMethod + بستن چرخه فعلی
### Phase 1 — زیرساخت Domain ✅ (`ae92ab8`)
- ✅ T1.1: Package Entity — ۱۱ فیلد جدید (SortOrder, IsActive, IsBasePackage, DiscountMultiplier, MagicWalletMultiplier, ...)
- ✅ T1.2: PackageFeature Entity — رابطه M:N بین Package و ClubFeature
- ✅ T1.3: ClubMembership — ۴ فیلد First/Last Activation + PackageId
- ✅ T1.4-T1.6: اضافه PackageId به ClubMembershipCycle, WeeklyCommissionPool, UserCommissionPayout, NetworkWeeklyBalance, UserWalletChangeLog
- ✅ T1.7: علامت‌گذاری ۹ SystemConstants به‌عنوان [Obsolete]
- ✅ T1.8: EF Configurations — Index, Precision, FK relations
### Phase 1.5 — Migration + Data Seed ✅ (`a9cd2fd`)
- ✅ EF Migration `AddPackageBasedSystem` — ستون‌ها + جداول + ایندکس‌ها
- ✅ Golden Package Seed (Id=1) — Price=56M, ActivationFee=25.2M, DiscountMultiplier=2.0, MagicWalletMultiplier=2.5
- ✅ Data Backfill — تمام رکوردهای موجود → PackageId=1
- ✅ فیکس nullable DateTime/long در ClubMembership
- ✅ فیکس Shadow FK PackageId1
### Phase 2 — منطق کسب‌وکار ✅ (`8e5c7c5`)
- ✅ T2.1: ActivateClubMembership — ActivationFee از Package entity
- ✅ T2.2: AcceptClubMembershipContract — Package features از DB
- ✅ T2.3: CalculateWeeklyBalances — MaxBalancesPerLeg per-package
- ✅ T2.4: ProcessUserPayouts — PackageId tracking
- ✅ T2.5: DayaLoans — Package.Price بجای hardcoded
- ✅ T2.6: ManualPayment — Package.Price بجای hardcoded
- ✅ T2.7: InitiateBasePackage/VerifyBasePackage — Package-based
- ✅ T2.8: ChargeMagicWallet/VerifyMagicWalletCharge — MagicWalletMultiplier per-package
- ✅ T2.9: OrmCommissionCalculationStrategy — MaxBalancesPerLeg/MaxNetworkLevel per-package
- ✅ T2.10: ConfigurationService/UserOrderService/UserWalletService — Package reads
-**نتیجه:** صفر مصرف SystemConstants deprecated باقی مانده
### Phase 3 — بازسازی لایه Package ✅ (`ccb938e`)
- ✅ Proto: ۱۱ فیلد جدید در ۵ message (CreateNewPackageRequest, UpdatePackageRequest, GetPackageResponse, ...)
- ✅ GetUserPackageStatus — پیاده‌سازی (قبلاً NotImplementedException بود!)
- ✅ CustomerVerifyPackagePurchase — شارژ کیف‌پول اضافه شد (قبلاً missing بود!)
- ✅ VerifyGoldenPackagePurchase — `package.DiscountMultiplier` بجای hardcoded ×2
- ✅ GetAllPackageByFilter — فیلتر IsDeleted
- ✅ GetCustomerPackages — فیلتر IsDeleted + IncludeInactive + SortOrder
- ✅ GetCustomerPackageDetails — PackageFeatures از DB
- ✅ GetCustomerPurchaseHistory — Include Transaction
- ✅ UpdatePackageCommand — ۱۲ فیلد جدید
### Phase 4 — تکمیل CRUD + Legacy Fixes ✅ (`0002a5a`)
- ✅ CreateNewPackageCommand — ۱۲ فیلد جدید با default‌های مناسب
- ✅ GetPackageResponseDto — ۱۲ فیلد جدید (Mapster auto-map)
- ✅ GetAllPackageByFilterResponseModel — ۱۲ فیلد جدید
- ✅ PurchaseGoldenPackage — حذف Title string match شکننده (`"طلایی"/"golden"`) → `IsDeleted/IsActive/SupportsDirectPurchase`
- ✅ VerifyPackagePurchase — حذف hardcoded `order.Amount × 2``package.DiscountMultiplier` از DB
### Phase 5 — پورسانت per-package + پاکسازی golden ✅ (`607f791`, `7176fe4`)
- ✅ ORM Commission: per-user-package calculation via `ClubMembership.LastPackageId`
- userPackageMap، per-user maxBalancesPerLeg/maxNetworkLevel
- Carryover keyed by (UserId, PackageId) tuple
- ✅ SP Commission: loop over packages، pass `@PackageId/@InputMaxBalancesPerLeg/@InputMaxNetworkLevel`
- ✅ sp_CalculateWeeklyBalances: ۳ پارامتر جدید، فیلتر `cm.LastPackageId = @PackageId`، ستون PackageId در INSERT
- ✅ Fix: `cm.PackageId``cm.LastPackageId` — match actual DB column name
- ✅ Fix golden/طلایی string refs in user-facing messages (ActivateClubMembership)
- ✅ Rename `HasPurchasedGoldenPackage``HasPurchasedPackage` (DTO + Handler + Proto + Mapping)
### Phase 6 — Deprecation cleanup + ConfigurationService ✅ (`d19c569`)
- ✅ Mark `PurchaseGoldenPackage`/`VerifyGoldenPackagePurchase` RPCs as `deprecated = true`
- ✅ Mark `InitiateBasePackagePayment`/`VerifyBasePackagePayment` RPCs as `deprecated = true`
- ✅ Remove deprecated SystemConstants from `GetAllAsDict`/`GetAllWithDescriptions` helpers
- ✅ Add MagicWallet per-package values to ConfigurationService (Multiplier, MaxDeposit, MaxCredit)
- ✅ تأیید: صفر رفرنس فعال به ۹ SystemConstants منسوخ — dead code آماده حذف
### Phase 7 — UI ⬜ (در انتظار)
- ⬜ FrontOffice: کاشی‌های داینامیک پکیج
- ⬜ FrontOffice: MyPackages + re-purchase
- ⬜ FrontOffice: Commission Dashboard per-package
- ⬜ BackOffice: Package CRUD UI
- ⬜ BackOffice: فیلتر پکیج در گزارش‌ها
---
## ۸. Timeline (جدول زمانی)
| زمان | رویداد | درصد پروژه |
|------|--------|-----------|
| مهر ۱۴۰۳ | شروع پروژه، معماری CMS | 10% |
| آبان ۱۴۰۳ | CQRS + gRPC + EF Core | 20% |
| آذر ۱۴۰۳ | باشگاه + درخت باینری + کمیسیون | 35% |
| دی ۱۴۰۳ | فروشگاه عادی + پرداخت از کیف‌پول | 45% |
| بهمن ۱۴۰۳ | فروشگاه اعتباری + وام دایا | 55% |
| اسفند ۱۴۰۳ (هفته ۱) | UI Modernization Phase 1-3 | 65% |
| اسفند ۱۴۰۳ (هفته ۲) | Site Pages + BackOffice audit | 75% |
| اسفند ۱۴۰۳ (هفته ۳) | Inventory + Lazy Load + Images | 85% |
| اسفند ۱۴۰۳ (هفته ۴) | مستندات + نهایی‌سازی | 95% |
| اسفند ۱۴۰۴ (هفته ۱-۲) | 🪄 کیف‌پول جادویی (فاز 1-6) + اصلاح VAT 10% | 96% |
| اسفند ۱۴۰۴ (هفته ۳) | 🚀 فعال‌سازی درگاه + بهبود UI ادمین + مرج پروداکشن | 97% |
| اسفند ۱۴۰۴ (هفته ۴) | 📦 تحول پکیج‌بیس فاز ۰-۶ (Domain → Migration → Business → Package → CRUD → Commission per-pkg → Deprecation) | 97% |