Commit Graph

287 Commits

Author SHA1 Message Date
imbytecat 8f7744ca0d feat(server): 新增统一 logger 入口与 /health liveness 端点
- src/server/logger.ts 包一层 console.*,给后续 pino/otel 迁移留单点
- interceptors.ts 的 logError 改走 logger.error,业务侧禁止直接 console.*
- /health 返回 'ok',纯 liveness(不查 DB),DB 挂时探活仍绿
2026-04-25 13:31:25 +08:00
imbytecat 830c908712 refactor(arch): 移除 experimental_defaults,提炼 useInvalidateTodos,闭环若干悬挂配置
- orpc.ts: 改为纯 createTanstackQueryUtils,不再依赖 experimental_ API
- 抽出 src/client/queries/todo.ts 的 useInvalidateTodos,避免 query key 散落页面
- shutdown: setTimeout 内 db.$client.end() 失败也走 process.exit
- 删除 db/index.ts 未被使用的 DB 类型导出
- 删除 env.ts 未被消费的 VITE_APP_TITLE,根 title 改为 package.json name
- 清理 routes/index.tsx 的 JSX 区段注释、compose.yaml 注释掉的端口块、robots.txt URL 注释
2026-04-25 13:31:16 +08:00
imbytecat 2c5bceb826 fix(deploy): 端到端跑通编译二进制 + docker compose
端到端验证时发现 4 处细节,一起补上:

1. bin.ts 漏了 default: 'serve'——CMD ["./server"] 会直接吐 help 而
   不是起服务(在 compose 里 app 立刻 exit)。citty 原生支持 default
2. Dockerfile 在 bun install 之前就要 COPY patches/,否则 package.json
   的 patchedDependencies 找不到补丁文件,install 失败
3. drizzle/ 目录在仓库里必须存在(带 .gitkeep),否则 Dockerfile 末尾
   COPY drizzle/ 到运行镜像会失败
4. migrate.ts 之前只检查 ./drizzle 目录是否存在就跳过——空目录时仍会
   进到 drizzle 的 readMigrationFiles,报 Can't find meta/_journal.json。
   改成检查 meta/_journal.json 是否存在,更准确地区分"还没生成过迁移"
   与"有迁移待应用"

验证路径:
- docker compose up -d --build → migrate 完成退出 → app 健康
- curl /api/spec.json → 200,OpenAPI 文档含 todo.{list,create,update,remove}
2026-04-24 20:43:36 +08:00
imbytecat 5dd54ec9e9 docs(agents): 同步架构简化后的规约
- DB:module-level const db(删掉 getDB/closeDB 的描述),说明为什么
  不需要兼容 Cloudflare Workers 的 lazy init
- Routers 直接 import db,不再过 middleware;只在真正需要 per-request
  上下文时才新建 middlewares/
- Layout 刷新 db/ 与 api/ 目录的注释;Don'ts 补上不要回退到 lazy DB 单例
2026-04-24 20:38:51 +08:00
imbytecat 22ac02cbc6 refactor(db): 精简 generatedFields,删三分支 PK 策略与泛型 keys 工具
- PK 策略原本给了 native(PG18)/extension/app-side 三条路,对 base 项目
  是 YAGNI。全部落到最稳妥的 $defaultFn(uuidv7):任意 PG 版本都能跑,
  不依赖扩展或 18+ 的 uuidv7() 原生函数
- createGeneratedFieldKeys 泛型 reduce 只为了生成 { id: true, createdAt:
  true, updatedAt: true } 这三项,直接手写 as const 更直观
- 删掉 pk/id/createdAt/updatedAt 的独立 helper 导出——没人引用,它们
  只是 generatedFields 的内部组合
