diff --git a/.gitignore b/.gitignore
index 4d679c7..0260adb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,7 +10,7 @@
*.user
*.userosscache
*.sln.docstates
-
+
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
diff --git a/docs/ADMIN-SERVICES.md b/docs/ADMIN-SERVICES.md
new file mode 100644
index 0000000..bad2c63
--- /dev/null
+++ b/docs/ADMIN-SERVICES.md
@@ -0,0 +1,387 @@
+# سرویسهای BackOffice (پنل ادمین)
+
+این سند تمام سرویسهایی را که **BackOffice** (فرانت ادمین) به **CMS** از طریق gRPC Gateway (`GwUrl`) فراخوانی میکند، به ترتیب **Use Case** فهرست میکند.
+
+- **مسیر wrapper سرویسها:** `BackOffice/src/BackOffice/Services/`
+- **ثبت gRPC:** `BackOffice/src/BackOffice/Common/Configure/ConfigureService.cs`
+- **تاریخ:** ۱۴۰۵/۰۳/۱۷
+
+---
+
+## ۱. ورود و احراز هویت ادمین
+
+| # | سرویس / متد | gRPC Contract | صفحه / کامپوننت | کاربرد |
+|---|-------------|---------------|-----------------|--------|
+| 1.1 | `OtpTokenContract.CreateNewOtpToken` | `OtpTokenContract` | `/Login/` (`LoginPage`) | ارسال OTP ورود ادمین |
+| 1.2 | `UserContract.VerifyOtpToken` | `UserContract` | `/VerifyCodePage/{Mobile}` | تأیید OTP و دریافت JWT |
+| 1.3 | `OtpTokenContract.CreateNewOtpToken` (resend) | `OtpTokenContract` | `/VerifyCodePage/{Mobile}` | ارسال مجدد OTP |
+| 1.4 | `AuthorizationService.HasPermissionAsync` | — (JWT Role/Claim) | `NavMenu`, صفحات محافظتشده | کنترل نمایش منو بر اساس نقش (فعلاً role-based، نه API) |
+| 1.5 | `AppTokenProvider` / `TokenHandler` | — (localStorage) | سراسری | attach کردن Bearer token به همه gRPC callها |
+
+---
+
+## ۲. داشبورد
+
+| # | سرویس / متد | gRPC Contract | صفحه / کامپوننت | کاربرد |
+|---|-------------|---------------|-----------------|--------|
+| 2.1 | `UserContract.GetAllUserByFilter` | `UserContract` | `/` (Index) | شمارش کاربران |
+| 2.2 | `ProductsContract.GetAllProductsByFilter` | `ProductsContract` | `/` | شمارش محصولات |
+| 2.3 | `PackageContract.GetAllPackageByFilter` | `PackageContract` | `/` | شمارش پکیجها |
+| 2.4 | `CategoryContract.GetAllCategoryByFilter` | `CategoryContract` | `/` | شمارش دستهبندیها |
+| 2.5 | `CommissionContract.GetAvailableWeeks` | `CommissionContract` | `/` | هفته جاری کمیسیون |
+| 2.6 | `CommissionContract.GetWeeklyCommissionPool` | `CommissionContract` | `/` | وضعیت pool هفته جاری |
+| 2.7 | `ClubMembershipContract.GetAllClubMemberships` | `ClubMembershipContract` | `/` | آمار اعضای باشگاه |
+| 2.8 | `UserOrderContract.GetAllUserOrderByFilter` | `UserOrderContract` | `/` | سفارشهای اخیر |
+| 2.9 | `IDiscountOrderService.GetOrdersAsync` | `DiscountOrderContract` | `Dashboard/DiscountShopWidget` | ویجت سفارشهای فروشگاه تخفیفی |
+| 2.10 | `CommissionContract.GetWithdrawalRequests` | `CommissionContract` | `NavMenu` | badge درخواستهای برداشت معلق |
+| 2.11 | `GlobalSearch` — `UserContract.GetAllUserByFilter` | `UserContract` | `MainLayout/GlobalSearch` | جستجوی سریع کاربر + ناوبری صفحات |
+
+---
+
+## ۳. مدیریت کاربران
+
+| # | سرویس / متد | gRPC Contract | صفحه / کامپوننت | کاربرد |
+|---|-------------|---------------|-----------------|--------|
+| 3.1 | `UserContract.GetAllUserByFilter` | `UserContract` | `/UserPage/`, `UserAutoComplete`, GlobalSearch | لیست/جستجوی کاربران |
+| 3.2 | `UserContract.DeleteUser` | `UserContract` | `/UserPage/` | حذف کاربر |
+| 3.3 | Export users | `UserContract.GetAllUserByFilter` | `/UserPage/` | خروجی CSV کاربران |
+
+---
+
+## ۴. نقشها و دسترسیها
+
+| # | سرویس / متد | gRPC Contract | صفحه / کامپوننت | کاربرد |
+|---|-------------|---------------|-----------------|--------|
+| 4.1 | `RoleContract.GetAllRoleByFilter` | `RoleContract` | `/RolePage/`, `RoleAutoComplete` | لیست نقشها |
+| 4.2 | `RoleContract.CreateNewRole` | `RoleContract` | `Role/Components/CreateDialog` | ایجاد نقش |
+| 4.3 | `RoleContract.UpdateRole` | `RoleContract` | `Role/Components/UpdateDialog` | ویرایش نقش |
+| 4.4 | `RoleContract.DeleteRole` | `RoleContract` | `/RolePage/` | حذف نقش |
+| 4.5 | `RolePermissionsDialog` | — (UI فقط) | `/RolePage/` | ویرایش permissionها — **هنوز به API وصل نشده** |
+
+---
+
+## ۵. نقش کاربر و آدرس
+
+| # | سرویس / متد | gRPC Contract | صفحه / کامپوننت | کاربرد |
+|---|-------------|---------------|-----------------|--------|
+| 5.1 | `UserRoleContract.GetAllUserRoleByFilter` | `UserRoleContract` | `/UserRolePage/{UserId}` | نقشهای یک کاربر |
+| 5.2 | `UserRoleContract.CreateNewUserRole` | `UserRoleContract` | CreateDialog, `UserRoleDialog` | تخصیص نقش |
+| 5.3 | `UserRoleContract.UpdateUserRole` | `UserRoleContract` | UpdateDialog | ویرایش نقش کاربر |
+| 5.4 | `UserRoleContract.DeleteUserRole` | `UserRoleContract` | `/UserRolePage/{UserId}` | حذف نقش کاربر |
+| 5.5 | `RoleContract.GetAllRoleByFilter` | `RoleContract` | `UserRoleDialog`, `RoleTitleColumn` | نمایش عنوان نقش |
+| 5.6 | `UserAddressContract.GetAllUserAddressByFilter` | `UserAddressContract` | `/UserAddressPage/{UserId}` | آدرسهای کاربر |
+| 5.7 | `UserAddressContract.CreateNewUserAddress` | `UserAddressContract` | CreateDialog | ثبت آدرس |
+| 5.8 | `UserAddressContract.UpdateUserAddress` | `UserAddressContract` | UpdateDialog | ویرایش آدرس |
+| 5.9 | `UserAddressContract.DeleteUserAddress` | `UserAddressContract` | `/UserAddressPage/{UserId}` | حذف آدرس |
+
+---
+
+## ۶. پکیجها
+
+| # | سرویس / متد | gRPC Contract | صفحه / کامپوننت | کاربرد |
+|---|-------------|---------------|-----------------|--------|
+| 6.1 | `PackageContract.GetAllPackageByFilter` | `PackageContract` | `/PackagePage/`, `PackageSelect`, ManualPaymentDialog | لیست پکیجها |
+| 6.2 | `PackageContract.CreateNewPackage` | `PackageContract` | `Package/Components/CreateDialog` | ایجاد پکیج |
+| 6.3 | `PackageContract.UpdatePackage` | `PackageContract` | `Package/Components/UpdateDialog` | ویرایش پکیج |
+| 6.4 | `PackageContract.DeletePackage` | `PackageContract` | `/PackagePage/` | حذف پکیج |
+| 6.5 | `ConfigurationContract.GetClubFeatures` | `ConfigurationContract` | Create/Update Dialog | انتخاب featureهای باشگاه مرتبط با پکیج |
+
+---
+
+## ۷. فروشگاه اصلی — محصولات و دستهبندی
+
+| # | سرویس / متد | gRPC Contract | صفحه / کامپوننت | کاربرد |
+|---|-------------|---------------|-----------------|--------|
+| 7.1 | `ProductsContract.GetAllProductsByFilter` | `ProductsContract` | `/ProductsPage/`, BulkEdit, AutoComplete | لیست محصولات |
+| 7.2 | `ProductsContract.CreateNewProducts` | `ProductsContract` | `Products/Components/CreateDialog` | ایجاد محصول |
+| 7.3 | `ProductsContract.UpdateProducts` | `ProductsContract` | UpdateDialog | ویرایش محصول |
+| 7.4 | `ProductsContract.DeleteProducts` | `ProductsContract` | `/ProductsPage/` | حذف محصول |
+| 7.5 | `ProductsContract.ToggleProductStatus` | `ProductsContract` | `/ProductsPage/`, BulkEdit | فعال/غیرفعال |
+| 7.6 | `ProductsContract.BulkUpdateProductPrices` | `ProductsContract` | `/ProductsBulkEditPage/` | ویرایش گروهی قیمت |
+| 7.7 | `ProductsContract.GetProductGallery` / Add/Remove Image | `ProductsContract` | `GalleryDialog` | گالری تصاویر محصول |
+| 7.8 | `ProductsContract.GetProducts` / `UpdateProductCategories` | `ProductsContract` | `/ProductCategoriesPage/{ProductId}` | drag-drop دستهبندی محصول |
+| 7.9 | `CategoryContract.GetAllCategoryByFilter` | `CategoryContract` | `/CategoryPage/`, AutoComplete | لیست دستهها |
+| 7.10 | `CategoryContract.GetCategory` / Create / Update / Delete | `CategoryContract` | CategoryMainPage, Dialogs | CRUD دستهبندی |
+| 7.11 | `ProductsContract.GetProductsForCategory` / `UpdateCategoryProducts` | `ProductsContract` | `/CategoryProductsPage/{CategoryId}` | drag-drop محصولات یک دسته |
+
+---
+
+## ۸. انبارداری (Inventory)
+
+| # | سرویس / متد | gRPC Contract | صفحه / کامپوننت | کاربرد |
+|---|-------------|---------------|-----------------|--------|
+| 8.1 | `InventoryContract.GetAllWarehouses` | `InventoryContract` | `/InventoryPage/`, Warehouses, LowStock | لیست انبارها |
+| 8.2 | `InventoryContract.GetAllInventoryItems` | `InventoryContract` | `/InventoryPage/` | موجودی کالا |
+| 8.3 | `InventoryContract.GetLowStockItems` | `InventoryContract` | `/InventoryPage/`, `/InventoryLowStockPage/` | اقلام کمموجود |
+| 8.4 | `InventoryContract.AddStock` | `InventoryContract` | `AddStockDialog` | ورود کالا به انبار |
+| 8.5 | `InventoryContract.AdjustStock` | `InventoryContract` | `AdjustStockDialog` | تعدیل موجودی |
+| 8.6 | `InventoryContract.RecordLoss` | `InventoryContract` | `RecordLossDialog` | ثبت ضایعات |
+| 8.7 | `InventoryContract.CreateWarehouse` | `InventoryContract` | `CreateWarehouseDialog` | ایجاد انبار |
+| 8.8 | `InventoryContract.UpdateInventorySettings` | `InventoryContract` | `InventorySettingsDialog` | تنظیمات انبار |
+| 8.9 | `InventoryContract.GetStockMovements` | `InventoryContract` | `/InventoryMovementsPage/` | تاریخچه جابجایی موجودی |
+
+---
+
+## ۹. سفارشهای فروشگاه اصلی
+
+| # | سرویس / متد | gRPC Contract | صفحه / کامپوننت | کاربرد |
+|---|-------------|---------------|-----------------|--------|
+| 9.1 | `UserOrderContract.GetAllUserOrderByFilter` | `UserOrderContract` | `/OrdersPage/`, `/UserOrderPage/{UserId}`, SalesReports | لیست سفارشها |
+| 9.2 | `UserOrderContract.GetUserOrder` | `UserOrderContract` | OrderDetailsDialog, Index | جزئیات سفارش |
+| 9.3 | `UserOrderContract.UpdateUserOrder` | `UserOrderContract` | UserOrderDetailsDialog, ChangeOrderStatus | ویرایش سفارش / tracking |
+| 9.4 | `UserOrderContract.UpdateOrderStatus` | `UserOrderContract` | ChangeOrderStatusDialog | تغییر وضعیت تحویل |
+| 9.5 | `UserOrderContract.CancelOrder` | `UserOrderContract` | CancelOrderDialog | لغو سفارش |
+| 9.6 | `UserOrderContract.DeleteUserOrder` | `UserOrderContract` | `/UserOrderPage/{UserId}` | حذف سفارش |
+| 9.7 | `UserOrderContract.ApplyDiscountToOrder` | `UserOrderContract` | ApplyDiscountDialog | اعمال تخفیف روی سفارش |
+
+---
+
+## ۱۰. پرداخت دستی و تراکنشها
+
+| # | سرویس / متد | gRPC Contract | صفحه / کامپوننت | کاربرد |
+|---|-------------|---------------|-----------------|--------|
+| 10.1 | `ManualPaymentContract.GetAllManualPayments` | `ManualPaymentContract` | `/payment/manual-payments` | لیست پرداختهای دستی |
+| 10.2 | `ManualPaymentContract.CreateManualPayment` | `ManualPaymentContract` | `ManualPaymentDialog` | ثبت پرداخت دستی (مثلاً Daya) |
+| 10.3 | `ManualPaymentContract.ApproveManualPayment` | `ManualPaymentContract` | ManualPayments, Dialog | تأیید پرداخت |
+| 10.4 | `ManualPaymentContract.RejectManualPayment` | `ManualPaymentContract` | ManualPayments, Dialog | رد پرداخت |
+| 10.5 | `/payment/transactions` | — | Transactions page | **TODO — هنوز به API وصل نشده** |
+
+---
+
+## ۱۱. کیف پول و تاریخچه
+
+| # | سرویس / متد | gRPC Contract | صفحه / کامپوننت | کاربرد |
+|---|-------------|---------------|-----------------|--------|
+| 11.1 | `UserWalletContract.GetAllUserWalletByFilter` | `UserWalletContract` | `/wallets` | لیست کیف پول کاربران |
+| 11.2 | `UserWalletHistoryContract.GetAllUserWalletHistoryByFilter` | `UserWalletHistoryContract` | `/wallets` (تب تاریخچه) | لاگ تغییرات کیف پول |
+
+---
+
+## ۱۲. قراردادهای کاربران
+
+| # | سرویس / متد | gRPC Contract | صفحه / کامپوننت | کاربرد |
+|---|-------------|---------------|-----------------|--------|
+| 12.1 | `UserContractContract.GetAllUserContractByFilter` | `UserContractContract` | `/contracts` | لیست قراردادهای امضاشده (اصلی / باشگاه) |
+| 12.2 | Download PDF | — (local JS) | `/contracts` | دانلود PDF قرارداد ذخیرهشده |
+
+---
+
+## ۱۳. کمیسیون و پاداش
+
+| # | سرویس / متد | gRPC Contract | صفحه / کامپوننت | کاربرد |
+|---|-------------|---------------|-----------------|--------|
+| 13.1 | `CommissionContract.GetAvailableWeeks` | `CommissionContract` | `/commission/dashboard`, WeekNumberPicker | انتخاب هفته |
+| 13.2 | `CommissionContract.GetWeeklyCommissionPool` | `CommissionContract` | `/commission/dashboard` | جزئیات pool هفتگی |
+| 13.3 | `CommissionContract.TriggerWeeklyCalculation` | `CommissionContract` | Dashboard, WorkerControl | اجرای دستی محاسبه هفتگی |
+| 13.4 | `CommissionContract.GetAllWeeklyPools` | `CommissionContract` | `/commission/reports` | گزارش poolهای هفتگی |
+| 13.5 | `CommissionContract.GetUserCommissionPayouts` | `CommissionContract` | `/commission/payouts` | payoutهای کاربران |
+| 13.6 | `CommissionContract.ProcessWithdrawal` | `CommissionContract` | UserPayouts, WithdrawalRequests | پردازش/واریز برداشت |
+| 13.7 | `CommissionContract.BulkCreditPayouts` | `CommissionContract` | `/commission/payouts` | واریز گروهی payoutها |
+| 13.8 | `CommissionContract.GetWithdrawalRequests` | `CommissionContract` | `/commission/withdrawals`, NavMenu | درخواستهای برداشت کاربران |
+| 13.9 | `CommissionContract.ApproveWithdrawal` | `CommissionContract` | WithdrawalRequests | تأیید درخواست برداشت |
+| 13.10 | `CommissionContract.RejectWithdrawal` | `CommissionContract` | WithdrawalRequests | رد درخواست برداشت |
+| 13.11 | `CommissionContract.GetWithdrawalReports` | `CommissionContract` | `/commission/withdrawal-reports` | گزارش برداشتها |
+| 13.12 | `CommissionContract.GetUserWeeklyBalances` | `CommissionContract` | `/network/balances` | گزارش بالانس هفتگی کاربران |
+| 13.13 | `CommissionContract.GetWorkerStatus` | `CommissionContract` | `/system/worker-control` | وضعیت worker محاسبه |
+| 13.14 | `CommissionContract.GetWorkerExecutionLogs` | `CommissionContract` | `/system/worker-control` | لاگ اجرای worker |
+
+---
+
+## ۱۴. شبکه فروش (MLM)
+
+| # | سرویس / متد | gRPC Contract | صفحه / کامپوننت | کاربرد |
+|---|-------------|---------------|-----------------|--------|
+| 14.1 | `NetworkMembershipContract.GetNetworkTree` | `NetworkMembershipContract` | `/network/tree` | درخت شبکه (admin view) |
+| 14.2 | `NetworkMembershipContract.GetUserNetwork` | `NetworkMembershipContract` | `/network/user-info/{UserId}` | اطلاعات شبکه یک کاربر |
+| 14.3 | `NetworkMembershipContract.GetNetworkMembershipHistory` | `NetworkMembershipContract` | UserNetworkInfo | تاریخچه عضویت شبکه |
+| 14.4 | `NetworkMembershipContract.ChangeNetworkParent` | `NetworkMembershipContract` | `ChangeParentDialog` | تغییر والد در درخت |
+| 14.5 | `NetworkMembershipContract.GetNetworkStatistics` | `NetworkMembershipContract` | `/network/statistics` | آمار کلی شبکه (admin) |
+
+---
+
+## ۱۵. باشگاه مشتریان
+
+| # | سرویس / متد | gRPC Contract | صفحه / کامپوننت | کاربرد |
+|---|-------------|---------------|-----------------|--------|
+| 15.1 | `ClubMembershipContract.GetAllClubMemberships` | `ClubMembershipContract` | `/club/members`, Index | لیست اعضا |
+| 15.2 | `ClubMembershipContract.ActivateClubMembership` | `ClubMembershipContract` | `ActivateClubDialog` | فعالسازی دستی عضویت |
+| 15.3 | `ClubMembershipContract.DeactivateClubMembership` | `ClubMembershipContract` | `DeactivateClubDialog` | غیرفعالسازی |
+| 15.4 | `ClubMembershipContract.GetClubMembershipHistory` | `ClubMembershipContract` | `MemberDetailsDialog` | تاریخچه عضویت |
+| 15.5 | `ClubMembershipContract.GetClubStatistics` | `ClubMembershipContract` | `/club/statistics` | آمار باشگاه |
+| 15.6 | `ConfigurationContract.GetClubFeatures` | `ConfigurationContract` | `/club/features` | لیست featureهای باشگاه |
+| 15.7 | `ClubMembershipContract.GetUserClubFeatures` | `ClubMembershipContract` | `/club/features` | featureهای یک کاربر |
+| 15.8 | `ClubMembershipContract.ToggleUserClubFeature` | `ClubMembershipContract` | `/club/features` | فعال/غیرفعال feature برای کاربر |
+
+---
+
+## ۱۶. فروشگاه تخفیفی (Discount Shop)
+
+| # | سرویس / متد | gRPC Contract | صفحه / کامپوننت | کاربرد |
+|---|-------------|---------------|-----------------|--------|
+| 16.1 | `IDiscountProductService` — CRUD | `DiscountProductContract` | `/discount-products` | مدیریت محصولات تخفیفی |
+| 16.2 | `IDiscountCategoryService` — CRUD | `DiscountCategoryContract` | `/discount-categories` | مدیریت دستهبندی تخفیفی |
+| 16.3 | `IDiscountOrderService.GetOrdersAsync` | `DiscountOrderContract.GetAllDiscountOrders` | `/discount-orders`, Dashboard widget | لیست سفارشها (admin) |
+| 16.4 | `IDiscountOrderService.GetByIdAsync` | `DiscountOrderContract` | OrderDetailsDialog | جزئیات سفارش |
+| 16.5 | `IDiscountOrderService.UpdateStatusAsync` | `DiscountOrderContract` | Orders page, OrderDetailsDialog | تغییر وضعیت پرداخت/ارسال |
+| 16.6 | `IDiscountOrderService.GetSalesReportAsync` | `DiscountOrderContract` | `/discount-sales-reports` | گزارش فروش |
+| 16.7 | `DiscountProductContract.GetDiscountProducts` | `DiscountProductContract` | `DiscountProductsAutoComplete` | autocomplete محصول |
+
+---
+
+## ۱۷. تگ محصولات
+
+| # | سرویس / متد | gRPC Contract | صفحه / کامپوننت | کاربرد |
+|---|-------------|---------------|-----------------|--------|
+| 17.1 | `ITagService.GetTagsAsync` | `TagContract` | `/tags` | لیست تگها |
+| 17.2 | `ITagService.CreateAsync` / `UpdateAsync` / `DeleteAsync` | `TagContract` | TagEditDialog, TagManagement | CRUD تگ |
+| 17.3 | `ITagService.GetProductTagsAsync` | `ProductTagContract` | AssignTagsDialog | تگهای یک محصول |
+| 17.4 | `ITagService.AssignToProductAsync` / `RemoveProductTagAsync` | `ProductTagContract` | AssignTagsDialog, Discount products | تخصیص/حذف تگ |
+
+---
+
+## ۱۸. پیامهای عمومی
+
+| # | سرویس / متد | gRPC Contract | صفحه / کامپوننت | کاربرد |
+|---|-------------|---------------|-----------------|--------|
+| 18.1 | `IPublicMessageService.GetMessagesAsync` | `PublicMessageContract` | `/public-messages` | لیست پیامها |
+| 18.2 | `IPublicMessageService.GetByIdAsync` | `PublicMessageContract` | PublicMessages | جزئیات |
+| 18.3 | `IPublicMessageService.CreateAsync` / `UpdateAsync` | `PublicMessageContract` | MessageFormDialog | ایجاد/ویرایش |
+| 18.4 | `IPublicMessageService.PublishAsync` / `ArchiveAsync` | `PublicMessageContract` | PublicMessages | انتشار/بایگانی |
+| 18.5 | `IPublicMessageService.DeleteAsync` | `PublicMessageContract` | PublicMessages | حذف |
+
+---
+
+## ۱۹. بلاگ
+
+| # | سرویس / متد | gRPC Contract | صفحه / کامپوننت | کاربرد |
+|---|-------------|---------------|-----------------|--------|
+| 19.1 | `IBlogPostService.GetAllAsync` | `BlogPostContract` | `/blog/posts` | لیست پستها |
+| 19.2 | `IBlogPostService.GetByIdAsync` | `BlogPostContract` | BlogPostEditDialog | جزئیات پست |
+| 19.3 | `IBlogPostService.CreateAsync` / `UpdateAsync` | `BlogPostContract` | BlogPostEditDialog | ایجاد/ویرایش |
+| 19.4 | `IBlogPostService.DeleteAsync` | `BlogPostContract` | BlogPostManagement | حذف |
+| 19.5 | `IBlogPostService.PublishAsync` / `ArchiveAsync` | `BlogPostContract` | BlogPostManagement | انتشار/بایگانی |
+| 19.6 | `IBlogCategoryService` — CRUD | `BlogCategoryContract` | `/blog/categories` | مدیریت دستهبندی بلاگ |
+
+---
+
+## ۲۰. مدیریت محتوای سایت
+
+| # | سرویس / متد | gRPC Contract | صفحه / کامپوننت | کاربرد |
+|---|-------------|---------------|-----------------|--------|
+| 20.1 | `ISitePageSettingsService.GetAllAsync` | `SitePageSettingsContract` | `/content/page-settings` | لیست صفحات (landing, about, contact, licenses) |
+| 20.2 | `ISitePageSettingsService.GetByKeyAsync` | `SitePageSettingsContract` | PageSettings dialogs | جزئیات یک صفحه |
+| 20.3 | `ISitePageSettingsService.SaveSettingsAsync` | `SitePageSettingsContract` | PageSettingsEditDialog | ذخیره hero + JSON تنظیمات |
+| 20.4 | `ISitePageSettingsService.SaveImageAsync` / `DeleteImageAsync` | `SitePageSettingsContract` | PageImagesDialog | مدیریت تصاویر گروهبندیشده |
+| 20.5 | `ISitePageService` — CRUD sections | `SitePageContract` | `/content/pages` | صفحات داینامیک قدیمی (section-based) |
+
+---
+
+## ۲۱. تنظیمات سیستم و سلامت
+
+| # | سرویس / متد | gRPC Contract | صفحه / کامپوننت | کاربرد |
+|---|-------------|---------------|-----------------|--------|
+| 21.1 | `ConfigurationContract.GetAllConfigurations` | `ConfigurationContract` | `/system/configuration` | خواندن key-value تنظیمات (کمیسیون، شبکه، باشگاه، VAT…) |
+| 21.2 | `ConfigurationContract.CreateOrUpdateConfiguration` | `ConfigurationContract` | `/system/configuration` | ذخیره تنظیمات |
+| 21.3 | `HealthContract.GetSystemHealth` | `HealthContract` | `/system/health` | وضعیت سلامت سرویسها |
+| 21.4 | `AlertsMonitoring` | — (mock) | `/system/alerts` | **TODO — API هشدار هنوز وصل نشده** |
+
+---
+
+## ۲۲. نسخه اپلیکیشن
+
+| # | سرویس / متد | gRPC Contract | صفحه / کامپوننت | کاربرد |
+|---|-------------|---------------|-----------------|--------|
+| 22.1 | `IAppVersionService.GetAllAsync` | `AppVersionContract` | `/settings/app-versions` | لیست نسخه FrontOffice/App |
+| 22.2 | `IAppVersionService.GetByNameAsync` | `AppVersionContract` | AppVersions | جزئیات یک app |
+| 22.3 | `IAppVersionService.UpdateAsync` | `AppVersionContract.UpdateAppVersion` | AppVersions dialog | بهروزرسانی نسخه + force update |
+
+---
+
+## ۲۳. کامپوننتهای مشترک (AutoComplete / Hub)
+
+| کامپوننت | Contract | کاربرد |
+|----------|----------|--------|
+| `UserAutoComplete` | `UserContract` | جستجوی کاربر در فرمها |
+| `ProductsAutoComplete` | `ProductsContract` | جستجوی محصول |
+| `CategoryAutoComplete` / MultiSelect | `CategoryContract` | انتخاب دسته |
+| `PackageSelect` | `PackageContract` | انتخاب پکیج |
+| `WeekNumberPicker` | `CommissionContract` | انتخاب هفته |
+| `DiscountProductsAutoComplete` | `DiscountProductContract` | جستجوی محصول تخفیفی |
+| Hub pages (`ClubHub`, `DiscountShopHub`, `SystemHub`, `OrdersHub`, `BlogHub`) | — | مسیریابی tab-based؛ RPC در child component |
+
+---
+
+## ۲۴. سرویسهای ثبتشده ولی بدون استفاده / ناقص
+
+| سرویس / صفحه | وضعیت |
+|--------------|--------|
+| `IBlogPostImageService` (`BlogPostImageContract`) | ثبت در DI؛ **هیچ صفحهای inject نمیکند** |
+| `/payment/transactions` | UI آماده؛ **LoadData خالی — API وصل نشده** |
+| `RolePermissionsDialog` | UI permission؛ **ذخیره در backend TODO** |
+| `AuthorizationService` | فقط JWT role؛ **Permission API از CMS/BFF TODO** |
+| `/system/alerts` | داده mock؛ **AlertContract وجود ندارد** |
+
+---
+
+## نمودار جریان ورود ادمین
+
+```mermaid
+flowchart LR
+ A[LoginPage] -->|CreateNewOtpToken| B[SMS OTP]
+ B --> C[VerifyCodePage]
+ C -->|VerifyOtpToken| D[JWT in localStorage]
+ D --> E[All gRPC via TokenHandler]
+```
+
+---
+
+## فهرست gRPC Contractهای فعال BackOffice
+
+| Contract | Wrapper / استفاده مستقیم |
+|----------|---------------------------|
+| `OtpTokenContract` | Login |
+| `UserContract` | Login, Users, Dashboard, Search |
+| `RoleContract` | Roles, UserRoles |
+| `UserRoleContract` | UserRole pages |
+| `UserAddressContract` | UserAddress pages |
+| `PackageContract` | Packages, ManualPayment |
+| `ProductsContract` | Products, Categories drag-drop |
+| `CategoryContract` | Categories |
+| `UserOrderContract` | Orders |
+| `ManualPaymentContract` | Manual payments |
+| `UserWalletContract` | Wallet management |
+| `UserWalletHistoryContract` | Wallet change log |
+| `UserContractContract` | Signed contracts |
+| `CommissionContract` | Commission, Network balances, Worker |
+| `NetworkMembershipContract` | Network tree/info |
+| `ClubMembershipContract` | Club members/features |
+| `ConfigurationContract` | System config, Club features, Package |
+| `DiscountProductContract` | DiscountProductService |
+| `DiscountCategoryContract` | DiscountCategoryService |
+| `DiscountOrderContract` | DiscountOrderService |
+| `TagContract` / `ProductTagContract` | TagService |
+| `PublicMessageContract` | PublicMessageService |
+| `InventoryContract` | Inventory pages |
+| `BlogPostContract` | BlogPostService |
+| `BlogCategoryContract` | BlogCategoryService |
+| `BlogPostImageContract` | BlogPostImageService *(unused)* |
+| `SitePageSettingsContract` | SitePageSettingsService |
+| `SitePageContract` | SitePageService |
+| `AppVersionContract` | AppVersionService |
+| `HealthContract` | Health dashboard |
+
+---
+
+## مقایسه با FrontOffice
+
+| موضوع | FrontOffice (مشتری) | BackOffice (ادمین) |
+|-------|----------------------|-------------------|
+| Auth | OTP + JWT (UserContract) | OTP + JWT (همان flow) |
+| Orders | Customer RPC | Admin filter + status management |
+| Discount Shop | User orders + checkout | Full CRUD + admin order management |
+| Commission | Read-only (my payouts) | Full admin (calculation, approval, reports) |
+| Network | My tree only | Full tree + change parent |
+| Content | Read page settings | Edit page settings + blog + public messages |
+| Wallet | My balances | All users wallet + history log |
+
+مرجع مشابه برای فرانت مشتری: [`FrontOffice/docs/CUSTOMER-SERVICES.md`](../FrontOffice/docs/CUSTOMER-SERVICES.md)
diff --git a/src/BackOffice/BackOffice.csproj b/src/BackOffice/BackOffice.csproj
index a40a96f..ff82465 100644
--- a/src/BackOffice/BackOffice.csproj
+++ b/src/BackOffice/BackOffice.csproj
@@ -140,7 +140,7 @@
-
+
diff --git a/src/BackOffice/Pages/Wallet/WalletManagementPage.razor b/src/BackOffice/Pages/Wallet/WalletManagementPage.razor
index fce4621..7b6fc1d 100644
--- a/src/BackOffice/Pages/Wallet/WalletManagementPage.razor
+++ b/src/BackOffice/Pages/Wallet/WalletManagementPage.razor
@@ -125,6 +125,16 @@
@context.Item.CurrentNetworkBalance.ToString("N0")
+
+
+ @context.Item.ChangeDiscountValue.ToString("N0")
+
+
+
+
+ @context.Item.CurrentDiscountBalance.ToString("N0")
+
+
@(context.Item.RefrenceId?.ToString() ?? "—")