diff options
| author | Somhairle H. Marisol <[email protected]> | 2026-09-21 00:06:45 +0800 |
|---|---|---|
| committer | Somhairle H. Marisol <[email protected]> | 2026-09-21 00:06:45 +0800 |
| commit | 2ada70d6467aec11b45328112d598454ca50f2d6 (patch) | |
| tree | 5deab7d12095dfd0599c109edc2200a38258040e /README.md | |
| parent | c60905e9e7f992a7f8c79c3812e92a44b2d606f5 (diff) | |
| download | fund-lab-2ada70d6467aec11b45328112d598454ca50f2d6.tar.gz | |
feat(api): 接入基金 PostgreSQL 持久化与幂等接口
[变更性质]
- 本提交新增基金创建与读取的 PostgreSQL 持久化能力,并完成 3a API 收口验证。
[新增功能]
- 提供带事务和幂等键的基金创建、重放、冲突检测及基金读取接口。
- 覆盖认证、JSON 输入、数值边界、进程重启持久化和 SQL 故障回滚测试。
[实现方案]
- 使用 Npgsql 建立 `funds` 与 `fund_idempotencies` 表,并以 advisory lock 串行化同一幂等键。
- 通过真实 Kestrel 子进程和临时 PostgreSQL 验证 HTTP 行为;同步更新环境、构建和交接文档。
[影响范围]
- API 新增 PostgreSQL 配置要求 `FUND_LAB_DATABASE_URL`,前端构建入口和本地验证命令同步明确。
- 本提交不包含 `docs/overnight-progress.md` 的现有 Hermes 修改。
Diffstat (limited to 'README.md')
| -rw-r--r-- | README.md | 21 |
1 files changed, 14 insertions, 7 deletions
@@ -1,16 +1,18 @@ # fund-lab -私人单用户模拟基金平台。当前仓库处于阶段 1 骨架和阶段 2a 纯 F# 账本切片阶段;尚未接入数据库、真实行情或真实下单。 +私人单用户模拟基金平台。当前仓库处于阶段 1 骨架和阶段 2a 纯 F# 账本切片阶段;已接入基金创建/读取 PostgreSQL 持久化,尚未接入真实行情或真实下单。 ## 本地验证 在仓库根目录运行: ```sh -dotnet test -dotnet build FundLab.sln +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 @@ -21,10 +23,15 @@ dotnet test tests/FundLab.Domain.Tests/FundLab.Domain.Tests.fsproj ```sh cd src/FundLab.Web -npm install -npm run build +PATH=/home/somhairle/projects/fund-lab/.tools/node-v22.23.2/bin:$PATH npm run build ``` -API 使用环境变量 `FUND_LAB_AUTH_TOKEN` 配置 Bearer token;仓库只提供 `.env.example`,不保存真实凭证。`/health` 可匿名访问,业务 API 需要 `Authorization: Bearer <token>`。 +仓库自带可复用的 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`;基线提交已独立发布并核对,最新 3a 持久化修改在完成最终验证前保持在本地工作树。 -运行时数据库、行情缓存、凭证和构建产物不应进入 Git。远端 Git 写入机制和准确 remote URL 尚未确认,因此当前只进行本地开发和验证。 +3a 收口测试还会启动独立临时 PostgreSQL 和真实 Kestrel 进程,覆盖 HTTP 创建、幂等重放/冲突、认证、畸形 JSON、金额边界、停止重启后的读取,以及首次 SQL 写入后故障的完整事务回滚。 |