2026-04-24 20:37:51 +08:00
imbytecat 2678a53034 refactor(api): 删掉 db ORPC middleware,handler 直接用 db
db middleware 的存在只是为了把 db 注入到 ORPC context——这是 Cloudflare
Workers / 多租户场景的模式(db 依赖 per-request 的 env binding)。在
Bun 单进程 + 模块级 const db 下,这层中间件是纯粹的仪式:一行 import
直接拿到 db,反而更清晰。

- 删除 src/server/api/middlewares/ 整个目录(不留空脚手架,KISS)
- context.ts 去掉 DBContext 与示例注释,只留 BaseContext { headers }
  作为未来 auth/tenant 等 middleware 的扩展点
- routers/todo.router.ts 不再 .use(db),handler 内直接 db.query / db.insert

需要 per-request 上下文(auth、tenant、rate-limit)时再按 ORPC 的
os.middleware 模式新增,不在此预先铺陈。
2026-04-24 20:37:11 +08:00
imbytecat d15b22ad1b refactor(db): 去掉 lazy singleton,改为模块级 const db
getDB/closeDB + 可空单例是 Cloudflare Workers 场景的模式——每个请求独
立上下文、不允许模块加载期副作用。在 Bun 单进程长驻服务下这些都是冗余
的仪式,徒增心智。

改为模块级 const db:
- src/server/db/index.ts 直接 export drizzle(...) 实例
- shutdown 插件用 db.$client.end() 收尾
- db.middleware.ts 跟随内部重命名以避免同名遮蔽(本身的去留放到下一
  次提交)
2026-04-24 20:36:16 +08:00
imbytecat f6b6edee23 fix(deps): 补丁绕过 @tanstack/start-plugin-core 误引 @rsbuild/core
@tanstack/start-plugin-core@1.168.0 的 dist/esm/index.js 在 Vite 场景
下也会静态导入 ./rsbuild/planning.js,而后者硬依赖被标为 optional peer
的 @rsbuild/core,导致 vite build 启动阶段 ERR_MODULE_NOT_FOUND。

引入 bun patch 只保留 vite 相关导出(删掉 RSBUILD_ENVIRONMENT_NAMES
和 tanStackStartRsbuild),不安装 rsbuild 全家桶(rspack 很重)。
等上游修复再移除本补丁。
2026-04-24 20:35:22 +08:00
imbytecat 19e60d358f feat(cli): 引入 citty CLI,迁移改为显式 ./server migrate
- 顶层新增 bin.ts 作为编译入口,citty 懒加载 src/cli/ 下子命令
- src/cli/serve.ts 通过 _serve-nitro.mjs 桥接启动 Nitro(规避
  .output/server/index.mjs 顶层 serve(...) 的副作用导入)
- src/cli/migrate.ts 显式跑 drizzle migrate;env / drizzle 都在 run()
  里 await import,避免 citty --help 遍历 subCommands 时触发 env 校验
- compile.ts 入口切到 bin.ts;移除 src/server/plugins/migrate.ts
  与 vite.config.ts 中的启动时自动迁移
- compose.yaml 新增一次性 migrate 服务,app depends_on
  service_completed_successfully,保证迁移先行再起服
