2d847e154f
中华文明全图鉴——文物全图系统(PC Web 地图 + NestJS API + 管理后台)。 含三大 IP(文物南迁北归 / 国宝海外回归 / 博物馆手艺人)、AI 文物对话、 文物地图与详情、以及 demo-video-kit 演示视频生成工具。
237 lines
9.4 KiB
Markdown
237 lines
9.4 KiB
Markdown
# 中华文明全图鉴——技术架构文档
|
|
|
|
## 1. 架构目标
|
|
|
|
本项目第一阶段优先建设 **PC Web 地图站 MVP**,目标是在 PC 大屏上提供专业、美观、有探索趣味的文物地图体验,并配套机构/专家/编辑后台、后端 API、PostGIS 地理数据底座和可扩展的 AI/内容能力。
|
|
|
|
## 2. 架构原则
|
|
|
|
- **PC Web 优先**:第一阶段不做完整微信小程序,优先保证大屏地图、筛选、详情抽屉、图层和统计体验。
|
|
- **数据可信优先**:所有文物、位置、标签、故事、数字资产均记录来源、审核状态和操作日志。
|
|
- **PostGIS 优先**:文物位置、模糊区域、地图范围查询、附近查询、路线查询统一基于 PostgreSQL + PostGIS。
|
|
- **前后端类型一致**:优先采用 TypeScript 技术栈,减少接口字段漂移。
|
|
- **模块化演进**:MVP 采用单体 API + 模块化目录,后续可拆分搜索、AI、内容、审核等服务。
|
|
- **AI 后置增强**:MVP 先预留 AI 接口与数据结构,AI 标签推荐、RAG、AIGC 在后续阶段逐步接入。
|
|
- **测试随阶段推进**:每个阶段必须保留接口测试、数据测试、前端测试和文档更新记录。
|
|
|
|
## 3. 推荐技术栈
|
|
|
|
| 模块 | 技术选型 | 说明 |
|
|
|---|---|---|
|
|
| PC Web 地图站 | Next.js + React + TypeScript | 面向公众的大屏地图、详情、搜索、筛选 |
|
|
| 管理后台 | React + TypeScript + Ant Design | 机构、文物、标签、位置、审核、日志管理 |
|
|
| 后端 API | NestJS + TypeScript | REST API、权限、业务服务、OpenAPI 文档 |
|
|
| 主数据库 | PostgreSQL + PostGIS | 结构化数据与地理数据统一存储 |
|
|
| 缓存 | Redis | 热点地图点位、会话、限流、异步任务状态 |
|
|
| 搜索 | PostgreSQL 基础搜索,后续 OpenSearch | MVP 先用数据库搜索,数据增长后升级 |
|
|
| 向量检索 | pgvector,后续 Milvus | AI/RAG 阶段启用 |
|
|
| 对象存储 | 本地 MinIO / 云 OSS / COS / S3 | 图片、音频、视频、3D 模型、资料附件 |
|
|
| 地图引擎 | MapLibre GL JS | PC Web 大屏地图、图层、点位聚合、路线 |
|
|
| 队列 | BullMQ + Redis | 后续 AI 生成、导入、图片处理等异步任务 |
|
|
| 部署 | Docker Compose,后续 Kubernetes | MVP 简化部署,中后期可扩展 |
|
|
| 监控 | Sentry + OpenTelemetry + Prometheus/Grafana | 前后端错误、接口耗时、服务健康 |
|
|
|
|
## 4. 推荐仓库结构
|
|
|
|
```txt
|
|
wenwumap/
|
|
apps/
|
|
web/ # PC Web 地图站
|
|
admin/ # 管理后台
|
|
api/ # NestJS 后端 API
|
|
packages/
|
|
shared/ # 共享类型、枚举、工具函数
|
|
db/ # 数据库 schema、migration、seed
|
|
ui/ # 可复用 UI 组件,后续抽取
|
|
docs/ # 后续补充的设计、接口、测试文档
|
|
infra/
|
|
docker-compose.yml # 本地 PostgreSQL/PostGIS、Redis、MinIO
|
|
nginx/ # 反向代理配置,后续使用
|
|
scripts/ # 数据导入、校验、测试脚本
|
|
0-中华文明全图鉴.md
|
|
1-prd.md
|
|
2-task.md
|
|
3-architecture.md
|
|
4-data-model.md
|
|
5-api.md
|
|
```
|
|
|
|
## 5. 系统逻辑架构
|
|
|
|
```txt
|
|
┌───────────────────────────────────────────────┐
|
|
│ 用户访问层 │
|
|
│ PC Web 地图站 / 管理后台 / 后续小程序 │
|
|
└──────────────────────┬────────────────────────┘
|
|
│ HTTPS REST API
|
|
┌──────────────────────▼────────────────────────┐
|
|
│ API 服务层 │
|
|
│ Auth / Artifact / Institution / Location / Tag │
|
|
│ Map / Asset / AuditLog / Search / Admin │
|
|
└───────────────┬───────────────┬───────────────┘
|
|
│ │
|
|
┌───────────────▼───────┐ ┌─────▼────────────────┐
|
|
│ PostgreSQL + PostGIS │ │ Redis / Queue │
|
|
│ 文物、机构、位置、标签 │ │ 缓存、限流、异步任务 │
|
|
└───────────────┬───────┘ └─────┬────────────────┘
|
|
│ │
|
|
┌───────────────▼───────────────▼────────────────┐
|
|
│ 扩展能力层 │
|
|
│ 对象存储 / 搜索 / pgvector / AI/RAG / 内容生成 │
|
|
└───────────────────────────────────────────────┘
|
|
```
|
|
|
|
## 6. 前端架构
|
|
|
|
## 6.1 PC Web 地图站
|
|
|
|
核心页面:
|
|
|
|
- 首页
|
|
- 地图页
|
|
- 文物详情页
|
|
- 机构详情页
|
|
- 搜索结果页
|
|
- 专题页占位
|
|
|
|
核心组件:
|
|
|
|
- 地图主画布
|
|
- 左侧筛选栏
|
|
- 右侧详情抽屉
|
|
- 顶部数据统计栏
|
|
- 图层控制面板
|
|
- 地图图例
|
|
- 文物卡片
|
|
- 机构卡片
|
|
- 文物故事钩子
|
|
- 数据来源与可信度标识
|
|
|
|
PC 端设计要求:
|
|
|
|
- 专业:信息层级、可信度、来源、审核状态清晰。
|
|
- 美观:东方色彩、文博纹样、克制质感、现代卡片。
|
|
- 趣味:点位 hover、聚合展开、故事短句、探索反馈、路线叙事。
|
|
- 克制:避免过度卡通化,不削弱文物信息可信度。
|
|
|
|
## 6.2 管理后台
|
|
|
|
后台模块:
|
|
|
|
- 登录与权限
|
|
- 仪表盘
|
|
- 机构管理
|
|
- 文物管理
|
|
- 位置管理
|
|
- 标签管理
|
|
- 数字资产管理
|
|
- 操作日志
|
|
- 批量导入
|
|
- 审核任务占位
|
|
|
|
## 7. 后端模块划分
|
|
|
|
| 模块 | 职责 |
|
|
|---|---|
|
|
| AuthModule | 登录、鉴权、角色权限、机构数据隔离 |
|
|
| UserModule | 用户、后台账号、角色绑定 |
|
|
| InstitutionModule | 机构信息、机构点位、机构文物列表 |
|
|
| ArtifactModule | 文物主数据、详情、状态、搜索筛选 |
|
|
| LocationModule | 文物位置、当前位置、历史位置、地图范围查询 |
|
|
| TagModule | 标签分类、标签定义、文物标签绑定 |
|
|
| AssetModule | 图片、文件、3D 模型等数字资产元数据 |
|
|
| MapModule | 地图点位、聚合、统计、图层数据 |
|
|
| AuditLogModule | 操作日志、关键字段变更记录 |
|
|
| ImportModule | 批量导入、数据校验、导入报告 |
|
|
| HealthModule | 服务健康检查 |
|
|
|
|
## 8. 数据流
|
|
|
|
## 8.1 PC 地图浏览数据流
|
|
|
|
```txt
|
|
用户打开地图页
|
|
→ Web 请求 /map/summary 获取顶部统计
|
|
→ Web 请求 /map/points?bbox&zoom&filters 获取地图点位
|
|
→ 用户点击点位
|
|
→ Web 请求 /artifacts/{id} 或 /institutions/{id}/artifacts
|
|
→ 右侧详情抽屉展示文物或机构信息
|
|
```
|
|
|
|
## 8.2 后台录入数据流
|
|
|
|
```txt
|
|
机构用户登录后台
|
|
→ 新增或编辑文物
|
|
→ 保存草稿
|
|
→ 录入位置、标签、图片
|
|
→ 提交发布
|
|
→ 系统校验字段和坐标
|
|
→ 写入操作日志
|
|
→ 前台地图可见
|
|
```
|
|
|
|
## 8.3 位置展示数据流
|
|
|
|
```txt
|
|
artifact_locations 保存多条位置记录
|
|
→ 后端根据 valid_until、verified_at、display_status 计算最新有效位置
|
|
→ 地图接口只返回当前用户权限可见的精度
|
|
→ 私密或敏感位置返回模糊区域
|
|
```
|
|
|
|
## 9. 权限模型
|
|
|
|
| 角色 | 权限范围 |
|
|
|---|---|
|
|
| 游客 | 浏览公开地图、文物详情、机构信息 |
|
|
| 注册用户 | 收藏、分享、纠错、后续海外线索提交 |
|
|
| 机构用户 | 管理本机构文物、位置、标签、资产 |
|
|
| 编辑 | 管理故事、角色卡、标签、内容模板 |
|
|
| 专家 | 审核海外线索、校验史实 |
|
|
| 运营 | 用户、贡献体系、专题、活动 |
|
|
| 管理员 | 全局管理、权限、审计、系统配置 |
|
|
|
|
MVP 优先实现:
|
|
|
|
- 管理员
|
|
- 机构用户
|
|
- 游客
|
|
|
|
## 10. 地图与地理策略
|
|
|
|
MVP 地图策略:
|
|
|
|
- 使用 MapLibre GL JS 承载 PC Web 地图交互。
|
|
- 后端通过 PostGIS 提供 bbox 范围查询。
|
|
- 低缩放级别返回聚合点或机构点。
|
|
- 高缩放级别返回具体文物点。
|
|
- 敏感位置返回模糊区域或城市级中心点。
|
|
|
|
后续增强:
|
|
|
|
- 矢量瓦片 MVT。
|
|
- H3/Geohash 预聚合。
|
|
- 南迁路线 LineString。
|
|
- 室内展厅平面图叠加。
|
|
|
|
## 11. 测试策略
|
|
|
|
| 阶段 | 测试类型 | 内容 |
|
|
|---|---|---|
|
|
| 阶段 0 | 文档测试 | 架构、数据模型、API 与 PRD/任务清单一致性检查 |
|
|
| 阶段 1 | 单元测试 | 后端 service、权限、数据校验、地图查询 |
|
|
| 阶段 1 | 接口测试 | Auth、机构、文物、位置、标签、地图接口 |
|
|
| 阶段 1 | 数据测试 | migration、seed、PostGIS 索引、范围查询 |
|
|
| 阶段 1 | 前端测试 | 地图加载、点位交互、筛选、详情抽屉 |
|
|
| 阶段 1 | 视觉验收 | PC 专业美观、趣味交互、大屏适配 |
|
|
| 阶段 1 | E2E 测试 | 管理后台录入文物后,PC 地图可展示 |
|
|
|
|
## 12. 阶段 0 当前结论
|
|
|
|
- 第一阶段不做完整小程序,优先 PC Web 地图站。
|
|
- MVP 后端采用 NestJS + PostgreSQL/PostGIS。
|
|
- MVP 搜索先用数据库能力,保留 OpenSearch 扩展点。
|
|
- MVP AI 能力先预留,不阻塞核心地图上线。
|
|
- 所有阶段完成后必须更新 `2-task.md` 状态,并记录测试结果。
|