# 切片 05：集合竞价、题材库、人气热榜与龙虎榜

> 基线：`814e757`（切片 04）
> 回档标签：`xiaobai-preservation-slice-05-20260731`
> 结论：源码、API、数据库、真实页面和全量回归通过；最终视觉仍等待全站人工验收

## 1. 原实现归位

本切片没有从`next/`取用代码，也没有重写计算、页面或接口。集合竞价、题材库和人气热榜原本
共享`MarketInsightsService`，其中竞价候选会直接调用人气榜热度数据，因此整体移动到公共行情
领域，避免拆出互相复制的实现；各页面入口仍按功能目录归位。

| 原位置 | 新的唯一实现位置 | 兼容方式 |
|---|---|---|
| `app/market_insights.py` | `app/backend/features/market/insights.py` | 根级模块导出同一类对象 |
| `DashboardService`竞价入口 | `app/backend/features/auction/service.py` | `AuctionServiceMixin` |
| `DashboardService`题材入口 | `app/backend/features/themes/service.py` | `ThemeServiceMixin` |
| `DashboardService`人气入口 | `app/backend/features/popularity/service.py` | `PopularityServiceMixin` |
| `DashboardService`龙虎榜及游资档案 | `app/backend/features/dragon_tiger/service.py` | `DragonTigerServiceMixin` |
| 竞价、人气、龙虎榜持久化方法 | 对应功能目录的`repository.py` | `ReviewDatabase`继承原接口 |

Tushare Provider 中`hot_money_profiles`与`dragon_tiger`继续保持切片02归位的唯一实现，没有为目录
形式再制造一套数据构造逻辑。

## 2. 源码与接口等价

- `test_preservation_slice_market_insights.py`逐项比较22个市场洞察方法、8个页面服务方法、7个
  Repository方法和2个Tushare方法，全部与根目录原版无位置信息AST一致。
- `DashboardService`与`ReviewDatabase`不再重复保留已移动方法；根级`market_insights`与新模块
  暴露同一个`MarketInsightsService`类对象。
- 原版`8784`和迁移版`8785`使用同一数据库的独立副本，集合竞价、题材库、题材详情、人气热榜、
  龙虎榜、游资档案和席位别名共7个真实API状态码及JSON一致。
- 题材详情在当前外部网络条件下两版均返回HTTP 400；差分只排除每次请求随机生成的
  `request_id`，错误码与错误内容仍完全一致。
- 完整接口摘要见`api-diff.json`。

## 3. 数据库差分

- 两个副本均为62个schema对象，哈希均为
  `60a4e044f0ddb6502e44b45f65bedc1a0a31d4bd596f386d4ccfe153a6c8ddd1`。
- `auction_factors` 511914行、`popularity_factors` 232行、`lhb_institution_daily` 47行、
  `seat_aliases` 0行、`stock_master` 5535行均逐行一致。
- 完整表计数与哈希见`database-diff.json`；运行数据库副本已在验收后删除，未提交凭据或正式数据。

## 4. 真实浏览器检查

- 1920×1080日间模式检查集合竞价、题材库、人气热榜和龙虎榜四页；均无横向溢出，控制台无
  错误或警告。
- 集合竞价载入30行重点候选；题材库载入394个题材及选中题材成分股；人气热榜载入3个摘要
  模块和200行综合榜；龙虎榜按当前缓存显示既有不可用空态。
- 四页HTML、主JS、CSS及各自页面JS与根目录原版字节哈希一致。
- 截图SHA-256：
  - `app-light-auction-1920x1080.png`：`8065086c8f2b360aeb1004bd60429f3e2d7f1b8c872ec4a965e9a5d0c016b915`
  - `app-light-themes-1920x1080.png`：`80e1e41101497ee7213e1dadfaa4c9572a1c47b3495edd09e36745ccdb639402`
  - `app-light-popularity-1920x1080.png`：`614d6b7770f4e9ec72c059ab8a4129486df9eff5c4dd7e8279cc68ebcb80a36b`
  - `app-light-dragon-tiger-1920x1080.png`：`2f1e2ad3a9bc3874c73bae884fc8744177cef354c7176559da1453fab1f85993`

## 5. 自动验证与保留边界

| 验证 | 结果 |
|---|---:|
| `python -m unittest discover -s tests -q` | 258项通过 |
| `python -m unittest tests.test_preservation_slice_market_insights -q` | 6项通过 |
| `npx.cmd playwright test --reporter=dot` | 45项通过 |
| `git diff --check` | 通过 |

- 竞价、人气和龙虎榜因子同时服务切片06智能选股，迁移后仍由`ReviewDatabase`原方法名暴露。
- 前端资产保持原位置，切片10再按页面职责归档；本切片没有改DOM、CSS、动画或交互。
- 没有删除待定代码、没有修改根目录正式数据库、没有切换Docker/NAS。