- tsconfig 排除 .output / out;AGENTS.md 补充 CLI 与部署规约
2026-04-24 20:32:32 +08:00
imbytecat 4518a63959 docs(agents): 同步 drizzle 0.x 降级后的指引
修正 AGENTS.md 里与 1.0 beta 相关的过时条目(drizzle-orm/zod、
defineRelations、RQB v2 对象语法等),改为记录当前真实用法:
drizzle-zod 包、`drizzle({ schema })`、RQB v1 回调写法。顺手裁掉
通用的 Biome/TS 说明,补上几条仓库特有的坑(Nitro 插件在 vite.config
里注册、distroless cc 变体、无 CI/pre-commit 等)。
2026-04-24 20:13:56 +08:00
imbytecat 75c77159b4 refactor(db): 适配 drizzle-orm 0.x API 并引入 drizzle-zod
drizzle-orm 从 1.0 beta 降级到 0.45 后,1.0 的 defineRelations、drizzle-orm/zod
子路径以及 RQB v2 的 orderBy 对象语法均不可用。改用 schema 作为 drizzle()
入参、从独立的 drizzle-zod 包导入 schema 生成器,并将 orderBy 改回 0.x 的
回调写法。同时删除因降级而失效的旧迁移。
2026-04-24 20:08:41 +08:00
imbytecat f9847e6f6e chore: 移除 opencode.jsonc 配置文件 2026-04-24 20:02:01 +08:00
imbytecat ac58950853 chore: 为 TanStack MCP 配置 Authorization 鉴权头 2026-04-24 19:51:48 +08:00
imbytecat 02757226f7 chore(deps): 锁定 Bun 版本并升级依赖
- Dockerfile 与 mise.toml 固定 bun 至 1.3.13
- 升级 ORPC/TanStack/Biome/Vite/TypeScript 等依赖
- drizzle-orm 与 drizzle-kit 回退至稳定版
2026-04-24 19:50:17 +08:00
imbytecat 934ba80c94 chore(deps): 升级 TanStack Router/Start 及 @types/bun 依赖 2026-04-11 20:53:34 +08:00
imbytecat 15118e8aa2 chore(deps): 升级 ORPC、React 与 Vite 相关依赖 2026-04-10 10:34:31 +08:00
imbytecat 1af5d4e3c0 fix: 修复编译二进制 Ctrl+C 无法退出的问题 2026-04-02 07:48:25 +08:00
imbytecat 6795730485 refactor(db): 暴露 closeDB() 函数以支持连接池清理 2026-04-02 07:48:16 +08:00
imbytecat c20cf02d9f chore: update Docker Compose configuration
- Use postgres:18-alpine image

- Update environment variable format

- Rename volume from pgdata to postgres_data

