freshyo/DEAD_CODE_REPORT.md
2026-09-12 11:45:07 +05:30

12 KiB

Dead Code Report — branch DEAD_CODE_CLEAN

Status: EXECUTED. The dead code listed below has been removed (see "Removal status" at the bottom). The one exception is the Drizzle relation exports, which were kept after verification.

Static-analysis sweep for reachable-code / caller-less code across the monorepo. Method: ripgrep-based caller search + manual verification.

  • tRPC endpoints: every procedure in admin/user/common routers was enumerated, then searched for callers (trpc.<path> and trpcClient.<path>) in apps/admin-ui, apps/user-ui, apps/web-ui, apps/admin-web, apps/fallback-ui, apps/info-site.
  • Methods/functions: exported + local function/const definitions in apps/backend/src and packages/db_helper_sqlite/src were searched repo-wide; classified as truly uncalled only when they appear nowhere except their definition (and pure re-export files).
  • Files: inbound-reference scan by module name.
  • Excludes node_modules, dist, .wrangler, .output, .expo, .turbo, .tanstack.

Caveats at the bottom — some of these may be intentional (manual tooling, external API consumers, planned features). Verify before deleting.


1. Dead tRPC endpoints (15)

No caller in any client app (native or web). Each is still registered on the router, so it is reachable over HTTP but unused by this repo.

Endpoint File Line Note
trpc.admin.coupon.validate apps/backend/src/trpc/apis/admin-apis/apis/coupon.ts 265 Admin coupon validation
trpc.admin.vendorSnippets.getById .../admin-apis/apis/vendor-snippets.ts 184 Single snippet fetch
trpc.admin.vendorSnippets.getVendorOrders .../admin-apis/apis/vendor-snippets.ts 464 Vendor orders
trpc.admin.slots.getSlotsProductIds .../admin-apis/apis/slots.ts 138 Dup of product.* variant
trpc.admin.slots.updateSlotProducts .../admin-apis/apis/slots.ts 194 Dup of product.* variant
trpc.admin.slots.getSlots .../admin-apis/apis/slots.ts 387 Only trpc.user.slots.getSlots is used
trpc.admin.slots.deleteSlot .../admin-apis/apis/slots.ts 583 No delete-slot UI
trpc.admin.product.updateSlotProducts .../admin-apis/apis/product.ts 392 Duplicate router entry
trpc.admin.product.getSlotsProductIds .../admin-apis/apis/product.ts 462 Duplicate router entry
trpc.admin.staffUser.getUsers .../admin-apis/apis/staff-user.ts 79 admin.user.getAllUsers is the used one
trpc.admin.staffUser.getUserDetails .../admin-apis/apis/staff-user.ts 104 admin.user.getUserDetails is used
trpc.admin.staffUser.updateUserSuspension .../admin-apis/apis/staff-user.ts 128 admin.user.updateUserSuspension is used
trpc.admin.user.createUserByMobile .../admin-apis/apis/user.ts 29 No caller
trpc.common.product.getDashboardTags .../common-apis/common.ts 144 Home reads tags from products.json, not this
trpc.hello apps/backend/src/trpc/router.ts 14 Scaffold sample endpoint

Notable: the slotsproduct routers have four duplicated procedures (getSlotsProductIds, updateSlotProducts) — both copies are dead. The staffUser router duplicates three user-management procedures that are only ever called via the admin.user router.


2. Dead backend functions / constants (truly uncalled)

Defined/exported but never referenced anywhere else in the repo.

Env / config

Symbol File
getJwtSecret apps/backend/src/lib/env-exporter.ts
getRedisUrl apps/backend/src/lib/env-exporter.ts
getPhonePeBaseUrl apps/backend/src/lib/env-exporter.ts
getPhonePeClientId apps/backend/src/lib/env-exporter.ts
getPhonePeClientVersion apps/backend/src/lib/env-exporter.ts
getPhonePeClientSecret apps/backend/src/lib/env-exporter.ts
getPhonePeMerchantId apps/backend/src/lib/env-exporter.ts
READABLE_ORDER_ID_KEY apps/backend/src/lib/const-strings.ts
WELCOME_MESSAGE apps/backend/src/lib/const-strings.ts
defaultRole apps/backend/src/lib/roles-manager.ts

