73 Commits
Author SHA1 Message Date
yml2213 64a4e5bb16 fix(distribution): 修正分销后台入口地址并收口主站后台隐藏路径
- 新增前端 distributionAdmin 工具:优先 VITE_DISTRIBUTION_ADMIN_URL,
  本地开发回退 5190,生产按 distribution.<主站域名> 推导
- 替换主站后台「打开独立分销后台」按钮与开通凭证中硬编码的 :5190
- 分销后台复制凭证改用 window.location.origin,去掉硬编码 http
- Caddyfile 中 /manage-7x9k2p 仅主站域名放行,分站域名统一 404
- 构建/部署链路透传 VITE_DISTRIBUTION_ADMIN_URL 与 ADMIN_BASE_PATH
2026-09-16 15:09:38 +08:00
yml2213andCursor 47ceb53c09 test: 测试库改为模板克隆并纳入完整租号 e2e
每个包不再重复 DROP+迁移,清空改用 DELETE 并重置自增,go test ./... 从约 6 分钟降到十几秒。租号全链路改走 NewTestDB,去掉依赖额外 DSN 才会跑的过渡测试。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-10 15:46:18 +08:00
yml2213 cbd5412315 test: 后端测试从 SQLite 全面切换到 MySQL,与生产环境对齐
测试库不再使用 SQLite 内存库,改为每个测试包独立的 MySQL 库,
表结构由 backend/migrations 的真实迁移建立。

基础设施
- 新增 internal/database/testdb.go:NewTestDB() 保持原签名(28 处调用零改动),
  内部连接 MySQL 测试库,首次调用重建库并执行全部真实迁移,之后每次调用清空全表
- 库名 = 测试库基础名 + 包目录名,同包共享、跨包隔离,使 go test ./... 可并发执行
  (共用一库时各包会互相 DROP/CREATE 导致 database exists)
- 新增 NewDryRunDB():MySQL 方言 + DryRun,供断言 SQL 形态的 5 处测试使用
- 新增 AutoMigrateIfMissing():只对不存在的表 AutoMigrate,
  避免改动迁移定义的索引与约束
- 新增 scripts/prepare-test-db.sh:建库与通配授权,可重复执行
- 33 处 sqlite.Open 全部替换,26 个测试文件改用 MySQL
- 删除 46 处手写 SQLite 方言 DDL(AUTOINCREMENT / INTEGER PRIMARY KEY / TEXT),
  表统一由真实迁移建立
- go.mod 移除 gorm.io/driver/sqlite 与 mattn/go-sqlite3
- 删除生产代码里 distribution/repository.go 的 sqlite 方言分支(strftime)

对齐环境后暴露并修复的真实问题
- DATE(col) 在 MySQL 返回 DATE 类型,使 Date string 字段变成 RFC3339 时间串,
  大盘日期会带出时间部分;28 处改为 DATE_FORMAT(col, '%Y-%m-%d')
- 系统自动创建分销结算批次时 created_by 写入 0,违反指向 admin_users 的外键,
  生产会直接插入失败;改为写 NULL(新增 adminRef helper)
- MySQL DATETIME 仅到秒,静默截断 Go 侧写入的时间,
  导致租用时长计算与结算时点回读比对偏差;
  rental_orders 的 9 个业务时间列提到 DATETIME(6)
- 测试数据补齐严格模式要求的 NOT NULL 列、修正超出列长的取值、补齐外键父记录

迁移
- 000065 的 ALTER TABLE rental_orders 一并完成业务时间列精度调整,
  feature 侧不再单开迁移文件

