Files
Sansheng-Intelligence/docs/CSHARP-NODE-HANDOFF.md
T

53 lines
3.0 KiB
Markdown
Raw Normal View History

# C# 后端与 Node 前端交接
本仓库是可运行参考实现,不要求研发团队继续使用 Python 前端,也不要求用 C# 重写爬虫。推荐拆分边界如下。
## C# 后端
适合负责:用户、企业、角色权限、订阅市场、任务分派、提醒、收藏、人工复核、审计日志和 API。不要把抓取器放进 Web 请求生命周期;通过计划任务或消息队列运行采集作业。
建议最小实体:
- `Source`:来源、层级、语言、证据词、抓取策略、启停状态。
- `FetchRun`:开始/结束、HTTP 状态、内容指纹、证据、错误。
- `IntelligenceItem`:稳定 ID、栏目、事实字段、分析字段、适用地区、来源版本。
- `ItemSource`:一条聚合情报与多个来源的多对多关系。
- `UserPreference`:企业关注的国家、平台、品类和角色。
- `UserTask`:负责人、截止日、提醒、已处理/不相关状态。
数据库推荐 PostgreSQL;本地单机试运行可用 SQLite。正文去重建立 `normalized_title + start_date + region` 唯一候选键,内容指纹建立普通索引,外部 URL 使用规范化哈希索引。原始 HTML 只在需要审计时对象存储短期保留,不塞入主表。
API 可直接映射现有 JSON:
```text
GET /api/intelligence/summary
GET /api/intelligence/items?section=&market=&platform=&from=&to=&cursor=
GET /api/intelligence/items/{id}
GET /api/platforms
GET /api/sources/{id}/runs
POST /api/tasks
PATCH /api/tasks/{id}
```
服务端必须再次校验翻译链接和外链协议,仅允许 `http/https`。用户偏好、任务和人工结论与自动抓取事实分表,避免下一轮增量更新覆盖人工数据。
## Node 前端
可以迁移到 Next.js 或 React,但不必重写信息架构。保留七个业务入口和趋势四个子类,默认趋势页进入灵感图库。推荐:
- TypeScript 定义与 `docs/DATA-CONTRACT.md` 一致的模型。
- TanStack Query 或框架原生数据缓存处理分页;Zustand 只存筛选、主题和用户偏好,不存整库情报。
- 服务端渲染栏目和详情,客户端只增强筛选、收藏、任务和翻译门控。
- 图片使用源站或授权地址时保留来源;没有图时继续使用 HTML 文字海报,不生成无来源的假图片。
- 触控目标至少 44px,业务正文至少 16px,移动端七分类首屏可发现。
## 迁移顺序
1. 先冻结 JSON v2 契约,将当前两份发布 JSON 导入新 API。
2. Node 前端改为读 API,逐页对比旧静态站;此时抓取仍由 Python 定时任务运行。
3. C# 增加用户偏好、任务和权限,不改自动事实字段。
4. 如确有团队维护收益,再逐个把稳定解析器迁移到 .NET;每迁移一个源,用相同 URL、证据词和快照做双跑比对。
5. 最后将 SEO canonical 切向新域名,并保留旧 URL 的 301 映射。
不要一开始重写 57 个源。先把现有采集器当独立批处理服务,C# 和 Node 围绕稳定 JSON 契约开发,风险和交付周期最低。