Files
docs/cms/GRPC-SERVICES-AUDIT.md
T
masoodafar-web 01244f426e docs: package-based transformation — complete roadmap + UX impact + feature backlog
New documents:
- roadmap/FEATURE-BACKLOG.md: 12 kept RPCs → feature tasks with priority,
  target pages, and time estimates (F1-F12)
- roadmap/PACKAGE-TRANSFORMATION-UX.md: UX impact analysis —
  before/after wireframes for 19 pages (10 FO + 9 BO),
  customer + admin experience changes, future needs prediction
- roadmap/PACKAGE-TRANSFORMATION-TASKS.md: step-by-step implementation
  plan (6 phases, ~13 day critical path), atomic tasks with
  code diffs, dependency graph, test checklist

Updated:
- cms/GRPC-SERVICES-AUDIT.md: cross-references to new docs

Total: 998 lines of documentation covering:
- 12 RPC feature tasks prioritized by package-based relevance
- 19 page wireframes (before/after comparison)
- 39 transformation tasks broken into 6 phases
- 10 predicted future requirements (N1-N10)
- Risk analysis + rollback plan + calendar
2026-02-24 23:18:50 +03:30

220 lines
14 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.
# آدیت سرویس‌های gRPC — CMS
> تاریخ: ۱۴۰۴/۰۴
> آخرین بروزرسانی: ۱۴۰۴/۱۲/۰۶
> هدف: شناسایی RPCهایی که از هیچ‌کدام از فرانت‌ها (FrontOffice مشتری + BackOffice ادمین) فراخوانی نمی‌شوند + تصمیم‌گیری نگهداری vs آرشیو
---
## 📊 خلاصه آمار
| متریک | تعداد |
|--------|-------|
| کل فایل‌های proto | 43 (بدون google/) |
| کل سرویس‌های gRPC | 42 |
| **کل RPC متدها** | **342** |
| استفاده‌شده در FrontOffice | 92 |
| استفاده‌شده در BackOffice | 159 |
| **استفاده‌شده (مجموع یکتا)** | **217** |
| **استفاده‌نشده از فرانت‌ها** | **125** |
| ↳ استفاده‌شده داخلی CMS | 101 |
| ↳ **کد مُرده واقعی** | **24** |
---
## 🔴 بخش ۱ — تحلیل ۲۴ RPC مُرده: نگهداری vs آرشیو
### ✅ نگهداری (آینده‌نگرانه — ۱۲ عدد)
> این RPCها پیاده‌سازی کامل دارند و در نقشه‌راه آینده محصول کاربرد دارند.
| # | RPC | فایل Proto | کیفیت کد | دلیل نگهداری |
|---|-----|-----------|---------|-------------|
| 1 | `CustomerReorderPreviousOrder` | userorder.proto | ✅ **کامل** — آیتم‌های سفارش قبلی به سبد اضافه می‌شود | UX حیاتی: «تکرار سفارش قبلی» — فیچر رایج فروشگاهی، فقط نیاز به دکمه در FrontOffice |
| 2 | `CustomerTrackOrder` | userorder.proto | ✅ **کامل** — وضعیت + TrackingCode + DeliveryInfo | UX حیاتی: «ردیابی سفارش» — وقتی ارسال پستی فعال شود ضروری است |
| 3 | `CalculateOrderPV` | userorder.proto | ✅ **کامل** — PV هر آیتم + جمع کل | سیستم MLM: محاسبه PV (Point Value) سفارش — برای فاز بعدی کمیسیون بر اساس خرید |
| 4 | `GetInventorySummary` | inventory.proto | ✅ **کامل** — آمار تعداد + ارزش کل | داشبورد ادمین: خلاصه موجودی انبار — نیاز به کارت در BackOffice Dashboard |
| 5 | `GetStockValueReport` | inventory.proto | ✅ **کامل** — گزارش ارزش ریالی موجودی | گزارش مالی: ارزش دارایی انبار — برای حسابداری ضروری |
| 6 | `BulkAddStock` | inventory.proto | ✅ **کامل** — loop با error handling | عملیات انبوه: افزودن موجودی دسته‌ای — بعد از ورود کالای فیزیکی |
| 7 | `BulkUpdateProductStock` | products.proto | ✅ **کامل** — Set/Add/Subtract با error handling | عملیات انبوه: بروزرسانی دسته‌ای موجودی محصول |
| 8 | `GetConfigurationByKey` | configuration.proto | ✅ **کامل** — خواندن از SystemConstants | API مفید: دریافت یک تنظیم خاص بدون بارگذاری همه — performance بهتر |
| 9 | `UpdateCustomerSettings` | user.proto | ✅ **کامل** — Email/SMS/Push notifications | تنظیمات اعلان‌ها: وقتی پنل تنظیمات مشتری ساخته شود |
| 10 | `ChangeNetworkParent` | networkmembership.proto | ✅ **CQRS کامل** → MoveInNetworkCommand | مدیریت شبکه: جابجایی کاربر در درخت — ابزار ادمین ضروری |
| 11 | `AssignFeatureToMembership` | clubmembership.proto | ✅ **CQRS کامل** → AssignClubFeatureCommand | مدیریت عضویت: اختصاص فیچر به عضویت — برای فاز بسته‌بندی پویا |
| 12 | `GetLowStockProducts` | products.proto | ✅ **کامل** — فیلتر threshold + pagination | هشدار موجودی: مکمل GetLowStockItems — فیلتر ClubExclusive اضافه دارد |
### 🗑️ آرشیو (حذف امن — ۱۲ عدد)
> این RPCها یا stub خالی هستند، یا جایگزین بهتری دارند، یا هرگز ساخته نشدند.
| # | RPC | فایل Proto | وضعیت کد | دلیل آرشیو |
|---|-----|-----------|---------|-----------|
| 1 | `CreateNewFileInfo` | fms.proto | ❌ **۰ رفرنس** — هیچ Service/Handler ندارد | سرویس FMS هرگز طراحی نشد — فایل‌ها از imageresolver استفاده می‌کنند |
| 2 | `DeleteFileInfo` | fms.proto | ❌ **۰ رفرنس** — هیچ Service/Handler ندارد | همان — کل fms.proto حذف‌شدنی |
| 3 | `BulkAdjustStock` | inventory.proto | ❌ **۰ رفرنس** — حتی Service method ندارد | هرگز پیاده‌سازی نشد — از AdjustStock تکی استفاده می‌شود |
| 4 | `CreateNewOrderForCustomer` | userorder.proto | ❌ **Stub خالی**`return new()` | مسیر سفارش مشتری از SubmitShopBuyOrder می‌گذرد — تکراری |
| 5 | `SubmitOrderForCustomer` | userorder.proto | ❌ **Stub خالی**`return new()` | مسیر سفارش مشتری از SubmitShopBuyOrder می‌گذرد — تکراری |
| 6 | `DeactivateConfiguration` | configuration.proto | ❌ **throw میکند** — «تنظیمات فقط خواندنی هستند» | عمداً غیرفعال شده — SystemConstants ثابت هستند |
| 7 | `GetConfigurationHistory` | configuration.proto | ❌ **خالی برمی‌گرداند**`return new()` | SystemConstants تاریخچه ندارند — بی‌معنی |
| 8 | `DeleteCity` | City.proto | ✅ کامل ولی **بی‌نیاز** | شهرها seed دیتا هستند — حذف شهر باعث خرابی آدرس‌ها می‌شود |
| 9 | `UpdateCity` | City.proto | ✅ کامل ولی **بی‌نیاز** | شهرها از سرویس خارجی seed شده‌اند — ویرایش دستی نیاز نیست |
| 10 | `GetOrdersByDateRange` | userorder.proto | ✅ کامل ولی **تکراری** | `GetAllUserOrderByFilter` همین قابلیت + فیلترهای بیشتر دارد |
| 11 | `GetServiceHealth` | health.proto | ✅ کامل ولی **تکراری** | `GetSystemHealth` کل سیستم را برمی‌گرداند — فیلتر client-side کافی است |
| 12 | `GetCategoryByIdForCustomer` | category.proto | ✅ کامل ولی **تکراری** | `GetCategory` (admin) + `GetAllCategoriesForCustomer` کافی است |
---
## 🟡 بخش ۲ — استفاده داخلی CMS (Internal Only — ۱۰۱ عدد)
> این RPCها از فرانت‌ها فراخوانی نمی‌شوند ولی **در کد بکند CMS فعال هستند** (background services, handlers, internal flows). **حذف نشوند!**
### B1. احراز هویت و کاربر (user.proto)
| RPC | رفرنس CMS | علت |
|-----|-----------|-----|
| `CreateNewUser` | 175 | ثبت‌نام کاربر — اصلی‌ترین فلو |
| `GetJwtToken` | 38 | صدور توکن JWT |
| `AdminGetJwtToken` | 19 | لاگین ادمین |
| `SetPasswordForUser` | 24 | تنظیم رمز عبور |
| `ChangeCustomerPassword` | 5 | تغییر رمز مشتری |
| `UploadCustomerAvatar` | 6 | آپلود آواتار |
| `GetCustomerProfile` | 13 | پروفایل مشتری |
| `GetCustomerReferrals` | 13 | لیست معرفی‌شدگان |
| `GetCustomerSettings` | 13 | تنظیمات مشتری |
### B2. بسته‌ها و پرداخت (package.proto / manualpayment.proto)
| RPC | رفرنس CMS | علت |
|-----|-----------|-----|
| `PurchaseGoldenPackage` | 21 | خرید بسته طلایی — فلو فعال |
| `VerifyGoldenPackagePurchase` | 22 | تأیید خرید بسته طلایی |
| `CustomerPurchasePackage` | 3 | خرید مشتری (proto-generated + service) |
| `CustomerVerifyPackagePurchase` | 3 | تأیید خرید مشتری |
| `GetCustomerPurchaseHistory` | 13 | تاریخچه خرید |
| `ProcessManualMembershipPayment` | 20 | پرداخت دستی عضویت |
### B3. شبکه و عضویت (networkmembership.proto / clubmembership.proto)
| RPC | رفرنس CMS | علت |
|-----|-----------|-----|
| `JoinNetwork` | 14 | پیوستن به شبکه — فراخوانی خودکار |
| `RemoveFromNetwork` | 14 | حذف از شبکه |
### B4. کمیسیون (commission.proto)
| RPC | رفرنس CMS | علت |
|-----|-----------|-----|
| `CalculateWeeklyBalances` | 26 | سرویس پس‌زمینه هفتگی |
| `CalculateWeeklyCommissionPool` | 22 | سرویس پس‌زمینه هفتگی |
| `ProcessUserPayouts` | 15 | پردازش پرداخت‌ها |
| `GetCommissionPayoutHistory` | 20 | تاریخچه پرداخت کمیسیون |
### B5. انبارداری (inventory.proto)
| RPC | رفرنس CMS | علت |
|-----|-----------|-----|
| `ConfirmSale` | 10 | تأیید فروش — فلو سفارش |
| `ReserveStock` | 12 | رزرو موجودی — فلو سفارش |
| `ReleaseReservation` | 10 | آزادسازی رزرو |
| `ProcessReturn` | 6 | پردازش مرجوعی |
| `DeleteWarehouse` | 18 | حذف انبار |
| `GetInventoryByProduct` | 26 | موجودی بر اساس محصول |
| `GetInventoryItem` | 19 | آیتم انبار |
| `GetWarehouse` | 18 | دریافت انبار |
| `SetDefaultWarehouse` | 18 | تنظیم انبار پیش‌فرض |
| `UpdateWarehouse` | 18 | بروزرسانی انبار |
| `GetStockMovementsByInventoryItem` | 17 | حرکات موجودی |
### B6. تراکنش‌ها (transactions.proto)
| RPC | رفرنس CMS | علت |
|-----|-----------|-----|
| `CreateNewTransactions` | 26 | ایجاد تراکنش — فلو پرداخت |
| `DeleteTransactions` | 23 | حذف تراکنش |
| `GetAllTransactionsByFilter` | 25 | لیست تراکنش‌ها |
| `CustomerPaymentVerification` | 3 | تأیید پرداخت مشتری |
| `GetCustomerTransaction` | 27 | تراکنش مشتری |
| `GetCustomerTransactionsByFilter` | 14 | فیلتر تراکنش‌ها |
| `RefundTransaction` | 31 | استرداد تراکنش |
| `UpdateTransactions` | 23 | بروزرسانی تراکنش |
| `VerifyTransaction` | 24 | تأیید تراکنش |
### B7. سایر CRUD داخلی (خلاصه)
> ۵۸ RPC در فایل‌های contract, usercontract, factordetails, productcategory, productgalleries, productimages, userwallet, userwalletchangelog, otptoken, usercarts, discountproduct, public_messages, category, products, producttag, tag, City, useraddress, userorder — همه CRUD داخلی با ≥3 رفرنس در CMS.
---
## 🟢 بخش ۳ — سرویس‌های کاملاً مورد استفاده
### فایل‌های proto که تمام RPCهایشان استفاده می‌شود:
| فایل Proto | کل RPC | استفاده FO | استفاده BO |
|-----------|--------|-----------|-----------|
| appversion.proto | 3 | ✅ 1 | ✅ 3 |
| blogcategory.proto | 6 | ✅ 2 | ✅ 6 |
| blogpost.proto | 11 | ✅ 5 | ✅ 9 |
| blogpostimage.proto | 4 | ✅ 0 | ✅ 4 |
| discountcategory.proto | 4 | ✅ 1 | ✅ 4 |
| discountorder.proto | 7 | ✅ 3 | ✅ 4 |
| discountshoppingcart.proto | 5 | ✅ 5 | ✅ 0 |
| manualpayment.proto | 5 | ✅ 0 | ✅ 4 |
| public_messages.proto | 8 | ✅ 0 | ✅ 7 |
| role.proto | 5 | ✅ 0 | ✅ 5 |
| sitepage.proto | 10 | ✅ 2 | ✅ 10 |
| sitepagesettings.proto | 5 | ✅ 1 | ✅ 5 |
| tag.proto | 6 | ✅ 0 | ✅ 5 |
| userrole.proto | 5 | ✅ 0 | ✅ 5 |
---
## 📋 بخش ۴ — خلاصه تصمیمات
### ماتریکس نهایی ۲۴ RPC مُرده
```
✅ نگهداری (12): CustomerReorderPreviousOrder, CustomerTrackOrder,
CalculateOrderPV, GetInventorySummary, GetStockValueReport,
BulkAddStock, BulkUpdateProductStock, GetConfigurationByKey,
UpdateCustomerSettings, ChangeNetworkParent,
AssignFeatureToMembership, GetLowStockProducts
🗑️ آرشیو (12): CreateNewFileInfo, DeleteFileInfo, BulkAdjustStock,
CreateNewOrderForCustomer, SubmitOrderForCustomer,
DeactivateConfiguration, GetConfigurationHistory,
DeleteCity, UpdateCity, GetOrdersByDateRange,
GetServiceHealth, GetCategoryByIdForCustomer
```
### فایل‌های proto آرشیو‌شدنی (کامل)
| فایل | وضعیت | اقدام |
|------|-------|-------|
| **fms.proto** | کل فایل مُرده (2 RPC) | حذف از csproj — ساخته نشود |
### RPCهای آرشیو‌شدنی (جزئی — داخل فایل‌های فعال)
| فایل Proto | RPCهای آرشیو | RPCهای فعال |
|-----------|-------------|-------------|
| inventory.proto | `BulkAdjustStock` (1) | 23 فعال |
| userorder.proto | `CreateNewOrderForCustomer`, `SubmitOrderForCustomer` (2) | 18 فعال |
| configuration.proto | `DeactivateConfiguration`, `GetConfigurationHistory` (2) | 5 فعال |
| City.proto | `DeleteCity`, `UpdateCity` (2) | 6 فعال |
| health.proto | `GetServiceHealth` (1) | 1 فعال |
| category.proto | `GetCategoryByIdForCustomer` (1) | 7 فعال |
---
## ⚠️ نکات مهم
1. **آرشیو ≠ حذف!** — RPCهای آرشیو‌شده با `[Obsolete]` + `#region [ARCHIVED]` علامت‌گذاری شدند (کامیت `13dd0f5`)
2. RPCهای دسته B (Internal — ۱۰۱ عدد) **حیاتی** هستند — بدون آنها سیستم از کار می‌افتد
3. RPCهای «نگهداری» (۱۲ عدد) کد **کامل و آماده** دارند — بکلاگ فیچر: [FEATURE-BACKLOG.md](../roadmap/FEATURE-BACKLOG.md)
4. **fms.proto** از csproj اکسکلود شد (کامیت `13dd0f5`)
5. نقشه‌راه تحول پکیج‌بیس: [PACKAGE-TRANSFORMATION-TASKS.md](../roadmap/PACKAGE-TRANSFORMATION-TASKS.md)
6. قبل از هر تغییر، حتماً `grep -rn "RpcName" CMS/src/` بزنید تا مطمئن شوید
---
*آخرین بروزرسانی: ۱۴۰۴/۱۲/۰۶*