summaryrefslogtreecommitdiff
path: root/src/FundLab.Api/Program.fs
diff options
context:
space:
mode:
authorSomhairle H. Marisol <[email protected]>2026-09-21 00:06:45 +0800
committerSomhairle H. Marisol <[email protected]>2026-09-21 00:06:45 +0800
commit2ada70d6467aec11b45328112d598454ca50f2d6 (patch)
tree5deab7d12095dfd0599c109edc2200a38258040e /src/FundLab.Api/Program.fs
parentc60905e9e7f992a7f8c79c3812e92a44b2d606f5 (diff)
downloadfund-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 'src/FundLab.Api/Program.fs')
-rw-r--r--src/FundLab.Api/Program.fs10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/FundLab.Api/Program.fs b/src/FundLab.Api/Program.fs
index d5cc0b2..4c757d6 100644
--- a/src/FundLab.Api/Program.fs
+++ b/src/FundLab.Api/Program.fs
@@ -1,15 +1,23 @@
module FundLab.Api.Program
+open System
open Giraffe
open Microsoft.AspNetCore.Builder
open Microsoft.Extensions.DependencyInjection
+let private requiredEnvironment name =
+ match Environment.GetEnvironmentVariable(name) with
+ | value when not (String.IsNullOrWhiteSpace value) -> value
+ | _ -> failwithf "%s must be configured" name
+
[<EntryPoint>]
let main argv =
let builder = WebApplication.CreateBuilder(argv)
builder.Services.AddGiraffe() |> ignore
+ let repository = FundRepository(requiredEnvironment "FUND_LAB_DATABASE_URL")
+ repository.EnsureSchema()
let app = builder.Build()
- app.UseGiraffe(App.createApplication())
+ app.UseGiraffe(App.createApplication(repository))
app.Run()
0