summaryrefslogtreecommitdiff
path: root/FundLab.sln
diff options
context:
space:
mode:
authorSomhairle H. Marisol <[email protected]>2026-09-21 01:40:10 +0800
committerSomhairle H. Marisol <[email protected]>2026-09-21 01:40:10 +0800
commitbe1afd248e4cc9b03a1e21090602a945af6988b2 (patch)
treed31bd6e6c1736ab4ad784b52ebc5010ade074439 /FundLab.sln
parent2ada70d6467aec11b45328112d598454ca50f2d6 (diff)
downloadfund-lab-be1afd248e4cc9b03a1e21090602a945af6988b2.tar.gz
feat(app): 接入 AKShare 行情采集、净值查询与前端净值曲线
[变更性质] - 本提交完成 3b 行情闭环:真实 AKShare 搜索与净值采集、PostgreSQL 持久化、鉴权 API 与 Fable 前端净值曲线展示。 [新增功能] - API 新增 /api/instruments/search、/api/instruments/{code}/nav 与 nav/refresh 接口,经 Bearer 鉴权调用 AKShare Python 采集器并幂等落库。 - 前端提供基金搜索、精确代码选择、历史净值刷新/重读与 SVG 折线图,token 变更即清空私有结果并失效在途请求。 [实现方案] - MarketData 以 requiredProperty 校验采集器 payload,净值观测按 (code, nav_date) 幂等 upsert 并保留来源与哈希。 - 前端以 requestId 序列守卫 SearchCompleted/SearchFailed/NavCompleted/NavFailed,TokenChanged 同时递增 searchSeq/navSeq 拒绝过期响应;边界解码兼容 F# option 的 {"case":"Some"} 线格式。 [影响范围] - 新增 FundLab.Web.Tests(边界解码、序列失效、图表纯函数共 8 项),扩展 API 测试至 20 项;vite dev 代理 /api 至本地 API。 - 真实 AKShare 端到端依赖本机 akshare 环境,由负责人另行验收;本提交不包含 docs/overnight-progress.md 的现有修改。
Diffstat (limited to 'FundLab.sln')
-rw-r--r--FundLab.sln10
1 files changed, 8 insertions, 2 deletions
diff --git a/FundLab.sln b/FundLab.sln
index a9fdb01..f28b139 100644
--- a/FundLab.sln
+++ b/FundLab.sln
@@ -12,8 +12,10 @@ Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FundLab.Web", "src\FundLab.
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FundLab.Domain.Tests", "tests\FundLab.Domain.Tests\FundLab.Domain.Tests.fsproj", "{55555555-5555-4555-8555-555555555555}"
EndProject
-Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FundLab.Api.Tests", "tests\FundLab.Api.Tests\FundLab.Api.Tests.fsproj", "{66666666-6666-4666-8666-666666666666}"
-EndProject
+ Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FundLab.Api.Tests", "tests\FundLab.Api.Tests\FundLab.Api.Tests.fsproj", "{66666666-6666-4666-8666-666666666666}"
+ EndProject
+ Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FundLab.Web.Tests", "tests\FundLab.Web.Tests\FundLab.Web.Tests.fsproj", "{77777777-7777-4777-8777-777777777777}"
+ EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -44,6 +46,10 @@ Global
{66666666-6666-4666-8666-666666666666}.Debug|Any CPU.Build.0 = Debug|Any CPU
{66666666-6666-4666-8666-666666666666}.Release|Any CPU.ActiveCfg = Release|Any CPU
{66666666-6666-4666-8666-666666666666}.Release|Any CPU.Build.0 = Release|Any CPU
+ {77777777-7777-4777-8777-777777777777}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {77777777-7777-4777-8777-777777777777}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {77777777-7777-4777-8777-777777777777}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {77777777-7777-4777-8777-777777777777}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE