Files
Veyra/docs/development-state.md
T
Blizzard bffdb3858b
Checks / verify (push) Failing after 2m37s
feat: 基础框架搭建完毕
2026-10-07 09:27:47 +08:00

80 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 开发记忆与交接状态
更新日期:2026-10-06。
## 产品与依据
- 产品名称「见势 · Veyra」,面向从空仓开始的 A 股投资者。
- 根目录 `hengce_fullstack_technical_design_v1.md` 为实施设计,`hengce_app_admin_prototype.html` 为双端交互与视觉参考,均保留。
- 目标闭环:偏好 → 观察候选 → 证据 → 买入计划 → 条件提醒 → 用户记录成交 → 持仓监控 → 退出 → 复盘。
- Go 负责业务、账本与风控;Python 负责量化研究与回测;App 使用 React Native + Expo。
- 首期用户自行交易,提醒不代表成交,不自动下单。
## 用户确认的硬性规则
- 后端严格遵循 Go 工程规范,采用 cmd/internal 分层、依赖注入、显式 SQL、context、错误处理及 gofmt/go vet。
- 所有数据库表以 `veyra_` 开头,字段 snake_case。
- 主键为字符串 UUID:数据库 varchar(36),Go string;外键同类型。
- 映射去前缀后 PascalCase,例如 `veyra_user` 对应 `User`。
- 管理端使用 Vite + React + Tailwind CSS + shadcn/ui,并通过 Go embed 嵌入后端。同一二进制提供页面和 API。
- PostgreSQL:192.168.100.127:5432,数据库 veyra;Redis:192.168.100.127:6379,无用户名、有密码。
- 凭据保存在本地 `.env`,禁止写进 Git 或项目记忆。
## 已实现
- Go API:健康检查、结构化日志、请求 ID、超时、优雅停机。
- 独立建库与迁移命令,迁移使用事务、并发锁、checksum 和字符串 UUID 迁移记录。
- 两版迁移:基础用户/账户;身份凭据/会话/账户状态/初始现金流水。
- local/test 开发身份初始化;密码 bcrypt 哈希、随机会话凭据、数据库只保存会话哈希。
- 管理端 Cookie 和 App Bearer 会话隔离,退出撤销、过期与状态校验、管理员权限校验。
- Redis 登录限流;管理端 Cookie 为 HttpOnly、SameSite=Strict,写操作校验同源 Origin。
- 账户创建、归属查询、账户列表;模拟资金初始化原子入账,整数分计算、金额字符串 API;真实记录账户现金未知。
- 管理端登录页、服务总览、用户列表和十个工作区入口;未实现业务页面显示建设中。
- OpenAPI、依赖锁文件、Makefile 和带 PostgreSQL 集成测试服务的 CI。
- `make build` 生成内嵌管理端的 veyra-api,以及 veyra-db 和 veyra-user。
## 当前工程目录
- 用户指出旧后端目录过深,当前已改为仓库根目录的单 Go module。
- module 为 git.sundynix.cn/Blizzard/Veyra,与仓库地址一致;删除单模块 go.work。
- cmd/api、cmd/db、cmd/user 放入口与装配。
- internal/model 放模型,internal/service 放业务,internal/repository 放 SQL 与事务,internal/handler 放 HTTP 路由和协议适配。
- internal/config、database、adminui、apperror、ratelimit 放当前实际需要的设施;避免多余嵌套和空目录。
- 管理端由 apps/admin 迁至 web/admin;embed 构建产物由 internal/adminui/dist 提供。
- Makefile、CI、npm workspace/锁文件、Go 导入路径与 README 一并更新,原有命令和接口保持一致。
- 原始设计报告中的 monorepo 目录仅为旧规划,当前实现以本文件、AGENTS.md 和 README 的结构为准。
- 迁移文件仅移动路径,已逐字节核对两版 SQL 与原提交一致,不影响已执行迁移的 checksum。
- 新结构已通过前端构建与 embed、Go 编译、race 检查和 go vet;真实数据库集成测试仍因连接限制跳过,不将目录迁移视作数据库验证。
## 验证与环境事实
- 已通过前端 TypeScript 检查与生产构建、Go 编译、go vet、单元与无监听 HTTP 测试(含 race 检查)。
- OpenAPI YAML 已解析,内部引用检查通过。
- 数据库集成测试代码包含迁移幂等、checksum、UUID、身份事务、会话撤销/过期、Cookie/Origin 和账户隔离/现金初始化验证。
- 本轮未实际执行数据库集成测试:执行环境不能连接内网;未设置测试数据库连接时这些测试明确 skip,不能报告为已验证数据库行为。
- 用户确认本机和数据库处于同一内网,并已在本机终端执行首次建库/迁移。
- 命令执行沙箱访问 PostgreSQL/Redis 的 TCP 连接返回 errno=1 Operation not permitted,本地监听同样受限。这不表示用户主机网络有问题。
- 最新第二版迁移与管理员初始化是否在用户终端执行,尚未获得明确确认;不能假定已执行成功。
## 启动与后续
- 已初始化数据库使用 `make db-migrate` 应用后续迁移,无需重复建库。
- 管理端初始化:`.env` 的 ADMIN_LOGIN / ADMIN_PASSWORD,执行 `make admin-create`;App 测试身份使用 DEV_USER_LOGIN / DEV_USER_PASSWORD 和 `make user-create`。
- 本地 `.env` 已生成独立开发身份随机密码;模板无密码,已有身份不会由初始化命令覆盖。
- `make api` 先构建前端,再运行后端;默认 http://127.0.0.1:8080。
- 当前开发密码登录仅限 local/test;正式短信登录、刷新流程、MFA 和细分 RBAC 待实现。
- 下一步:候选修订与审核发布、计划预览与确认,再实现成交账本、持仓监控和复盘。
- 行情、AI、Worker、真实回测与 App UI 尚未实现;不得把当前状态描述为完整产品已交付。
## Git 操作请求
用户本轮明确要求保存记忆、git add、commit 和 push。目标为当前 master 分支的 origin;操作结果以实际 Git 输出为准,禁止将失败的提交或推送记作已完成。
本轮操作结果:项目记忆与忽略规则已保存,候选文件检查未发现本地配置的长密码。仓库当前没有提交;git add 因无法创建 .git/index.lock(Operation not permitted)失败,尚未 commit/push。远程分支读取失败,原因是执行环境无法解析远程域名。后续需在有 Git 写权限和网络访问能力的终端完成提交与推送,先确认远程状态;不强制推送、不覆盖远程历史。
后续检查发现本地已有 ba6dfff(init: initial commit)等提交,说明前述无提交状态已变化;远程推送状态未经核验。此次目录调整尚未提交,Git 输出中的旧路径删除与新路径新增是迁移表现,提交时应一并暂存。
## 本轮开发状态
原计划推进模拟候选修订、审核与发布;用户中途指出目录不合理,本轮优先完成工程结构纠正与回归。候选功能尚未接入仓库交付代码,不新增第三版迁移;相关草稿保留在本地 .cache/candidate-draft(不提交),后续必须按新结构重新审查、实现和测试。下一步仍为候选审核闭环,不能将其描述为已完成。