84 lines
2.5 KiB
Markdown
84 lines
2.5 KiB
Markdown
# BACKEND_STRUCTURE.md
|
||
|
||
## 1. 当前结论(v0.1)
|
||
当前项目为纯前端本地处理架构:
|
||
- 无后端服务
|
||
- 无数据库
|
||
- 无认证系统
|
||
- 无远程 API
|
||
|
||
这不是遗漏,而是产品范围定义(见 PRD.md 的 Non-Goals)。
|
||
|
||
## 2. 数据处理位置
|
||
所有数据处理均在客户端完成:
|
||
- 文件解析:`src/core/parser.ts`
|
||
- 聚合构建:`src/core/sankey.ts`
|
||
- 状态承载:
|
||
- Web:`src/App.vue`(响应式状态 + localStorage 持久化)
|
||
- 小程序:`miniapp/pages/index/index.js`(页面状态)
|
||
- 小程序端聚合与解析:`miniapp/utils/sankey.js`
|
||
|
||
## 3. 当前“数据结构合同”
|
||
虽然没有数据库,但有稳定的数据结构合同。
|
||
|
||
### 3.1 RawTable
|
||
```ts
|
||
interface RawTable {
|
||
headers: string[];
|
||
rows: string[][];
|
||
}
|
||
```
|
||
|
||
### 3.2 MappingConfig
|
||
```ts
|
||
interface MappingConfig {
|
||
sourceDataColumn: number | null;
|
||
sourceDescriptionColumns: number[];
|
||
targetDescriptionColumns: number[];
|
||
delimiter: string;
|
||
}
|
||
```
|
||
|
||
### 3.3 SankeyBuildResult
|
||
```ts
|
||
interface SankeyBuildResult {
|
||
nodes: Array<{ name: string; kind: 'source' | 'target' }>;
|
||
links: Array<{ source: string; target: string; value: number }>;
|
||
meta: {
|
||
droppedRows: number;
|
||
warnings: string[];
|
||
};
|
||
}
|
||
```
|
||
|
||
## 4. 存储规则
|
||
- Web:
|
||
- 映射配置与上传文件快照持久化到 localStorage(刷新可恢复)。
|
||
- 导出结果通过浏览器下载能力交付给用户。
|
||
- 小程序:
|
||
- 页面状态在当前会话内存中维护(当前未做本地持久化恢复)。
|
||
- PNG 导出保存到系统相册;SVG 导出写入用户数据目录文件。
|
||
|
||
## 5. 认证与权限
|
||
- 当前不存在用户登录、权限校验、租户隔离。
|
||
- 所有用户在本地环境有相同行为能力。
|
||
|
||
## 6. API 合约
|
||
- 当前无 HTTP API。
|
||
- 唯一远程读取是静态样例文件:`GET /data/example0.xlsx`(同站静态资源,不是业务 API)。
|
||
|
||
## 7. 边界与异常处理
|
||
- 文件类型不支持:直接抛错并提示。
|
||
- 解析错误:保留页面可操作状态,允许重新上传。
|
||
- 聚合错误:展示错误信息,不产生图表。
|
||
- 行级数据问题:通过 warning 列表给出行号并跳过坏行。
|
||
|
||
## 8. 未来后端接入约束(预留)
|
||
仅当 PRD 明确扩展范围(账号、云保存、协作)时,才允许新增后端。届时必须先补充:
|
||
1. 数据库表结构(表、字段、类型、索引、关系)
|
||
2. API OpenAPI 合约
|
||
3. 认证模型(会话、令牌、权限)
|
||
4. 存储策略(文件与图快照)
|
||
|
||
在 PRD 未变更前,禁止实现任何后端功能。
|