Packages
web: React + Vite 客户端。页面路由位于 web/src/app,页面相关数据访问集中在对应路由的 api.ts。
api: Elysia 服务端。api/src/service 负责 HTTP 入口,复杂模块进一步拆成 policy、repository、command/use-case。
shared/config: 运行时配置与环境解析。浏览器安全入口和 Node 专用子路径分开导出。
shared/api: 前后端共享 DTO 与序列化契约。
shared/type: 后端推导类型出口,供 Eden 和 Better Auth 类型在前端使用。
shared/ui: 跨页面、跨端复用的 UI 组件。
Frontend Rules
- 路由策略统一为无 locale 前缀 URL,语言状态由
LocaleProvider 持有。
- 页面级业务数据访问集中在
web/src/app/**/api.ts,组件尽量只处理展示和交互。
- 页面私有组件放在对应路由目录的
components/ 下;首页共用区块组件集中在 web/src/app/components/。
- 站内 API 调用统一通过
web/src/lib/api.ts,避免组件直接裸调 Eden mutation。
Backend Rules
- 权限判断优先放在显式 policy / command 层,而不是依赖 Prisma 隐式扩展。
- repository 负责查询与持久化,command/use-case 负责业务编排,service 文件负责 HTTP 层。
- 对外部依赖的聚合能力优先放在后端,例如资源 release 信息通过
api/src/lib/resource-releases.ts 收口。
Testing Baseline
- API 权限与 command 测试位于
api/src/service/*.test.ts。
- 核心前端 helper 测试位于
web/src/lib/*.test.ts。
- 轻量 smoke 脚本位于
scripts/smoke-routes.ts,验证前后端启动和关键公共路由可访问。
- 浏览器级 smoke 脚本位于
scripts/e2e-smoke.ts,验证受保护路由重定向和旧 locale 链接收敛。
Quality Commands
bun run lint
bun run typecheck
bun run test
bun run test:smoke
bun run test:e2e
bun run check