脚本与文档
- check.sh / check-backend-coverage.sh 去掉 -p 1 串行与 SQLite 相关注释
- 更新 docs/Repository层测试补充总结.md 的测试运行说明
2026-09-10 14:34:01 +08:00
yml2213 d762b33f54 refactor(distribution): 重写分销迁移并落地利润百分比分成与货架比例
将 000064-000078 合并为 064/065/066,默认规则改为收号 35%、卖出 40%、服务费 25%。
货架调价改为增加分站 1 元兑换哈夫币比例。sql-guard 仅保护 main 已发布迁移。
2026-09-08 19:02:58 +08:00
yml2213 a61828c6ca feat(dev): 增加独立分销前台端口5191、标签页会话隔离与免hosts二级域名支持 2026-09-08 13:39:12 +08:00
yml2213 550b42eb22 feat(distribution): 独立分销后台账号体系、多租户隔离与主站后台分销管理GUI
- 独立账号鉴权:分销后台支持独立登录页面、Bearer+Cookie 双模鉴权与租户资料接口
- 多租户隔离:分销商成员强制锁定自身站点数据范围,防止横向越权;平台超管享有全局视界
- 一键开通分销商:平台端支持一键录入站点、管理员账号、分配角色并原子化初始化佣金规则
- 主后台分销分组:在主站后台增加「分销管理」导航分组,提供站点管理、规则配置、订单监控与结算管理 GUI
- 门禁与联调:补充完整单测,全量代码门禁 check.sh 100% 通过,dev.sh 支持前后端与分销后台一键同启
2026-09-07 15:45:53 +08:00
yml2213 369b0647bb 合并 main 分支并融合订单列表最小化与 SQL 治理
- Auth/权限中间件取 main 演进版(错误细分、token 来源),保留 dev 的用户 cookie 与登出撤销语义
- 后台订单列表:融合 main 的首页免 COUNT 优化与关键词索引路由,保留 dev 的最小化 AdminOrderListItemDTO(结账明细仍由详情接口返回,同步调整对应集成测试)
- 保留 dev 的 token_version 冻结/解冻递增与 main 的状态变化判断及通知
- 前端:保留 dev 登出接口与 main 的 fetchMe silent 参数、SSE 登录跳转;后台订单表按 dev 最小化 DTO 移除号主到手列
2026-09-05 11:43:13 +08:00
yml2213 19b2b420f5 增加分销独立测试库复制脚本 2026-09-05 10:52:36 +08:00
yml2213 a9125b1939 perf(query): 全面治理后台跨表模糊查询慢SQL并升级SQL门禁守护
- 解决 MySQL 8.4 无法跨表 Index Merge 导致的索引失效与全表扫描问题
- 订单/提号/纠纷/用户/商品/会话列表实现智能意图路由分流直达单表唯一索引
- 剥离 COUNT(*) 阶段无关多表关联及标量子查询,实现首页条数快速短路
- check-sql-guard.sh 增加 forbid_pattern 拦截器与核心路由强校验防线
2026-09-05 10:37:04 +08:00
yml2213 da3c2f461b 修复健康检查 2026-09-04 17:07:47 +08:00
yml2213 182b21f192 优化生产部署 npm 构建缓存 2026-09-03 21:19:37 +08:00
yml2213 208f12ddb4 完善本地质量门禁与资金链路测试 2026-09-02 13:50:19 +08:00
yml2213 ad279049a0 完善数据库 SQL 约束与运维治理 2026-08-31 12:58:28 +08:00
yml2213 1ee7d17712 增加本地推送前代码检查钩子 2026-08-31 12:41:07 +08:00
yml2213 cfabfa8f65 修复生产部署污染选号网占位文件 2026-08-30 22:00:52 +08:00
yml2213 50b458e5c2 适配MySQL8.4位点查询 2026-08-17 00:23:33 +08:00
yml2213 76528076a7 补充binlog查询错误信息 2026-08-17 00:19:39 +08:00
yml2213 2265c48a53 修复备份任务退出码 2026-08-17 00:17:42 +08:00
yml2213 79eebdc8e5 修正备份失败健康状态 2026-08-17 00:08:09 +08:00
yml2213 a0bf47f2ed 优化空闲binlog轮转 2026-08-16 23:57:19 +08:00
yml2213 f67ee12d72 新增备份监控与定时配置 2026-08-16 23:53:50 +08:00
yml2213 66cb03ebce 修复备份完成状态时机 2026-08-16 23:40:35 +08:00
yml2213 ca4372271a 修复备份文件属主处理 2026-08-16 23:37:15 +08:00
yml2213 7d7141c055 修复XtraBackup数据卷权限 2026-08-16 23:34:53 +08:00
yml2213 4fb79cb37f 补齐XtraBackup只读权限 2026-08-16 23:32:21 +08:00
yml2213 96221d3c00 修复XtraBackup凭据读取 2026-08-16 23:31:17 +08:00
yml2213 eb06ec3c5f 支持OSS托管加密 2026-08-16 22:38:31 +08:00
yml2213 7b7d23c743 修复备份状态查询 2026-08-16 22:32:57 +08:00
yml2213 7438fb6725 重写在线备份链路 2026-08-16 22:32:07 +08:00
yml2213 d2429618f4 支持迁移对象存储到 OSS 2026-08-16 12:19:51 +08:00
yml2213 c9d0803b53 优化日志记录并改用非 root 运行 2026-07-29 17:01:36 +08:00
yml2213 3461c02560 更改本地dev常见端口 2026-07-25 16:31:42 +08:00
yml2213 3dfa43d3d0 选号网构建默认使用npmmirror并增加npm重试
缓解国内服务器访问registry.npmjs.org出现ECONNRESET的问题。
2026-07-16 22:34:42 +08:00
yml2213 2c1cdb0339 部署选号网时无本机npm则改用Docker构建
服务器可不装Node,自动用node:24-alpine镜像执行npm ci/build。
2026-07-16 22:32:04 +08:00
yml2213 a0fc23647b 支持同机双域名部署选号网hfb_show
Caddy按CADDY_SHOW_DOMAIN托管选号网静态并反代API;一键脚本可构建hfb_show并写入配置。
2026-07-16 22:24:40 +08:00
yml2213 1b818b8e4b 优化一键脚本清理缓存时间 2026-06-29 23:49:27 +08:00
yml2213 782a5cbd02 优化一键脚本 2026-06-28 21:23:26 +08:00
yml e8bdf574f4 增强备份脚本环境兼容性 2026-06-18 12:18:07 +08:00
yml 142d27efea 修复备份恢复路径处理 2026-06-18 12:12:16 +08:00
yml abe512b5f9 添加生产备份恢复脚本 2026-06-18 12:07:51 +08:00
yml 965832c3cb 前端测试基建: vitest.config + jsdom + test script, 3 个死 spec 复活
现状: vitest 已装, 3 个 spec 已存在 (listings composables, 14 用例), 但跑不起来——package.json 无 test script, 无 vitest.config, @/ 别名在测试环境不通 (Cannot find package '@/...')。

