|
|
8de956719c
|
feat: 实现前端认证系统,WebSocket 连接携带 JWT token
- 新增 AuthContext/AuthProvider:登录/注册状态管理,JWT 自动刷新
- 新增 AuthPage 组件:登录/注册表单,支持模式切换和前端校验
- 新增 api.ts:封装 auth REST API 客户端(register/login/refresh/logout)
- WebSocket 连接时拼接 ?token=<jwt>,重连自动携带
- useVisionSession 接受 accessToken 参数并透传
- App.tsx 包裹 AuthProvider,未登录时显示登录页
- storage.ts 新增 token/user 的 localStorage 存储
- i18n 新增中/英/日三语 auth 翻译
- App.css 新增 auth 页面和用户 badge 样式
|
2026-06-14 18:38:45 +08:00 |
|
|
|
a1ae7740f1
|
Merge pull request 'feat: 构建用户模块,实现用户对话历史持久化,完善接口文档' (#96) from build/backend into develop
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/96
|
2026-06-14 18:08:14 +08:00 |
|
|
|
b57adf153b
|
docs: 补充用户模块 REST API 接口契约
- PLAN_USER_MODULE.md 新增「前端 API 接口参考」章节
- 03-接口文档.md 同步认证接口、对话接口、WebSocket 认证变更
- 新增错误码 USERNAME_TAKEN / INVALID_CREDENTIALS / INVALID_TOKEN / INVALID_INPUT
- 数据模型补充 User / ConversationSummary / StoredMessage 及对应 TypeScript 类型
- 配置结构体补充 AuthConfig(JWTSecret / AccessTTL / RefreshTTL)
|
2026-06-14 18:05:50 +08:00 |
|
|
|
c3a32ce276
|
feat: Phase 8.5 — ConversationSummary 查询优化,支持 SQL 聚合获取消息统计
|
2026-06-14 17:58:42 +08:00 |
|
|
|
7b745018c5
|
feat: Phase 8.4 — 实现 LoadSession 和 LoadSessionFromDB,支持从 PostgreSQL 恢复会话到内存
|
2026-06-14 17:56:33 +08:00 |
|
|
|
f4515ce5e4
|
feat: Phase 8.3 — Session Manager 注入 MessageRepository,AppendMessage 启用 Write-Through
|
2026-06-14 17:54:33 +08:00 |
|
|
|
96f4bc7abb
|
feat: Phase 8.2 — 实现 PostgreSQL MessageRepository
|
2026-06-14 17:53:14 +08:00 |
|
|
|
dae5722945
|
feat: Phase 8.1 — 定义 MessageRepository 接口和消息表迁移脚本
|
2026-06-14 17:52:21 +08:00 |
|
|
|
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 |
|
|
|
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 |
|
|
|
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 |
|
|
|
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 |
|
|
|
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 |
|
|
|
f902e05e31
|
feat: main.go 接入 ConversationHandler 路由注册
|
2026-06-14 17:39:39 +08:00 |
|
|
|
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 |
|
|
|
ec8555d44b
|
feat: 编写 Session Manager 新方法测试(ListByUser 分页、UpdateTitle、自动标题生成)
|
2026-06-14 17:36:38 +08:00 |
|
|
|
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 |
|
|
|
9ff971fd89
|
feat: 扩展 Session 模型,新增 UserID、Title、UpdatedAt 字段
|
2026-06-14 17:30:59 +08:00 |
|
|
|
c01ee1d14c
|
feat: 编写 AuthHandler API 测试(httptest + mock AuthService,覆盖全部端点)
|
2026-06-14 17:28:13 +08:00 |
|
|
|
9aaed88cc1
|
feat: main.go 接入认证服务(TokenManager + AuthService + AuthHandler 路由注册)
|
2026-06-14 17:26:50 +08:00 |
|
|
|
15b437043f
|
feat: 实现 AuthHandler(注册/登录/刷新/登出端点 + 输入校验 + 路由注册)
|
2026-06-14 17:25:50 +08:00 |
|
|
|
fdea3aa9d1
|
feat: 新增认证相关错误码(USERNAME_TAKEN, INVALID_CREDENTIALS, INVALID_TOKEN, INVALID_INPUT)
|
2026-06-14 17:24:57 +08:00 |
|
|
|
430811ffc4
|
Merge pull request 'feat: 实现 Phase 3 JWT + 认证服务' (#95) from feature/user-model-phase3 into develop
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/95
|
2026-06-14 17:20:35 +08:00 |
|
|
|
f878988048
|
feat: 编写 AuthService 单元测试(mock UserRepository)
|
2026-06-14 17:18:22 +08:00 |
|
|
|
e455af6b2d
|
feat: 编写 TokenManager 单元测试
|
2026-06-14 17:17:28 +08:00 |
|
|
|
5211d14d50
|
feat: 定义并实现 AuthService(注册/登录/刷新/登出)
|
2026-06-14 17:14:52 +08:00 |
|
|
|
5b8cbb025f
|
feat: 实现 JWT 认证中间件(AuthMiddleware)
|
2026-06-14 17:13:54 +08:00 |
|
|
|
fca9108882
|
feat: 实现密码哈希与校验工具(bcrypt)
|
2026-06-14 17:07:51 +08:00 |
|
|
|
20597101f5
|
feat: 实现 TokenManager(JWT 签发/校验/哈希)
|
2026-06-14 17:07:12 +08:00 |
|
|
|
5e83531d54
|
Merge pull request 'feat: 定义用户模块 User 模型与 Repository 层' (#94) from feature/user-mode-phase2 into develop
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/94
|
2026-06-14 17:03:46 +08:00 |
|
|
|
9842b4a457
|
feat: 编写 UserRepository 单元测试
|
2026-06-14 16:56:29 +08:00 |
|
|
|
ce13e5a048
|
feat: 实现内存 UserRepository(测试用)
|
2026-06-14 16:55:44 +08:00 |
|
|
|
36827edfea
|
feat: 实现 PostgreSQL UserRepository
|
2026-06-14 16:55:12 +08:00 |
|
|
|
af73e78aa3
|
feat: 定义 UserRepository 接口及 User 数据模型
|
2026-06-14 16:54:21 +08:00 |
|
|
|
c9c174f400
|
feat: 扩展 models 新增 User 结构体
|
2026-06-14 16:53:54 +08:00 |
|
|
|
c0972856c6
|
Merge pull request 'feat: 配置扩展与 PostgreSQL 连接池' (#93) from feature/user-model-phase1 into develop
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/93
|
2026-06-14 16:50:25 +08:00 |
|
|
|
0ff810a297
|
feat: main.go 条件初始化 PostgreSQL 连接池
- 添加 store 包导入
- 当 storage.driver 为 postgres 时创建 pgxpool
- 使用 defer 确保连接池正确关闭
- 添加日志记录连接状态
|
2026-06-14 16:43:07 +08:00 |
|
|
|
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 |
|
|
|
0edafbbf8a
|
feat: 实现 PostgreSQL 连接池
- 新增 internal/store/db.go
- 实现 NewPostgresPool(ctx, dsn) 创建连接池
- 添加 pgx/v5 依赖
- 最大连接数设置为 10
|
2026-06-14 16:41:50 +08:00 |
|
|
|
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 |
|
|
|
07211675e9
|
Merge pull request 'feat/tips' (#92) from feat/tips into develop
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/92
|
2026-06-14 16:32:18 +08:00 |
|
|
|
7a0443ebcc
|
style: 样式优化
|
2026-06-14 16:31:23 +08:00 |
|
|
|
fe053f94dc
|
fix: 隐藏观察模式按钮,清理未使用的 toggleMode 引用
|
2026-06-14 15:56:59 +08:00 |
|
|
|
9433612c4b
|
Merge pull request '聊天框与会话历史栏优化' (#91) from fix/language into develop
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/91
|
2026-06-14 15:46:40 +08:00 |
|
|
|
92f3f45c41
|
feat: 新增会话历史侧边栏,支持新建/切换/删除/重命名会话
类似 ChatGPT 的侧边栏布局,消息历史持久化到 localStorage。
- 新增 SessionSummary 类型和 localStorage 读写函数
- 新增 useSessionList Hook 管理会话列表 CRUD
- 新增 SessionSidebar 组件(展开/折叠、行内重命名)
- App.tsx 协调 useSessionList 和 useVisionSession
- 消息变化时自动持久化,切换/新建会话时保存并加载
- 新增 i18n 翻译 key(中/英/日)
|
2026-06-14 15:44:25 +08:00 |
|
|
|
74cd6c7d2d
|
Merge pull request 'chore: 硬编码公网 IP 地址' (#90) from develop into main
Deploy / deploy (push) Successful in 10s
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/90
|
2026-06-14 15:29:29 +08:00 |
|
|
|
8f8e9dea5f
|
Merge pull request 'chore: 硬编码公网 IP 地址' (#89) from fix/workflow-fix into develop
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/89
|
2026-06-14 15:29:19 +08:00 |
|
|
|
2bb72096de
|
chore: 硬编码公网 IP 地址
|
2026-06-14 15:29:02 +08:00 |
|
|
|
6b99336941
|
Merge pull request 'chore: 部署完成回显显示公网 IP' (#88) from develop into main
Deploy / deploy (push) Successful in 8s
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/88
|
2026-06-14 15:28:09 +08:00 |
|
|
|
ae91f877fe
|
Merge pull request 'chore: 部署完成回显显示公网 IP' (#87) from fix/workflow-fix into develop
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/87
|
2026-06-14 15:27:57 +08:00 |
|