Notifications / jobs

Symbol File Note
sendPushNotificationsMany apps/backend/src/lib/expo-service.ts Whole file has no importers (see §4)
sendOrderPlacedNotification apps/backend/src/lib/notif-job.ts Only an unused import + a commented call in user-apis/order.ts
sendOrderCancelledNotification apps/backend/src/lib/notif-job.ts Same — imported, call commented
sendPaymentFailedNotification apps/backend/src/lib/notif-job.ts No reference
sendOrderOutForDeliveryNotification apps/backend/src/lib/notif-job.ts No reference
sendRefundInitiatedNotification apps/backend/src/lib/notif-job.ts No reference

(Alive: sendAdminNotification via queue-consumer.tsworker.ts; sendOrderPackagedNotification and sendOrderDeliveredNotification via admin order api; scheduleNotification via those.)

Stores / cache / misc

Symbol File
getOrderDetailsWrapper apps/backend/src/dbService.ts
clearAllCache apps/backend/src/lib/cloud_cache.ts
getAllBanners apps/backend/src/stores/banner-store.ts
getTagById apps/backend/src/stores/product-tag-store.ts
getAllTags apps/backend/src/stores/product-tag-store.ts
getProductSlots apps/backend/src/stores/slot-store.ts
getAllProductsSlots apps/backend/src/stores/slot-store.ts
getUserNegativity apps/backend/src/stores/user-negativity-store.ts
createTRPCRouter apps/backend/src/trpc/trpc-index.ts (alias re-export, unused)

3. Dead exports in db_helper_sqlite

Symbol File Note
mergeDuplicateProducts packages/db_helper_sqlite/src/admin-apis/merge-duplicate-products.ts Exported via index + sqliteImporter, but no code calls it (function had a "how to use manually" doc comment → manual utility). Removed.

productSkusRelations, productMarketStatsRelations, skuFeaturesRelations, productCombosRelations (src/db/schema.ts) looked unreferenced but are NOT dead — Drizzle registers relation exports via import * as schema in db_index.ts, and db.query.*.findMany({ with: … }) depends on them. Kept.

Used only inside their own file (helpers of live code — not dead): parseDuplicateProductsMd (deleted with the merge utility), splitQuantityFeature, cleanFeatureValue, productTypeEnum.


4. Dead / unreachable files & endpoints

Item File Note
Expo push service apps/backend/src/lib/expo-service.ts No module imports it; its only export is uncalled
av-router apps/backend/src/apis/admin-apis/apis/av-router.ts Mounted at /api/v1/av but registers zero routes (staff-auth middleware only)
REST product summary apps/backend/src/apis/common-apis/apis/common-product.controller.ts (getAllProductsSummary) Reachable at /api/v1/cm/products/summary, but no client calls it (apps use tRPC)

/api/test (test-controller.ts) is referenced only by apps/fallback-ui/src/routes/demo.tsx (a demo page).


5. Unused imports that point at dead code

File Unused import Reality
apps/backend/src/trpc/apis/user-apis/apis/order.ts sendOrderPlacedNotification (line 29) Call is commented out (line 235)
apps/backend/src/trpc/apis/user-apis/apis/order.ts sendOrderCancelledNotification (line 30) Call is commented out (line 598)

6. Commented-out / unreachable code blocks

Not "callers-less" but unreachable. Many "Old implementation" blocks were kept across the backend; the most notable registered-looking ones:

  • apps/backend/src/trpc/apis/common-apis/common.ts:160-176getStoresSummary and healthCheck procedures inside a /* … */ block (NOT registered; the live ones are in common-trpc-index.ts).
  • apps/backend/src/main-router.ts// router.route('/av', avRouter) (route disabled).
  • Numerous // Old implementation - direct DB queries: blocks in admin-apis/*, user-apis/*, and db helpers (historical only).

