summaryrefslogtreecommitdiff
path: root/README.md
blob: 1fcd88b896f3c5e91fe9de2c13ff2bcb48885784 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# fund-lab

私人单用户模拟基金平台。已接入基金创建/读取 PostgreSQL 持久化与基于 akshare 的行情数据源(解释器缺失依赖时回退合成数据并显式标记 `_synthetic`),Web 端提供基金创建/读取界面;尚未接入真实下单。

## 本地验证

在仓库根目录运行:

```sh
dotnet build "FundLab.sln" --no-restore
dotnet test "FundLab.sln" --no-restore
```

API 持久化测试默认启动临时 Docker PostgreSQL 容器;运行 `dotnet test` 前需要 Docker。也可以用 `FUND_LAB_TEST_DATABASE_URL` 指向已有 PostgreSQL 实例。

只运行账本领域测试:

```sh
dotnet test tests/FundLab.Domain.Tests/FundLab.Domain.Tests.fsproj
```

构建前端:

```sh
cd src/FundLab.Web
PATH=/home/somhairle/projects/fund-lab/.tools/node-v22.23.2/bin:$PATH npm run build
```

仓库自带可复用的 Node.js 22.23.2/npm 10.9.8;系统 PATH 没有 npm 时使用上面的项目本地 PATH,不需要重新安装依赖。最近一次收口验证结果为:Fable/Vite 成功转换 65 个模块并以 exit 0 结束。

API 使用环境变量 `FUND_LAB_AUTH_TOKEN` 配置 Bearer token,使用 `FUND_LAB_DATABASE_URL` 配置 PostgreSQL 连接字符串;仓库只提供 `.env.example`,不保存真实凭证。`/health` 可匿名访问,业务 API 需要 `Authorization: Bearer <token>`。

基金创建接口为 `POST /api/funds`,需要 `Idempotency-Key` 和 decimal 字符串字段;基金读取接口为 `GET /api/funds/{id}`。首次启动会自动创建所需表。

运行时数据库、行情缓存、凭证和构建产物不应进入 Git。当前 `origin` 为 `/home/somhairle/git/fund-lab.git`;基线提交已独立发布并核对,最新 3c-1 Web 建档切片修改在完成最终验证前保持在本地工作树。

3a 收口测试还会启动独立临时 PostgreSQL 和真实 Kestrel 进程,覆盖 HTTP 创建、幂等重放/冲突、认证、畸形 JSON、金额边界、停止重启后的读取,以及首次 SQL 写入后故障的完整事务回滚。