--- type: project name: tg-live-game-hono status: active created: 2024-12-31 updated: 2026-01-06 kanban_id: 7c6bb2ce-90a2-4e96-bc04-5facdcdb337f parent: "[[_project|TG Live Game]]" --- # TG Live Game Hono 后端 API 服务,基于 Hono + Cloudflare Workers + D1 构建。 ## 技术栈 | 类别 | 技术 | 版本 | |------|------|------| | 框架 | Hono | 4.11.1 | | 运行时 | Cloudflare Workers | - | | 数据库 | Cloudflare D1 (SQLite) | - | | 验证 | Zod | 4.3.5 | | 语言 | TypeScript | 5.9.3 | | 测试 | Vitest | 3.2.4 | | Lint | Biome | 2.3.11 | | 部署 | Wrangler | 4.56.0 | ## 项目结构 ``` src/ ├── index.ts # 应用入口 ├── node.ts # Node.js 本地开发入口 ├── middleware/ # 中间件 │ └── auth.ts # JWT 认证 + RBAC 权限 ├── routes/ # API 路由 │ ├── auth.ts # 认证接口 │ ├── user.ts # 用户管理 (admin only) │ ├── cameras.ts # 摄像头管理 │ ├── sessions.ts # 会话管理 │ ├── stats.ts # 观看统计 │ ├── stream.ts # Cloudflare Stream │ └── audit.ts # 审计日志 ├── services/ # 业务服务 ├── types/ # TypeScript 类型 └── utils/ # 工具函数 ``` ## API 路由 ### 公开接口 | 方法 | 路由 | 描述 | |------|------|------| | POST | `/api/auth/login` | 用户登录 | | POST | `/api/auth/refresh` | 刷新 Token | ### 认证接口 | 方法 | 路由 | 描述 | 权限 | |------|------|------|------| | GET | `/api/auth/me` | 获取当前用户 | * | | POST | `/api/auth/logout` | 退出登录 | * | | POST | `/api/auth/change-password` | 修改密码 | * | ### 用户管理 (admin) | 方法 | 路由 | 描述 | |------|------|------| | GET | `/api/users` | 用户列表 | | GET | `/api/users/:id` | 用户详情 | | POST | `/api/users` | 创建用户 | | PUT | `/api/users/:id` | 更新用户 | | DELETE | `/api/users/:id` | 删除用户 | ### 摄像头管理 | 方法 | 路由 | 描述 | |------|------|------| | GET | `/api/cameras` | 摄像头列表 | | GET | `/api/cameras/:id` | 摄像头详情 | | POST | `/api/cameras` | 创建摄像头 | | PUT | `/api/cameras/:id` | 更新摄像头 | | DELETE | `/api/cameras/:id` | 删除摄像头 | ### Stream 管理 | 方法 | 路由 | 描述 | |------|------|------| | GET | `/api/stream/videos` | 视频列表 | | GET | `/api/stream/live-inputs` | 直播输入列表 | | POST | `/api/stream/live-inputs` | 创建直播输入 | | DELETE | `/api/stream/live-inputs/:id` | 删除直播输入 | ### 统计 & 审计 | 方法 | 路由 | 描述 | |------|------|------| | GET | `/api/stats/*` | 观看统计 | | GET | `/api/audit/*` | 审计日志 | ## 数据库设计 ### D1 配置 ```toml [[d1_databases]] binding = "DB" database_name = "tg_live_game" database_id = "970f081e-42c8-46bb-b385-b7c1ab2ceaa5" ``` ### 数据表 | 表名 | 描述 | |------|------| | users | 用户信息 | | user_permissions | 用户权限 | | cameras | 摄像头配置 | | live_sessions | 直播会话 | | videos | 视频记录 | | view_stats | 观看统计 | | audit_logs | 审计日志 | ## 认证系统 ### JWT 配置 ```toml [vars] JWT_EXPIRES_IN = "86400" # 24小时 REFRESH_EXPIRES_IN = "604800" # 7天 ``` ### RBAC 角色 | 角色 | 权限 | |------|------| | admin | 所有权限 | | operator | 摄像头/视频/直播管理 | | viewer | 只读访问 | ### 中间件 ```typescript // 认证中间件 authMiddleware() // 角色检查 requireRole('admin') requireRole('admin', 'operator') ``` ## 部署信息 | 属性 | 值 | |------|------| | Worker 名称 | tg-live-game-api | | 域名 | https://tg-live-game-api.ifoodme.com | | Account ID | d31caaf9d62da3682d7d98e07f8b96d5 | | D1 Database ID | 970f081e-42c8-46bb-b385-b7c1ab2ceaa5 | ## 开发命令 ```bash # 安装依赖 pnpm install # 本地开发 (使用本地 D1) pnpm dev # 远程开发 (使用远程 D1) pnpm dev:remote # 类型检查 pnpm typecheck # 运行测试 pnpm test # 代码检查 pnpm lint # 格式化代码 pnpm format # 部署 pnpm deploy ``` ### D1 数据库操作 ```bash # 本地执行 SQL npx wrangler d1 execute tg_live_game --command "SELECT * FROM users;" # 远程执行 SQL npx wrangler d1 execute tg_live_game --remote --command "SELECT * FROM users;" # 初始化 Schema npx wrangler d1 execute tg_live_game --remote --file=./schema.sql ``` ### Secrets 管理 ```bash wrangler secret put JWT_SECRET wrangler secret put CF_ACCOUNT_ID wrangler secret put CF_API_TOKEN wrangler secret put CUSTOMER_SUBDOMAIN ``` ## 代码仓库 | 环境 | 路径 | |------|------| | 开发 | `/Users/yibu/dev_workspace/frontend/tg-live-game/tg-live-game-hono` | ## 相关文档 - [[_project|TG Live Game]] - 父项目 - [[tg-live-game-web/_project|tg-live-game-web]] - 前端项目 - [[architecture-v1]] - 系统架构 - [[workflow]] - 开发工作流