Commit Graph

149 Commits

Author SHA1 Message Date
hhs
1ddd75d34f fix: 修复 Docker Compose 环境下 PostgreSQL 连接失败 2026-06-14 20:47:00 +08:00
b60e513317 feat:添加对话情景功能 2026-06-14 20:32:30 +08:00
c3118dd72a feat:语音对话优化 2026-06-14 19:54:22 +08:00
hhs
966b30218a feat: 实现 sessions 持久化,支持会话恢复 2026-06-14 18:54:18 +08:00
hhs
542720695d feat: 对接 PostgreSQL 存储层 2026-06-14 18:40:37 +08:00
hhs
c3a32ce276 feat: Phase 8.5 — ConversationSummary 查询优化,支持 SQL 聚合获取消息统计 2026-06-14 17:58:42 +08:00
hhs
7b745018c5 feat: Phase 8.4 — 实现 LoadSession 和 LoadSessionFromDB,支持从 PostgreSQL 恢复会话到内存 2026-06-14 17:56:33 +08:00
hhs
f4515ce5e4 feat: Phase 8.3 — Session Manager 注入 MessageRepository,AppendMessage 启用 Write-Through 2026-06-14 17:54:33 +08:00
hhs
96f4bc7abb feat: Phase 8.2 — 实现 PostgreSQL MessageRepository 2026-06-14 17:53:14 +08:00
hhs
dae5722945 feat: Phase 8.1 — 定义 MessageRepository 接口和消息表迁移脚本 2026-06-14 17:52:21 +08:00
hhs
3c5c4943e8 feat: Phase 7.7 — 编写 WS 认证测试
- TestWS_AuthMissingToken: 无 token 返回 401
- TestWS_AuthInvalidToken: 无效 token 返回 401
- TestWS_AuthExpiredToken: 过期 token 返回 401
- TestWS_AuthValidToken: 有效 token 成功连接
- TestWS_AuthConversationIDResume: conversation_id 恢复已有对话
- TestWS_AuthConversationIDNotFound: 不存在的 conversation_id 返回 401
- TestWS_AuthConversationIDOwnership: 非 owner 访问返回 401
2026-06-14 17:48:47 +08:00
hhs
80c6b1b56e feat: Phase 7.3 — WS conversation_id 处理
- ?conversation_id=xxx 存在时校验 session 归属(UserID 匹配)
- 校验失败返回 401 SESSION_NOT_FOUND
- 校验通过则复用已有 session;否则创建新 session
2026-06-14 17:47:34 +08:00
hhs
905b56640e feat: Phase 7.2 — WS 连接 JWT 认证
- 从 ?token=xxx 查询参数提取 access_token
- 校验失败返回 401(missing token / invalid token)
- 校验成功后将 userID 用于创建会话
- 更新现有测试:setupTestServer 自动生成有效 token
2026-06-14 17:47:05 +08:00
hhs
2aa3c98ab6 feat: Phase 7.1 — 修改 ServeWS 签名,新增 tokenMgr 参数
- ServeWS 和 serveWS 函数新增 *auth.TokenManager 参数
- main.go 传入 tokenMgr 到 ServeWS
- handler_test.go 适配新签名
2026-06-14 17:46:11 +08:00
hhs
d01aeaba68 feat: 编写 ConversationHandler API 测试(httptest + mock SessionManager)
- List: 成功、分页参数、未认证 401
- Create: 成功、自定义配置
- Get: 成功、404 未找到、404 权限不足(隐藏信息)
- UpdateTitle: 成功、空标题校验、超长标题校验
- Delete: 成功、权限不足
- GetMessages: 成功、limit 分页、before 偏移分页、权限不足
- 共 17 个 Conversation 测试用例,全部通过
2026-06-14 17:41:28 +08:00
hhs
f902e05e31 feat: main.go 接入 ConversationHandler 路由注册 2026-06-14 17:39:39 +08:00
hhs
62baa656ee feat: 实现 ConversationHandler(对话 CRUD + 消息查询 + 权限校验 + 路由注册)
- List: GET /api/conversations 获取当前用户对话列表(分页)
- Create: POST /api/conversations 创建新对话
- Get: GET /api/conversations/:id 获取对话详情
- UpdateTitle: PATCH /api/conversations/:id 更新对话标题
- Delete: DELETE /api/conversations/:id 删除对话
- GetMessages: GET /api/conversations/:id/messages 获取消息列表
- 所有端点通过 AuthMiddleware 认证
- getSessionForUser 校验 session.UserID == claims.UserID
- 返回 404 而非 403 避免信息泄露
2026-06-14 17:39:20 +08:00
hhs
ec8555d44b feat: 编写 Session Manager 新方法测试(ListByUser 分页、UpdateTitle、自动标题生成) 2026-06-14 17:36:38 +08:00
hhs
6487a8ecab feat: 扩展 Session Manager 接口,新增 ListByUser、UpdateTitle 方法
- Manager.Create 签名新增 userID 参数
- 新增 ConversationSummary 类型和 ListByUser 分页查询
- 新增 UpdateTitle 方法
- MemoryManager 实现:ListByUser 遍历+过滤+排序,UpdateTitle,自动标题生成
- RedisManager 实现:user:{id}:sessions 索引,ListByUser 通过 SMEMBERS 查询
- AppendMessage 自动更新标题(首条 user 消息时,取前 20 字符)
- 更新 ws handler、api/session.go、orchestrator mock 的 Create 调用
2026-06-14 17:35:20 +08:00
hhs
9ff971fd89 feat: 扩展 Session 模型,新增 UserID、Title、UpdatedAt 字段 2026-06-14 17:30:59 +08:00
hhs
c01ee1d14c feat: 编写 AuthHandler API 测试(httptest + mock AuthService,覆盖全部端点) 2026-06-14 17:28:13 +08:00
hhs
9aaed88cc1 feat: main.go 接入认证服务(TokenManager + AuthService + AuthHandler 路由注册) 2026-06-14 17:26:50 +08:00
hhs
15b437043f feat: 实现 AuthHandler(注册/登录/刷新/登出端点 + 输入校验 + 路由注册) 2026-06-14 17:25:50 +08:00
hhs
fdea3aa9d1 feat: 新增认证相关错误码(USERNAME_TAKEN, INVALID_CREDENTIALS, INVALID_TOKEN, INVALID_INPUT) 2026-06-14 17:24:57 +08:00
hhs
f878988048 feat: 编写 AuthService 单元测试(mock UserRepository) 2026-06-14 17:18:22 +08:00
hhs
e455af6b2d feat: 编写 TokenManager 单元测试 2026-06-14 17:17:28 +08:00
hhs
5211d14d50 feat: 定义并实现 AuthService(注册/登录/刷新/登出) 2026-06-14 17:14:52 +08:00
hhs
5b8cbb025f feat: 实现 JWT 认证中间件(AuthMiddleware) 2026-06-14 17:13:54 +08:00
hhs
fca9108882 feat: 实现密码哈希与校验工具(bcrypt) 2026-06-14 17:07:51 +08:00
hhs
20597101f5 feat: 实现 TokenManager(JWT 签发/校验/哈希) 2026-06-14 17:07:12 +08:00
hhs
9842b4a457 feat: 编写 UserRepository 单元测试 2026-06-14 16:56:29 +08:00
hhs
ce13e5a048 feat: 实现内存 UserRepository(测试用) 2026-06-14 16:55:44 +08:00
hhs
36827edfea feat: 实现 PostgreSQL UserRepository 2026-06-14 16:55:12 +08:00
hhs
af73e78aa3 feat: 定义 UserRepository 接口及 User 数据模型 2026-06-14 16:54:21 +08:00
hhs
c9c174f400 feat: 扩展 models 新增 User 结构体 2026-06-14 16:53:54 +08:00
hhs
0ff810a297 feat: main.go 条件初始化 PostgreSQL 连接池
- 添加 store 包导入
- 当 storage.driver 为 postgres 时创建 pgxpool
- 使用 defer 确保连接池正确关闭
- 添加日志记录连接状态
2026-06-14 16:43:07 +08:00
hhs
bf1e24453c feat: 编写用户表 schema 迁移脚本
- 新增 migrations/001_users.up.sql:创建 users 表和 refresh_tokens 表
- 新增 migrations/001_users.down.sql:回滚脚本
- users 表包含 id, username, password_hash, created_at, updated_at
- refresh_tokens 表包含 id, user_id, token_hash, expires_at, created_at
- 添加必要的索引优化查询性能
2026-06-14 16:42:12 +08:00
hhs
0edafbbf8a feat: 实现 PostgreSQL 连接池
- 新增 internal/store/db.go
- 实现 NewPostgresPool(ctx, dsn) 创建连接池
- 添加 pgx/v5 依赖
- 最大连接数设置为 10
2026-06-14 16:41:50 +08:00
hhs
4b30e67c2e feat: 扩展 Config 结构体,新增 AuthConfig 配置
- 新增 AuthConfig 结构体(JWTSecret, AccessTTL, RefreshTTL)
- 在 Config 中添加 Auth 字段
- 设置默认值:access_ttl=15分钟,refresh_ttl=10080分钟(7天)
- JWTSecret 必须通过环境变量 CAMTALK_AUTH_JWT_SECRET 设置
2026-06-14 16:40:06 +08:00
hhs
cb0c747133 ci: 添加国内镜像代理和 BuildKit 缓存优化构建速度 2026-06-14 15:14:28 +08:00
hhs
4ef1e9f08b refactor: 彻底移除 .env 依赖,配置统一由 config.yaml + 环境变量驱动 2026-06-14 14:54:55 +08:00
hhs
d32112e074 chore: 添加 .dockerignore 优化 Docker 构建上下文 2026-06-14 14:54:52 +08:00
hhs
4ebac835de chore: 删除 deepgram_test.go 测试文件 2026-06-14 14:04:30 +08:00
d8bbdb1744 Merge pull request 'fix: 修复语音与文字不同步的问题,改为句子级流式播放' (#67) from frontend-12 into develop
Some checks failed
Backend CI / ci (pull_request) Failing after 2m14s
Deploy / verify (pull_request) Failing after 1s
Deploy / deploy (pull_request) Has been skipped
Frontend CI / ci (pull_request) Successful in 56s
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/67
2026-06-14 13:55:47 +08:00
da5c727d8c fix: 修复语音与文字不同步的问题,改为句子级流式播放
之前前端 TTSPlayer 攒齐所有音频片段后才播放,导致文字全部显示后才开始语音。
改为后端每句 TTS 发送 is_last: true,前端收到每句即加入播放队列,第一句到达即开始播放。

- 后端 Chunk 结构体新增 Final 字段,区分句子结束和整轮结束
- 前端 TTSPlayer 重写为队列式播放,onended 回调自动衔接下一句
- 同步更新接口文档和测试用例
2026-06-14 13:54:49 +08:00
hhs
d75cdf95c8 feat: 添加后端 Dockerfile
- 多阶段构建:golang:1.24-alpine 编译,alpine:3.20 运行
- CGO_ENABLED=0 静态链接,包含 ca-certificates 和时区数据
2026-06-14 13:38:25 +08:00
312e762aff fix: 修复文本输入时 LLM API 报错的问题
- 移除 contentPart.Text 的 omitempty 标签
- 确保 text 字段始终存在于 JSON 请求中
2026-06-14 13:02:07 +08:00
51ed6aa563 feat: 添加文字输入对话功能
- 后端 WsQuery 添加 text 字段,支持文本输入模式
- Pipeline 支持文本查询时跳过 STT 直接使用输入文本
- 前端 ChatPanel 添加文字输入框,连接状态下可用
- useVisionSession 添加 sendTextMessage 方法
- 更新接口文档,添加文本输入模式说明
2026-06-14 12:52:39 +08:00
f6a2348c04 fix:修复语音对话配置 2026-06-14 12:29:46 +08:00
hhs
96cf009228 test: 更新测试文件适配构造函数签名变更 2026-06-14 11:55:29 +08:00