- Increase healthcheck interval to 10s
2026-04-02 03:49:38 +08:00
imbytecat 341315a01b chore: upgrade PostgreSQL to v18 and restructure compose.yaml 2026-04-02 03:43:37 +08:00
imbytecat 77b3484415 refactor: 改用 Nitro 插件实现启动时数据库迁移 2026-04-02 03:42:45 +08:00
imbytecat 5de4d5f940 chore: upgrade PostgreSQL to v18 and restructure compose.yaml 2026-04-02 02:45:00 +08:00
imbytecat ed770909ef chore: 添加 Docker 打包和 Compose 编排支持 2026-04-02 02:43:21 +08:00
imbytecat 9175909033 chore: 更新依赖 2026-04-02 00:57:49 +08:00
imbytecat 5f5f6c469a chore: remove unused shadcn MCP 2026-04-02 00:53:30 +08:00
imbytecat 087796038e chore(routes): 重新生成路由树以反映健康检查端点删除 2026-04-02 00:49:33 +08:00
imbytecat ca4e25827f chore(api): 删除未使用的健康检查端点 2026-04-02 00:48:41 +08:00
imbytecat 7700ba4520 docs: 修正 AGENTS.md 与代码库的 12 处不一致 2026-04-02 00:37:44 +08:00
imbytecat c67e773086 refactor: 抽取 UI 组件、改进错误页面、统一导入路径并简化数据库接口 2026-04-02 00:13:43 +08:00
imbytecat 4ec4576fc5 chore: remove Node.js from mise.toml (pure Bun project) 2026-04-01 23:28:35 +08:00
imbytecat 22363279c8 docs: 精简 AGENTS.md 文档结构并优化内容呈现 2026-04-01 23:24:23 +08:00
imbytecat b38d475b6f chore(deps): 升级 @orpc/* 至 1.13.13, @tanstack/react-query 至 5.96.1, @biomejs/biome 至 2.4.10 2026-04-01 23:18:42 +08:00
imbytecat 486cb7b129 chore(vscode): add promptToUseWorkspaceVersion for TypeScript SDK 2026-04-01 20:56:10 +08:00
imbytecat c894631c64 chore(db): 提交初始数据库迁移文件 2026-04-01 19:54:49 +08:00
imbytecat ce3684fdc0 fix: use relative import in drizzle.config.ts for path alias compatibility 2026-04-01 19:48:43 +08:00
imbytecat cd7b65fda4 refactor: flatten monorepo into standalone project 2026-04-01 19:43:21 +08:00
imbytecat 036afb8d20 chore: remove React Compiler and @rolldown/plugin-babel 2026-04-01 18:26:09 +08:00
imbytecat 688252fd49 chore(deps): bump @biomejs/biome to 2.4.9 and @orpc/* to 1.13.11 2026-03-26 01:14:09 +08:00
imbytecat 42c2fff7cd chore: update VS Code TypeScript SDK path 2026-03-25 09:58:50 +08:00
imbytecat 034f570794 chore(deps): update TanStack devtools packages 2026-03-25 09:51:21 +08:00
imbytecat ea5935e29b chore(deps): remove babel-plugin-react-compiler 2026-03-25 09:45:37 +08:00
imbytecat 3663f3d010 chore(deps): add @rolldown/plugin-babel and update dependencies
- Add @rolldown/plugin-babel for React compiler support
- Update TypeScript to 6.0.2
- Update TanStack packages (@tanstack/react-query, @tanstack/react-router, @tanstack/react-start)
- Update @vitejs/plugin-react to 6.0.1
- Update Vite to 8.0.2 and Nitro nightly
- Refactor vite.config.ts to use separate babel plugin with reactCompilerPreset
2026-03-25 09:44:13 +08:00
imbytecat 9d1beab2e1 chore: migrate to TypeScript 6.0.2
- Upgrade typescript from 5.9.3 to 6.0.2
- Add explicit types: ['node'] to base tsconfig (TS6 breaking change)
- Remove deprecated baseUrl from server tsconfig
- All typecheck passing
2026-03-25 09:23:07 +08:00
imbytecat 88326c4992 refactor(server): 改用 Vite 原生 tsconfig 路径解析 2026-03-22 01:27:47 +08:00
imbytecat 4e2bc5b8dc chore(deps): 更新 bun lock 2026-03-22 00:39:25 +08:00
imbytecat 9da3df6ad7 chore: 升级 monorepo 依赖版本 2026-03-22 00:02:55 +08:00
imbytecat 9d8a38a4c4 fix: 修正 ORPC handler 语义、加固 Electron 安全、优化构建与运行时配置
- todo.router: create 错误码 NOT_FOUND → INTERNAL_SERVER_ERROR,remove 增加存在性检查
- __root: devtools 仅在 DEV 环境渲染
- Electron: 添加 will-navigate 导航拦截、显式安全 webPreferences、deny-all 权限请求
- sidecar: 空 catch 块补充意图注释,新增 lastResolvedUrl getter
- todo.contract: 硬编码 omit 改用 generatedFieldKeys
- router: QueryClient 添加 staleTime/retry 默认值
- turbo: build 任务精细化 inputs 提升缓存命中率
- fields: id() 改为模块私有
2026-03-05 14:06:43 +08:00
imbytecat cd7448c3b3 docs: 统一使用 bun run <script> 避免与 Bun 内置子命令冲突
bun build 会调用 Bun 内置 bundler 而非 package.json script,
将所有文档中的 bun <script> 改为 bun run <script> 以避免歧义。
bun test 保留不变(直接使用 Bun 内置 test runner)。
2026-03-05 12:57:26 +08:00
imbytecat 58d7a453b6 style: 将 biome lineWidth 从默认 80 调整为 120 2026-03-05 12:28:18 +08:00
imbytecat afc3b66efa refactor: 移除根 package.json 中冗余的 --filter 参数
Turbo 会自动只在定义了对应 script 的包上执行任务,无需手动指定 filter。
2026-03-05 12:08:48 +08:00