01244f426e
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
220 lines
14 KiB
Markdown
220 lines
14 KiB
Markdown
# آدیت سرویسهای 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/` بزنید تا مطمئن شوید
|
||
|
||
---
|
||
|
||
*آخرین بروزرسانی: ۱۴۰۴/۱۲/۰۶*
|