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