7. Checked and NOT dead (for reference)

  • apps/admin-ui / user-ui / web-ui exports: 0 truly-unused. 18 shared exports (AdminOrderItemCore, SkuFlagCore, UserStoreSummaryCore, …) are referenced only within their own file to compose other types — that's normal, not dead.
  • Backend functions used only inside their own file (e.g. cloud_cache internals createProductsFileInternal, constructCacheUrl, clearUrlCache; slot-store transformSlotToStoreSlot/extractSlotInfo/fetchAllTransformedSlots; trpc-index createCallerFactory) — all reachable via their parent functions, not dead.
  • queue-consumer.ts — although it imports only-in-backend, it IS used by worker.ts, so alive.

Caveats

  1. Static analysis only. A tRPC procedure can still be called by an external/undisclosed client (mobile build, partner integration). Confirm before removing public procedures.
  2. mergeDuplicateProducts and expo-service look intentionally kept for manual/one-off use — decide whether to delete or document.
  3. The admin-web tree is present on disk but untracked on this branch; it was included in the caller search.
  4. Some "dead" management procedures (staffUser.*, duplicated slots/product entries) may be leftovers from older UI screens; safe to remove once confirmed.

Removal status (executed)

Removed — 15 tRPC procedures: admin.coupon.validate; admin.vendorSnippets.getById, getVendorOrders; admin.slots.getSlotsProductIds, updateSlotProducts, getSlots, deleteSlot; admin.product.updateSlotProducts, getSlotsProductIds; admin.staffUser.getUsers, getUserDetails, updateUserSuspension; admin.user.createUserByMobile; common.product.getDashboardTags; trpc.hello.

Removed — backend functions/constants: getJwtSecret, getRedisUrl, getExpoAccessToken, getPhonePeBaseUrl/ClientId/ClientVersion/ClientSecret/MerchantId, READABLE_ORDER_ID_KEY, WELCOME_MESSAGE, defaultRole, getOrderDetailsWrapper, clearAllCache, getAllBanners, getTagById, getAllTags, getDashboardTags, getProductSlots, getAllProductsSlots, getUserNegativity, createTRPCRouter, createCallerFactory, and the notification senders sendOrderPlacedNotification, sendPaymentFailedNotification, sendOrderOutForDeliveryNotification, sendOrderCancelledNotification, sendRefundInitiatedNotification + their message constants.

Removed — DB helper functions orphaned by the procedures above (from BOTH db_helper_sqlite and db_helper_postgres, plus their barrel exports and sqliteImporter re-exports): createUserByMobile, deleteSlotById, getVendorOrders, updateSlotProducts, getSlotsProductIds (the five behind the deleted endpoints) and getActiveSlots, getAllUsers, getUserWithDetails, validateCoupon, checkUnitExists, getProductImagesById, replaceProductTags (same class, missed by the first scan because their names also exist in the parallel package).

Removed — files: apps/backend/src/lib/expo-service.ts, apps/backend/src/middleware/staff-auth.ts (only used by the empty av-router), apps/backend/src/apis/admin-apis/apis/av-router.ts (empty router), packages/db_helper_sqlite/src/admin-apis/merge-duplicate-products.ts.

Removed — wiring: avRouter import/route from main-router.ts + v1-router.ts; mergeDuplicateProducts exports from db_helper_sqlite/index.ts and sqliteImporter.ts; unused sendOrder*Notification import + commented calls in user-apis/order.ts; orphaned imports in all touched files.

Kept (false positives / intentional): the four Drizzle relation exports (implicitly registered); mergeDuplicateProducts was deleted per §3.

Verification: tsc clean for apps/backend, packages/db_helper_sqlite, apps/web-ui, apps/admin-ui, apps/user-ui, apps/admin-web. (apps/fallback-ui has one pre-existing vite.config.ts error unrelated to this change.)