#320 C 端线上依赖盘点(必须保留的接口 / 表 / 字段清单)

依据义父 2026-09-30 最新口令:prod 的商品/订单按测试数据对待,只要已上线 C 端不受损即可清理;
但执行须先完成本盘点(#320),再制定清理方案(#321),不得直接 DROP goods / DROP retail_products。

>

取证方法:以 miniprogram-v3(唯一活跃 + 唯一提审 C 端)实际代码为权威,grep 全仓 /api/miniapp/*
调用点(file:line 取证),反查 backend/app/routers 路由与 SQL 表。不靠猜。

一、C 端实际调用的接口清单(按域,file:line 取证)

接口(C 端真实调用)C 端调用点后端 router依赖表 / 字段
POST /api/miniapp/auth/loginauth/login.ts:12,25auth.routerusers / user_identities
GET /api/miniapp/auth/melogin.ts:82auth.routerusers
GET /api/miniapp/user/footprintsstatus-timeline.ts, journey.tsminiapp_user用户足迹
GET /api/miniapp/productsdsl-sources.ts:17, sel-routes.tsminiapp_products.pypackages / package_components / site_config(default_leader)
GET /api/miniapp/products/featuredsel-routes.tsminiapp_products.pypackages
GET /api/miniapp/products/{id}product-detail.tsminiapp_products.pypackages
GET /api/miniapp/packagesdestination.ts, vouchers.tspackages.pypackages
GET /api/miniapp/ordersdsl-sources.ts, orders.tsminiapp_orders.pyorders / order_items / packages·goods(snapshot)
GET /api/miniapp/orders/{id}order-detail.tsminiapp_orders.pyorders / order_items
POST /api/miniapp/orderspay.ts:66miniapp_orders.pyorders / order_items / goods(单品) 或 packages(套餐)
POST /api/miniapp/orders/{id}/paypay.ts:34miniapp_orders.py / miniapp_payorders / wxpay
POST /api/miniapp/orders/{id}/reviewreviews.ts, review.tsminiapp_orders.pyorders
GET /api/miniapp/reviewsreviews.tsminiapp_reviewsreviews
GET/POST /api/miniapp/messages*messages.tsminiapp_messagesmessages
GET /api/miniapp/guidesdsl-sources/local/content-library/sel-routes/selectionguidesguides
GET /api/miniapp/guides/{id}content-article.tsguidesguides
GET /api/miniapp/guides/categoriescontent-library.tsguidesguides
GET/POST /api/miniapp/distribution*distribution.ts, share-code.tsminiapp_distributiondistribution
GET /api/miniapp/weather/todaydsl-sources/today-card/sel-headerweatherweather
GET /api/miniapp/calendar/upcomingtoday-card.tscalendarcalendar
GET /api/miniapp/recommendations/combo-cardsdsl-sources.tsrecommendationsrecommendations
GET /api/miniapp/content/itemscontent-config.ts:58, texts.ts:973contentcontent_items(含 shop.items 配置键)
GET /api/miniapp/redemption-codesprofile/order-detail/redemption-codeminiapp_redemptionredemption_codes
GET /api/miniapp/redemption-codes/{codeNo}redemption-code.tsminiapp_redemptionredemption_codes
GET /api/miniapp/hotel/room-typeshotel-booking.ts:58hotel.c_router住宿房型
POST /api/miniapp/hotel/bookingshotel-booking.ts:180hotel.c_routerorders(order_type=room) / hotel
GET /api/miniapp/hotel/orders/{id}/chargeshotel-booking.ts:227hotel住宿账单
POST /api/miniapp/hotel/charges/{id}/prepayhotel-booking.ts:232hotel住宿账单 / wxpay
GET/POST /api/miniapp/voice-guide*voice-guide.ts, guide-companion.tsminiapp_voice_guidevoice_guide
POST /api/miniapp/feedbackfeedback.ts:72miniapp_feedbackfeedback
DELETE /api/miniapp/privacy/meprivacy-notice.tsprivacy用户隐私
GET /api/miniapp/merchants/{mid}/presentationmerchant-store.tsminiapp_merchants商户页
GET /api/miniapp/merchant-pages/{mid}merchant-store.tsminiapp_merchant_pagesmerchant_pages
⚠️ C 端零调用(死端点):/api/miniapp/retail/*(miniapp_retail.router,main.py:184 挂载)——
全仓 miniapp-v3 grep retail 无任何匹配;该端点仅存在于 router 定义 + main.py 挂载 + 旧设计文档,
真实小程序 UI 从未接线。属小齐 2026-09-28 设计、未落地。

二、商品域「两套模型」判定(本盘点核心)

商品域实际有三套结构,C 端使用情况如下:

结构C 端是否使用证据结论
packages(套餐/线路)✅ 是(双入口)/api/miniapp/products(miniapp_products.py:104→FROM packages)+ /api/miniapp/packages(packages.py:14,95→FROM packages)必须保留(含 package_components)
goods(风物/单品)✅ 是(交易锁价)item-detail.ts 取 goodsId(来自 shop.items 配置)→ _create_goods_order(miniapp_orders.py:518)→ SELECT * FROM goods WHERE id AND status='active'(:537)锁价,落 order_type='retail'必须保留(风物在线支付链路锁价表)
retail_products❌ 否(仅 A 端)miniprogram-v3 零 retail 引用;仅 A 端 /api/admin/retail-products(admin_retail.py + admin_backend.py:1122)使用**表保留(A 端 admin 用);其 C 端端点 /api/miniapp/retail/* 是死代码**
shop.items(配置键)✅ 是(展示)loadContent(['shop.items']) → content_items 表(shop.ts:99, item-detail.ts:80)非独立表,属 content_items

关键结论(纠正"两套都保留"的笼统说法):


三、必须保留(C 端契约 + 主流程,清理时冻结)

  1. 接口路径:上表「一」全部(除死端点 /api/miniapp/retail/*)。
  2. 商品主链路:packages + package_components(套餐列表/详情/下单/支付前置);goods(风物锁价)。
  3. 订单主链路:orders + order_items(创建 / 查询 / 支付 / 评价 / 取消)。
  4. 配置依赖字段:content_items(shop.items 等 C 端展示配置);site_config.default_leader(products 映射依赖)。
  5. 线上 BASE_URL 对应路由:miniapp_products / packages / miniapp_orders / miniapp_pay / guides / content / redemption / hotel.c_router 等均已 main.py 挂载(107–217 行逐一确认)。
  6. A 端继续使用的管理接口:/api/admin/retail-products(retail_products 表)、/api/admin/goods/*(admin_goods.router)、/api/admin/orders(admin 干预)。

四、可下线 / 可清理(待 #321 方案,先验证再动)

类别对象处置建议风险
死代码(C 端零调用)/api/miniapp/retail/* 整条 C 端零售购买域(miniapp_retail.router + retail.miniapp_router)下线端点(保留 retail.console_router 给 A 端)低:C 端无调用;但需确认无定时任务/内部调用
冗余但活/api/miniapp/products 与 /api/miniapp/packages 双入口读 packages收敛为单入口(不急)中:需改 C 端调用点
测试数据(新口令允许删)goods / retail_products / orders / order_items 中的测试行先备份 → 再删 → 回归 C 端;按 is_test / 已知测试单号筛选中:须保证不误删真实/上线关联行
临时资产临时镜像 kailash-staging-app:fix638、临时容器、/tmp/be638删(已在"可清理"清单)低
冗余迁移说明合并引入的 106/108 撞号(保留为已知债,非删)本项不删(按纪律留债)—

五、给 #321 的下一步建议(执行顺序已定,勿抢跑)

  1. 波波已交本依赖清单(#320 完成)→ 锁定「三」为冻结区。
  2. 备份 prod 全量 dump(沿用 20260930-204842 之后最新一份)。
  3. 先删测试数据(goods/retail_products/orders 的测试行),再回归 C 端(health + /api/miniapp/products + 风物下单 _create_goods_order + 订单查询)。
  4. 再下线死代码(/api/miniapp/retail/* C 端端点),保留 retail.console_router 给 A 端。
  5. 最后再议是否"只留一套商品模型"——当前证据显示 goods(C端风物) 与 retail_products(A端admin) 各司其职,无重合可合并,故默认两套都保留、仅清 C 端死端点。
  6. 清理后复验:health + C 端接口 + 小程序主路径。
本盘点仅输出"必须保留"清单,未做任何删改。所有清理动作待 #321 方案 + 义父确认后执行。