修复:
- 新增 vitest.config.ts: jsdom 环境 (提供 window/document/navigator, 让 monitor.ts 等浏览器模块可加载) + @ 别名 (与 vite.config.ts 同口径) + globals + v8 coverage 配置
- package.json 加 test / test:watch / test:coverage script
- 装 jsdom devDependency
- check.sh 前端门禁加 npm run test 步骤 (受 --skip-tests 控制, 与后端测试一致)

验证: npm run test 3 spec 全过 (14 用例); check.sh --skip-backend 全绿 (check + test + build)。

之前 "有测试实际跑不起来" 的债务清掉。后续 composable/api 层测试可直接 npm run test。
2026-06-14 18:13:06 +08:00
yml 64f7ed3753 加部署前代码门禁: scripts/check.sh + deploy-prod.sh 接入
单人维护 + Gitea 无 runner, CI 文件无执行环境。改用部署时刻门禁: deploy-prod.sh 构建镜像前在本地调 check.sh 跑全量检查, 失败即中止部署。

scripts/check.sh (新增):
- 后端: go vet + go build + go test (串行 -p 1 避免 SQLite 并发)
- 前端: npm run check (prettier + eslint --max-warnings=0 + vue-tsc) + npm run build
- 支持 --skip-backend/--skip-frontend/--skip-tests 局部调试
- 每步报耗时, 任一失败退出非零

deploy-prod.sh 接入:
- 构建镜像前 (NO_BUILD=0) 自动调 check.sh, 失败中止部署
- 本地缺 go/npm 时跳过并告警 (部署机可能只有 docker), 不硬失败
- --skip-check 显式跳过 (不推荐)

README 补 "代码门禁" 章节。

验证: 全量 check.sh 跑通 (~46s, 5 步全绿); 临时注入 lint 错误确认能拦住。
2026-06-14 16:30:58 +08:00
yml2213 f6ea3e29a6 移动端和 PC 端登录页都加了“图形验证码 2026-06-12 21:16:08 +08:00
yml 6ada7393ef 优化一键脚本 2026-06-11 08:46:10 +08:00
yml2213 6d61a336d6 支持配置后台页面入口 2026-06-11 08:00:13 +08:00
yml2213 88b1df64e7 加固后台管理安全 2026-06-11 07:23:00 +08:00
yml2213 c0403fc1ea negiix 更换成 caddy 2026-06-11 04:17:36 +08:00
yml 5a7f2deff3 删除无用文档 2026-06-09 22:38:35 +08:00
yml 5cd3ead4bd 统一金额分制重构 2026-06-09 19:04:11 +08:00
yml 87673288ef chore: finalize amount migration fixes 2026-06-09 17:45:29 +08:00