diff --git a/cms/GRPC-SERVICES-AUDIT.md b/cms/GRPC-SERVICES-AUDIT.md index 88074eb..bfcb41b 100644 --- a/cms/GRPC-SERVICES-AUDIT.md +++ b/cms/GRPC-SERVICES-AUDIT.md @@ -1,7 +1,8 @@ # آدیت سرویس‌های gRPC — CMS > تاریخ: ۱۴۰۴/۰۴ -> هدف: شناسایی RPCهایی که از هیچ‌کدام از فرانت‌ها (FrontOffice مشتری + BackOffice ادمین) فراخوانی نمی‌شوند +> آخرین بروزرسانی: ۱۴۰۴/۱۲/۰۶ +> هدف: شناسایی RPCهایی که از هیچ‌کدام از فرانت‌ها (FrontOffice مشتری + BackOffice ادمین) فراخوانی نمی‌شوند + تصمیم‌گیری نگهداری vs آرشیو --- @@ -21,40 +22,49 @@ --- -## 🔴 دسته A — کد مُرده واقعی (Dead Code) +## 🔴 بخش ۱ — تحلیل ۲۴ RPC مُرده: نگهداری vs آرشیو -> این RPCها نه از فرانت‌ها فراخوانی می‌شوند و نه در کد CMS پیاده‌سازی/استفاده شده‌اند (فقط ≤2 رفرنس = فقط کد proto-generated). +### ✅ نگهداری (آینده‌نگرانه — ۱۲ عدد) -| # | RPC | فایل Proto | وضعیت | -|---|-----|-----------|-------| -| 1 | `AssignFeatureToMembership` | clubmembership.proto | Stub — هرگز پیاده‌سازی نشد | -| 2 | `BulkAddStock` | inventory.proto | Stub — هرگز پیاده‌سازی نشد | -| 3 | `BulkAdjustStock` | inventory.proto | Stub — 0 رفرنس | -| 4 | `BulkUpdateProductStock` | products.proto | Stub — هرگز پیاده‌سازی نشد | -| 5 | `CalculateOrderPV` | userorder.proto | Stub — هرگز پیاده‌سازی نشد | -| 6 | `ChangeNetworkParent` | networkmembership.proto | Stub — هرگز از فرانت استفاده نشد | -| 7 | `CreateNewFileInfo` | fms.proto | 0 رفرنس — سرویس FMS هرگز ساخته نشد | -| 8 | `CreateNewOrderForCustomer` | userorder.proto | Stub — سفارش مشتری از مسیر دیگر | -| 9 | `CustomerReorderPreviousOrder` | userorder.proto | Stub — فیچر تکرار سفارش پیاده‌سازی نشد | -| 10 | `CustomerTrackOrder` | userorder.proto | Stub — فیچر ردیابی سفارش پیاده‌سازی نشد | -| 11 | `DeactivateConfiguration` | configuration.proto | Stub — هرگز استفاده نشد | -| 12 | `DeleteCity` | City.proto | Stub — حذف شهر نیاز نیست | -| 13 | `DeleteFileInfo` | fms.proto | 0 رفرنس — سرویس FMS هرگز ساخته نشد | -| 14 | `GetCategoryByIdForCustomer` | category.proto | Stub — مشتری از GetAllCategoriesForCustomer استفاده می‌کند | -| 15 | `GetConfigurationByKey` | configuration.proto | Stub — فقط GetAllConfigurations استفاده می‌شود | -| 16 | `GetConfigurationHistory` | configuration.proto | Stub — تاریخچه تنظیمات پیاده‌سازی نشد | -| 17 | `GetInventorySummary` | inventory.proto | Stub — داشبورد خلاصه انبار پیاده‌سازی نشد | -| 18 | `GetLowStockProducts` | products.proto | Stub — از GetLowStockItems (inventory) استفاده می‌شود | -| 19 | `GetOrdersByDateRange` | userorder.proto | Stub — از فیلتر GetAllUserOrderByFilter استفاده می‌شود | -| 20 | `GetServiceHealth` | health.proto | Stub — فقط GetSystemHealth استفاده می‌شود | -| 21 | `GetStockValueReport` | inventory.proto | Stub — گزارش ارزش موجودی پیاده‌سازی نشد | -| 22 | `SubmitOrderForCustomer` | userorder.proto | Stub — سفارش مشتری از مسیر دیگر | -| 23 | `UpdateCity` | City.proto | Stub — ویرایش شهر نیاز نیست | -| 24 | `UpdateCustomerSettings` | user.proto | Stub — تنظیمات مشتری پیاده‌سازی نشد | +> این 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` کافی است | --- -## 🟡 دسته B — استفاده داخلی CMS (Internal Only) +## 🟡 بخش ۲ — استفاده داخلی CMS (Internal Only — ۱۰۱ عدد) > این RPCها از فرانت‌ها فراخوانی نمی‌شوند ولی **در کد بکند CMS فعال هستند** (background services, handlers, internal flows). **حذف نشوند!** @@ -129,74 +139,13 @@ | `UpdateTransactions` | 23 | بروزرسانی تراکنش | | `VerifyTransaction` | 24 | تأیید تراکنش | -### B7. سایر CRUD داخلی +### B7. سایر CRUD داخلی (خلاصه) -| RPC | فایل Proto | رفرنس CMS | علت | -|-----|-----------|-----------|-----| -| `CreateNewContract` | contract.proto | 26 | قراردادها | -| `UpdateContract` | contract.proto | 23 | بروزرسانی قرارداد | -| `DeleteContract` | contract.proto | 23 | حذف قرارداد | -| `GetContract` | contract.proto | 19 | دریافت قرارداد | -| `GetAllContractByFilter` | contract.proto | 25 | لیست قراردادها | -| `CreateNewUserContract` | usercontract.proto | 26 | قرارداد کاربر | -| `UpdateUserContract` | usercontract.proto | 23 | بروزرسانی | -| `DeleteUserContract` | usercontract.proto | 23 | حذف | -| `GetUserContract` | usercontract.proto | 19 | دریافت | -| `CreateNewFactorDetails` | factordetails.proto | 26 | جزئیات فاکتور | -| `UpdateFactorDetails` | factordetails.proto | 23 | بروزرسانی | -| `DeleteFactorDetails` | factordetails.proto | 23 | حذف | -| `GetFactorDetails` | factordetails.proto | 19 | دریافت | -| `GetAllFactorDetailsByFilter` | factordetails.proto | 24 | لیست | -| `CreateNewProductCategory` | productcategory.proto | 26 | دسته‌بندی محصول | -| `UpdateProductCategory` | productcategory.proto | 23 | بروزرسانی | -| `DeleteProductCategory` | productcategory.proto | 23 | حذف | -| `GetProductCategory` | productcategory.proto | 19 | دریافت | -| `GetAllProductCategoryByFilter` | productcategory.proto | 24 | لیست | -| `CreateNewProductGalleries` | productgalleries.proto | 15 | گالری محصول | -| `UpdateProductGalleries` | productgalleries.proto | 14 | بروزرسانی | -| `DeleteProductGalleries` | productgalleries.proto | 14 | حذف | -| `GetProductGalleries` | productgalleries.proto | 15 | دریافت | -| `GetAllProductGalleriesByFilter` | productgalleries.proto | 15 | لیست | -| `CreateNewProductImages` | productimages.proto | 26 | تصاویر محصول | -| `UpdateProductImages` | productimages.proto | 23 | بروزرسانی | -| `DeleteProductImages` | productimages.proto | 23 | حذف | -| `GetProductImages` | productimages.proto | 19 | دریافت | -| `GetAllProductImagesByFilter` | productimages.proto | 24 | لیست | -| `CreateNewUserWallet` | userwallet.proto | 54 | ایجاد کیف پول | -| `UpdateUserWallet` | userwallet.proto | 46 | بروزرسانی | -| `DeleteUserWallet` | userwallet.proto | 46 | حذف | -| `GetUserWallet` | userwallet.proto | 41 | دریافت | -| `CreateNewUserWalletChangeLog` | userwalletchangelog.proto | 26 | لاگ تغییرات | -| `UpdateUserWalletChangeLog` | userwalletchangelog.proto | 23 | بروزرسانی | -| `DeleteUserWalletChangeLog` | userwalletchangelog.proto | 23 | حذف | -| `GetUserWalletChangeLog` | userwalletchangelog.proto | 21 | دریافت | -| `GetAllOtpTokenByFilter` | otptoken.proto | 24 | لیست OTP | -| `GetAllUserCartsByFilter` | usercarts.proto | 7 | لیست سبدها | -| `AddNewUserCart` | usercarts.proto | 9 | افزودن سبد | -| `DeleteUserCart` | usercarts.proto | 7 | حذف سبد | -| `UpdateUserCart` | usercarts.proto | 10 | بروزرسانی سبد | -| `AddDiscountProductImage` | discountproduct.proto | 10 | تصویر محصول تخفیفی | -| `UpdateDiscountProductImage` | discountproduct.proto | 9 | بروزرسانی | -| `DeleteDiscountProductImage` | discountproduct.proto | 9 | حذف | -| `ReorderDiscountProductImages` | discountproduct.proto | 9 | مرتب‌سازی | -| `GetActiveMessages` | public_messages.proto | 16 | پیام‌های فعال | -| `GetAllCategories` | category.proto | 4 | همه دسته‌بندی‌ها | -| `GetCustomerProducts` | products.proto | 29 | محصولات مشتری | -| `GetCustomerProductsByFilter` | products.proto | 16 | فیلتر محصولات | -| `GetProductTag` | producttag.proto | 19 | تگ محصول | -| `GetProductsByTag` | tag.proto | 16 | محصولات بر اساس تگ | -| `UpdateProductTag` | producttag.proto | 23 | بروزرسانی تگ | -| `CreateCity` | City.proto | 3 | ایجاد شهر | -| `GetCitiesForCustomer` | City.proto | 3 | شهرها برای مشتری | -| `GetCityByIdForCustomer` | City.proto | 3 | شهر مشتری | -| `GetCitiesByStateForCustomer` | City.proto | 3 | شهرها بر اساس استان | -| `GetUserAddress` | useraddress.proto | 19 | آدرس کاربر | -| `CustomerCancelOrder` | userorder.proto | 4 | لغو سفارش مشتری | -| `GetCustomerOrderHistory` | userorder.proto | 13 | تاریخچه سفارشات | +> ۵۸ 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هایشان استفاده می‌شود: @@ -219,58 +168,51 @@ --- -## 📋 فایل‌های Proto با بیشترین RPC استفاده‌نشده +## 📋 بخش ۴ — خلاصه تصمیمات -| فایل Proto | کل RPC | استفاده‌نشده از فرانت | وضعیت | -|-----------|--------|----------------------|-------| -| factordetails.proto | 5 | 5 (100%) | CRUD داخلی — نیاز به UI ندارد | -| productgalleries.proto | 5 | 5 (100%) | CRUD داخلی — از products.proto استفاده می‌شود | -| productimages.proto | 5 | 5 (100%) | CRUD داخلی — از products.proto استفاده می‌شود | -| productcategory.proto | 5 | 5 (100%) | CRUD داخلی — از products.proto استفاده می‌شود | -| contract.proto | 5 | 5 (100%) | CRUD داخلی — مدیریت قراردادها | -| fms.proto | 2 | 2 (100%) | **کد مُرده** — هرگز پیاده‌سازی نشد | -| inventory.proto | 24 | 15 (63%) | بیشتر داخلی (فلو سفارش) | -| transactions.proto | 11 | 9 (82%) | بیشتر داخلی (فلو پرداخت) | -| user.proto | 20 | 9 (45%) | احراز هویت + پروفایل داخلی | -| userorder.proto | 20 | 9 (45%) | مدیریت سفارش داخلی | +### ماتریکس نهایی ۲۴ 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 آرشیو‌شدنی (کامل) -1. **fms.proto** — کامل (2 RPC) — سرویس FMS هرگز ساخته نشد -2. `SubmitOrderForCustomer` — stub خالی -3. `CreateNewOrderForCustomer` — stub خالی -4. `CustomerReorderPreviousOrder` — فیچر پیاده‌سازی نشده -5. `CustomerTrackOrder` — فیچر پیاده‌سازی نشده -6. `BulkAdjustStock` — 0 رفرنس -7. `BulkAddStock` — stub -8. `BulkUpdateProductStock` — stub -9. `GetStockValueReport` — stub -10. `GetInventorySummary` — stub +| فایل | وضعیت | اقدام | +|------|-------|-------| +| **fms.proto** | کل فایل مُرده (2 RPC) | حذف از csproj — ساخته نشود | -### اولویت ۲ — RPCهای تکراری (عملکرد مشابه موجود) +### RPCهای آرشیو‌شدنی (جزئی — داخل فایل‌های فعال) -| Dead RPC | جایگزین فعال | -|----------|-------------| -| `GetCategoryByIdForCustomer` | `GetAllCategoriesForCustomer` | -| `GetLowStockProducts` | `GetLowStockItems` (inventory) | -| `GetOrdersByDateRange` | `GetAllUserOrderByFilter` (with date filter) | -| `GetServiceHealth` | `GetSystemHealth` | -| `GetConfigurationByKey` | `GetAllConfigurations` + filter | +| فایل 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. **حذف نکنید!** — فقط مستند و آرشیو شدند -2. RPCهای دسته B (Internal) **حیاتی** هستند — بدون آنها سیستم از کار می‌افتد -3. RPCهای `PurchaseGoldenPackage` و `VerifyGoldenPackagePurchase` از فرانت فراخوانی نمی‌شوند ولی **فلو خرید بسته فعلی** از آنها استفاده می‌کند -4. RPCهای `Customer*` (مثل `CustomerPurchasePackage`, `CustomerVerifyPackagePurchase`) تازه اضافه شده‌اند و هنوز از فرانت وصل نشده‌اند -5. قبل از هر حذف، حتماً `grep -rn "RpcName" CMS/src/` بزنید تا مطمئن شوید +1. **آرشیو ≠ حذف!** — RPCهای آرشیو‌شده فقط با `// [ARCHIVED]` علامت‌گذاری می‌شوند +2. RPCهای دسته B (Internal — ۱۰۱ عدد) **حیاتی** هستند — بدون آنها سیستم از کار می‌افتد +3. RPCهای «نگهداری» (۱۲ عدد) کد **کامل و آماده** دارند — فقط نیاز به وصل شدن از فرانت +4. **fms.proto** تنها فایل proto کاملاً مُرده است — می‌تواند از csproj اکسکلود شود +5. قبل از هر تغییر، حتماً `grep -rn "RpcName" CMS/src/` بزنید تا مطمئن شوید --- -*آخرین بروزرسانی: $(date +%Y-%m-%d)* +*آخرین بروزرسانی: ۱۴۰۴/۱۲/۰۶*