80 lines
6.6 KiB
Markdown
80 lines
6.6 KiB
Markdown
# 开发记忆与交接状态
|
||
|
||
更新日期: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(不提交),后续必须按新结构重新审查、实现和测试。下一步仍为候选审核闭环,不能将其描述为已完成。
|