|
|
6c0491bf7d
|
更新 frontend/src/utils/mediasoup-client.js
|
2026-05-16 19:38:19 +08:00 |
|
|
|
ec56cc4dd1
|
更新 frontend/src/utils/mediasoup-client.js
|
2026-05-16 19:11:35 +08:00 |
|
|
|
3813ff3d09
|
更新 deploy/docker-compose.dev.yml
|
2026-05-16 16:26:34 +08:00 |
|
|
|
5324473622
|
更新 media-server/.env.example
|
2026-05-16 15:51:53 +08:00 |
|
|
|
61288cb21f
|
更新 media-server/.env.example
|
2026-05-16 11:52:35 +08:00 |
|
|
|
f81097b97c
|
更新 deploy/docker-compose.dev.yml
|
2026-05-15 20:01:03 +08:00 |
|
|
|
dfcb07afdb
|
更新 deploy/docker/redis/redis.conf
|
2026-05-15 19:59:20 +08:00 |
|
|
|
9d22595952
|
更新 deploy/docker-compose.dev.yml
|
2026-05-15 19:51:20 +08:00 |
|
|
|
b62204c65b
|
更新 deploy/docker/redis/redis.conf
|
2026-05-15 19:33:15 +08:00 |
|
|
|
5154dc7ed9
|
更新 scripts/status.sh
|
2026-05-15 19:17:51 +08:00 |
|
|
|
0784d0b228
|
更新 deploy/docker-compose.dev.yml
|
2026-05-15 19:09:09 +08:00 |
|
|
|
229bd9b4db
|
更新 deploy/.env.public.example
|
2026-05-15 19:08:42 +08:00 |
|
|
|
26c7921030
|
更新 deploy/.env.public.example
|
2026-05-15 19:06:28 +08:00 |
|
|
|
c5f877410c
|
更新 deploy/docker-compose.dev.yml
|
2026-05-15 19:06:12 +08:00 |
|
|
|
79e9b113d0
|
更新 deploy/.env.public.example
|
2026-05-15 19:01:00 +08:00 |
|
|
|
d30fd516c0
|
更新 deploy/docker-compose.dev.yml
|
2026-05-15 19:00:31 +08:00 |
|
|
|
a4d42e10bb
|
更新 deploy/docker-compose.dev.yml
|
2026-05-15 18:39:12 +08:00 |
|
|
|
a17b002c2d
|
更新 deploy/.env.public.example
|
2026-05-15 18:33:42 +08:00 |
|
|
|
d9774ceb0e
|
更新 deploy/docker-compose.dev.yml
|
2026-05-15 17:50:02 +08:00 |
|
|
|
eba7f2b649
|
更新 deploy/docker-compose.dev.yml
|
2026-05-15 17:13:28 +08:00 |
|
|
|
69807dd235
|
更新 deploy/docker-compose.dev.yml
|
2026-05-15 17:05:26 +08:00 |
|
|
|
620b7bc130
|
更新 deploy/docker-compose.dev.yml
|
2026-05-15 16:52:16 +08:00 |
|
|
|
104bc7b9aa
|
更新 deploy/docker-compose.dev.yml
|
2026-05-15 16:47:46 +08:00 |
|
|
|
c886276229
|
更新 backend/go-service/config/config.dev.yaml
|
2026-05-15 16:42:33 +08:00 |
|
|
|
2846ce5e7d
|
更新 deploy/docker-compose.dev.yml
|
2026-05-15 16:39:19 +08:00 |
|
|
|
d1a3735acc
|
更新 backend/go-service/config/config.dev.yaml
|
2026-05-15 13:53:14 +08:00 |
|
|
|
5dcb506bda
|
更新 backend/go-service/config/config.dev.yaml
|
2026-05-15 12:54:02 +08:00 |
|
|
|
c469d35a61
|
更新 backend/go-service/config/config.dev.yaml
|
2026-05-15 12:50:20 +08:00 |
|
|
|
17d2d0a1db
|
更新 scripts/deploy-public.sh
|
2026-05-15 12:36:49 +08:00 |
|
|
|
a98773a5e0
|
更新 deploy/docker-compose.dev.yml
|
2026-05-15 12:19:00 +08:00 |
|
|
|
d03d4532ed
|
更新 media-server/.env.example
|
2026-05-15 12:13:01 +08:00 |
|
|
|
1ea6036714
|
更新 deploy/.env.public.example
|
2026-05-15 12:12:14 +08:00 |
|
|
|
1cdaeb887a
|
更新 scripts/start.sh
|
2026-05-15 12:09:22 +08:00 |
|
|
|
2485c1d8d2
|
更新 deploy/.env.public.example
|
2026-05-15 12:03:22 +08:00 |
|
|
|
26d3af787b
|
更新 media-server/.env.example
|
2026-05-15 11:19:13 +08:00 |
|
|
|
8292bf86e4
|
更新 frontend/vite.config.js
|
2026-05-14 20:40:04 +08:00 |
|
|
|
3b8cb6c274
|
更新 frontend/vite.config.js
|
2026-05-14 19:07:22 +08:00 |
|
|
|
d4c5f41952
|
更新 admin/vite.config.js
|
2026-05-14 19:06:15 +08:00 |
|
bujinyuan
|
f41e63ba6b
|
docs(phase2e-2): 补齐顶层文档进度同步,Phase 2e-2 会议 MVP 全面切 ✅
用户准备开始真实用户测试,此 commit 对"六份文档同步"之外遗漏的上层/入口文档
做二次补齐,保证所有出现阶段状态描述的文档都与 CURRENT_STATUS.md 一致。
补齐范围:
- README.md
· "MVP 功能规划" 原把 Phase 2 / Phase 3 标记为"待开始",与实际进度严重偏离
· 整段重写为"开发进度"小节,按 Phase 1 / 2a-d / 2e-1 / 2e-2 分别列出 ✅
已完成状态与关键交付;2e-3 / Phase 3 / P2 推迟项独立列为"待启动(规划中)"
· "文档导航"扩展 5 条新入口:Phase 2e 路线图 / 2e-2 设计 / 2e-2 实施 /
2e-2 代码审查 / 2e-2 验收报告 / 会议 MVP 部署指南
- docs/plans/2026-02-27-echochat-system-design.md(整体系统设计方案)
· §Phase 2e 行:追加"2e-1 ✅ / 2e-2 ✅ / 2e-3 📋 待启动"状态徽标
· §Phase 2e-2:从"📋 设计阶段完成,代码开发待启动"改为
"✅ 已完成(2026-04-24,Task 0-16 全量落地 + 代码审查 4 P0 + 8 P1 + 7 P2 + 7 Nit 闭环)"
- docs/plans/2026-04-21-phase2e-2-design.md(Phase 2e-2 设计文档)
· 顶部"状态 / 最后更新"由"📋 设计阶段(待评审后进入代码开发)"切 ✅
· §一 文档定位的"本文档"行同步切 ✅
- docs/plans/2026-04-24-phase2e-2-task15-ui-polish.plan.md(Task 15 计划)
· 顶部"状态"由"📋 设计阶段(等待用户 Review)"切 ✅
· 追加"交付记录"行指向 CURRENT_STATUS.md Task 15/16 交付条目
- docs/deployment/meeting-mvp.md(会议 MVP 部署指南)
· 顶部元信息追加阶段 ✅ 标记 + Task 16 追加的 REDIS_PASSWORD × redis.conf
requirepass 联动校验指引
验证:workspace grep "📋 设计阶段|🚧 代码开发|待开始" 在顶层 README/docs 下
已无遗留进度描述与实际状态冲突(仅 README 新增的"Phase 2e-3 / Phase 3 — 待启动
(规划中)"章节为规划项,符合预期)。
Made-with: Cursor
|
2026-04-23 17:59:32 +08:00 |
|
bujinyuan
|
2452ca7332
|
docs(phase2e-2): Task 16 收官 · 同步 6 份文档 + 落盘 test-report-phase2e-2-meeting.md
Phase 2e-2 会议 MVP 整体切 ✅(Task 0-16 全部完成),本提交是 Task 16 最后一步
"文档同步"批次,配合历次 commit(cdaa39d P0 / ea2bf96 P1 / f5ae095 资源生命周期 /
5ed14c2 E2E 剧本 / c35097a P2+Nit)完成阶段收官。
同步范围:
- docs/progress/CURRENT_STATUS.md
· 顶部元信息:"当前阶段"从"代码开发阶段 🚧"切为"已完成 ✅"
· 新增 2026-04-24 Task 16 收官小节:资源生命周期专项 / Playwright 5 场景 /
P2+Nit 收尾 / 完成度汇总(Task 0-16 + 审查 4 P0 + 8 P1 + 7 P2 + 7 Nit)
- docs/plans/2026-04-21-phase2e-2-implementation.plan.md
· 状态切 ✅;Task 16 行切 ✅ + 实际交付小节(5 commits + 5 场景剧本 + 6 份文档)
- docs/plans/2026-04-20-phase2e-design.md
· Phase 2e 顶层状态:2e-2 切 ✅;最后更新写明 Task 16 收官
- docs/reviews/2026-04-23-phase2e-2-code-review.md
· (历次 commit c35097a 已追加)"Task 16 修复追踪"小节包含已修复表 + 推迟登记表
- .cursor/rules/project-context.mdc
· Phase 2e 进度条更新;新增 Task 15 / 16 两个完整 bullet(Task 16 含 5 commit 详解)
- test-report-phase2e-2-meeting.md(新增)
· 八章完整验证报告:测试环境 / 构建 / 功能 / E2E 剧本 / 代码审查修复 /
部署双态 / 已知限制 / 验收结论
构建&清理复核(均在 Task 16 历次 commit 中验证通过):
- go vet ./... / go build ./... / npm run build:h5 / npx tsc --noEmit 全绿
- console.log / TODO / FIXME 扫描 0 残留
Made-with: Cursor
|
2026-04-23 17:53:54 +08:00 |
|
bujinyuan
|
c35097a0d8
|
fix(meeting): Task 16 修复 code-reviewer 审计 P2 七项 + Nit 七项
覆盖 Phase 2e-2 代码审查报告(docs/reviews/2026-04-23-phase2e-2-code-review.md)
P2/Nit 收尾批次,均在本仓库完成闭环;剩余 5 项登记推迟至 Phase 2f/3。
===== P2 七项 =====
- P2-1 cleanupUserResources 补 transport 清理
· media-server 新增 DELETE /internal/v1/transports/:id + transport.service.closeTransport
· Go MediaOrchestrator 接口新增 CloseTransport;HTTP 实现按 doCloseRequest 走 4xx 幂等 + 指数退避
· meeting_signal_service.cleanupUserResources 新增 "transport:<id>" 分支
- P2-2 preview.vue 快速切设备竞态
· previewSeq 序号 + nextTick 后 stale 判断,丢弃过期结果
· onVideoChange/onAudioChange 走 scheduleRestartPreview 200ms 防抖
· onBeforeUnmount 清理 changeDebounceTimer
- P2-3 room.vue onLoad redirectTo 后补 return
· 引入 redirectingToJoin 守卫,跳转页不再执行 onMounted 初始化
- P2-6 generateUniqueRoomCode 重试上限监控
· 重试后成功:Warn 日志(码空间健康度告警)
· 重试耗尽:Error 日志 + ErrRoomCodeConflict
· 修正 logs.Error 调用签名(去掉多余的 nil)
- P2-7 SendChatMessage 服务端长度 + 频率限制
· 新增 ErrChatContentEmpty / ErrChatContentTooLong / ErrChatRateLimited
· utf8.RuneCountInString 校验 500 字符上限
· Redis INCR + EXPIRE 滑动窗口(30 条/60s,首次写入 EXPIRE 兜底)
· controller.handleError 映射为 HTTP 400
- P2-8 MEETING_ENDED_REASON_LABEL 覆盖复核
· 新增前端专属常量 MEETING_ENDED_REASON_KICKED + 文案
· store/meeting.js _onMemberKicked 使用常量
· 同步修复后端 OnWSDisconnect 硬编码 "ws_disconnect" → constants.MeetingLeftReasonDisconnect
- P2 已修 P2-1/2/3/6/7/8;P2-4(WS token 迁出 URL query)与 P2-5(Chat 服务拆分)登记推迟
===== Nit 七项 =====
- Nit: kind:id 解析改用 strings.SplitN
· cleanupUserResources / pushExistingRoomState 两处同步
- Nit: resourceTTL 中央化
· 新增 constants.MeetingResourceTrackTTLSeconds(3600)
· meeting_signal_service.go resourceTTL 由 const 改 var 并引用常量
- Nit: ws/handler.go CheckOrigin 白名单
· NewHandler 新增 serverCfg 依赖;checkOrigin 支持同源放行 / dev 模式放行 / release 模式白名单严格匹配
· config.ServerConfig 新增 WSAllowedOrigins(逗号分隔)+ AllowedOrigins() / IsRelease() 辅助方法
· provider.go 新增 provideServerConfig,wire_gen.go 同步
- Nit: http_media_orchestrator.go 超时 + CreateRouter 重试
· 默认 TimeoutMS 5000→10000ms 兼容 Worker 冷启动
· 新增 CreateRouterRetry(默认 1 次,300ms 退避),仅对非 404 错误重试
· config.dev.yaml / config.docker.yaml 同步写入显式配置
- Nit: deploy-public.sh REDIS_PASSWORD × redis.conf 联动校验
· 检测 REDIS_PASSWORD 与 redis.conf 的 requirepass 配对一致性
· redis.conf 增加公网部署 requirepass 使用说明
- Nit: media-server internal-auth isPrivatePath 按 path 匹配
· 剔除 query/hash 后再与白名单 startsWith,避免 "?" 语义混淆
- Nit: mediasoup-client.js in-flight 锁走读确认
· finally 分支已覆盖 resolve/reject 两路,追加注释强化语义
- Nit 走读复核:_onMemberLeft 整槽关闭 vs _onProducerNew(closed=true) 精确匹配 producerId
· 粒度正确,无需改动(登记结论)
===== 构建验证 =====
- go vet ./... / go build ./... 通过
- frontend npm run build:h5 通过(仅 uni-app legacy warning,无 error)
- media-server npx tsc --noEmit 通过
===== 审查追踪小节 =====
docs/reviews/2026-04-23-phase2e-2-code-review.md 追加 "Task 16 修复追踪(2026-04-24 更新)":
- 已修复一览(本批次 14 处 + 历次 commit cdaa39d / ea2bf96 / f5ae095 / 5ed14c2)
- 推迟登记表(P2-4 / P2-5 / 端口收敛 / appData 校验 / RFC3339 时间格式,共 5 项)
Made-with: Cursor
|
2026-04-23 17:45:03 +08:00 |
|
bujinyuan
|
5ed14c2aac
|
docs(meeting): Task 16 E2E 剧本落盘 + .gitignore 精细化
Playwright MCP 4 场景剧本(.playwright-mcp/task16/):
- README.md:总览 + 账号/环境/资源断言指南
- scenarios/01-create-and-join-by-code.md:创建→会议号加入→媒体打通→结束,含 Redis/MySQL/media-server 三维资源断言
- scenarios/02-invite-link-with-password.md:邀请链接带密码 + P0-4 "密码不走 URL query" 回归
- scenarios/03-notify-quickjoin.md:通知中心「立即加入」跳转 + 过期卡片降级
- scenarios/04-host-toolkit-and-transfer.md:主持人四件套 + 宽限期重连/到期自动转让(P1-1 原子性 + P1-7 处理锁验证)
- scenarios/05-reopen-5times-resource-cleanup.md:反复开关 5 次 + 前端 heap 快照/ Redis 累积对比/ media-server 观测端点对比,验证 Step A(f5ae095)资源清理修复
手工回归点(manual-regression.md):17 项 MCP 难以稳定覆盖的交互场景
(HTTPS 自签 / 跨网段 iOS / 网络抖动 / 物理返回 / 跨 tab 并发 / 摄像头抢占 等)
.gitignore 调整:
- 放行 .playwright-mcp/task16/ 下的 Markdown 剧本文档进入版本控制
- 仍忽略运行时产物(*.log/*.png/*.yml/截图)
- task15/ 保持未跟踪状态,避免历史截图噪声入库
Made-with: Cursor
|
2026-04-23 17:21:42 +08:00 |
|
bujinyuan
|
f5ae095033
|
fix(meeting): Task 16 会议销毁路径资源清理专项
前端修复:
- _onRoomEnded 保留结束页数据,新增 exitEndedRoom() 动作
room.vue onUnload 在 ENDED 状态调用,释放 currentRoom / participants / chatMessages 等 pinia state
- endMeeting() API 成功后立即触发 _onRoomEnded 本地兜底,不再依赖 room.ended 广播
避免 API 成功但 WS 抖动导致 engine / timer / AudioContext 泄漏
- 新增 _pendingBroadcastTimers 集合收纳 _broadcastSelfState 的 setTimeout 句柄
_cleanupMedia 统一 clearTimeout,避免会议结束后 stale 重试逻辑排队
后端修复:
- MeetingLifecycleService.OnRoomEnded 统一生命周期收尾
取消 graceTimers / emptyTTLTimers + Pipeline DEL host_grace / empty_ttl / 两个 handling 锁 key
- EndRoom 事务提交后遍历 activesBefore 调 cleanupRoomRedisResidual
批量 DEL 每个前任活跃成员的 resourceTrackKey + memberStateKey
补调 lifecycleSvc.OnRoomEnded 清理自身 timer + keys
- HandleEmptyRoomExpired MarkEnded 后补调 cleanupRoomRedisResidual + 清 host_grace 残留
验证:go vet + go build + npm run build:h5 全部通过
Made-with: Cursor
|
2026-04-23 17:12:38 +08:00 |
|
bujinyuan
|
ea2bf96c2f
|
fix(meeting): Task 16 修复 code-reviewer 审计 P1 八项
按 docs/reviews/2026-04-23-phase2e-2-code-review.md 清单落地 P1 批次:
- P1-1 主持人转让原子性:MeetingParticipantDAO.TransferHost 内部事务
合并 meeting_rooms.host_id 更新,service/lifecycle 移除冗余 UpdateHost
- P1-2 ListChatMessages / ListMyMeetings 回归 DAO:新增
MeetingChatDAO.ListByRoomBefore 反向游标,service 移除 s.db 直查
- P1-3 ListMyMeetings N+1 放大优化:新增
MeetingParticipantDAO.ListJoinedRoomsByUser JOIN + DISTINCT 单次 SQL
- P1-4 EndRoom 行锁 + 事务:s.db.Transaction 包裹
SELECT FOR UPDATE → 快照 → MarkEnded → LeaveAllActive;DAO 补
WithTx(*gorm.DB) 和 GetByIDForUpdate
- P1-5 后台 goroutine trace_id 保留:新增 logs.DetachContext(ctx);
替换 meeting_service / meeting_signal_service 共 10 处 context.Background();
meeting_ws_handler 每条 WS 消息分配独立 trace_id
- P1-6 _broadcastSelfState 重试:最多 2 次指数退避(700ms→2100ms),
检测 localAudioEnabled/localVideoEnabled 已被后续动作覆盖时放弃旧 patch
- P1-7 HandleHostGraceExpired / HandleEmptyRoomExpired 处理锁:
独立 host_grace_handling:<code> / empty_ttl_handling:<code> SETNX + 60s TTL,
消除 Redis 自然过期 + 本地 timer 到点 + DEL 返回 0 的盲区
- P1-8 pushExistingRoomState 同步化:OnRoomJoin 返回前完成补推,
消除与 REST member.joined 并行造成的前端状态闪烁
并附带修复 .gitignore 中 logs/ 规则误伤 pkg/logs/ 代码目录的历史遗留问题,
将 logger.go / trace.go 正式纳入版本控制。
验证:backend go build + go vet 通过;frontend npm run build:h5 通过。
Made-with: Cursor
|
2026-04-23 16:53:30 +08:00 |
|
bujinyuan
|
cdaa39d686
|
fix(meeting): Task 16 修复 code-reviewer 审计 P0 四项 + 落盘审查报告
code-reviewer 子代理(docs/reviews/2026-04-23-phase2e-2-code-review.md)对 Phase 2e-2
整体做全栈审计,暴露 P0 × 4 / P1 × 8 / P2 × 8 / Nit × 11。本次先修 P0:
- P0-1 / P0-2 媒体资源归属越权:
新增 assertOwnsResource(roomCode, userID, kind, id) helper,用 resourceTrackKey Redis Set
SIsMember 校验 transport/producer/consumer 归属;统一接入 OnTransportConnect /
OnProduceStart / OnConsumeStart / OnConsumeResume / OnProducerClose 五个信令入口,
一次封死同类横向越权漏洞(Redis 查询失败时 fail-closed,避免抖动开口子)。
新增 service.ErrResourceNotOwned 错误常量。
- P0-3 CreateRoom Router 失败吞错:
旧实现 mediaErr != nil 仅 logs.Warn 继续返回成功 → zombie 房间 + 入会必败 +
一人一会议名额被占。改为 fail-closed 补偿:LeaveRoom + MarkEnded(system_error) +
返回新 service.ErrMediaServiceUnavailable,controller.handleError 映射为 500。
- P0-4 会议密码明文走 URL:
join.vue onNext 旧逻辑把密码拼 ?password=xxx,浏览器历史 / DevTools 留痕。
新增 meetingStore.draftJoinPayload 内存态草稿,join.vue 只跳转
?mode=join&code=xxx,preview.vue onLoad 读取后立即 draftJoinPayload = null 清空,
邀请链接里的 password 参数一律忽略。
验证:
- cd backend/go-service && go build ./... 通过
- cd frontend && npm run build:h5 通过
- 仅剩 1 个预先存在 unusedparams warning,与本次改动无关
P1 / P2 / Nit 清单保留在审查报告,按顺序继续处理。
Made-with: Cursor
|
2026-04-23 16:34:13 +08:00 |
|
bujinyuan
|
790996feaf
|
feat(meeting): Task 15 UI 打磨 + 主持人四件套 + 媒体层稳定性回归修复
- Task 15 UI:6 项原创特色(说话者流光 / 柔性网格 / 自视频浮窗 / 静音氛围色 / 入会滑入 / NetworkBadge 3 条波浪)+ 说话者双源探测(RTP audioLevel + WebAudio RMS)+ 主持人四件套(静音/开麦/转让/踢出)
- 新增 SelfVideoFloat 浮窗组件 + 4 份 design-system 页面文档(home / preview / room / invite)
- 媒体回归补丁(手工联调触发):
* 后端 signal_service 在 OnRoomJoin 追加 pushExistingRoomState → 向新加入者补发历史 producers + 历史成员 audio/video 状态
* 新增 Redis Hash memberStateKey 持久化成员 audio/video enabled,OnMemberStateChanged 落盘、cleanupUserResources 清理
* 前端 _broadcastSelfState 在本地音视频开关末尾同步 state.changed;_afterJoined 先 getRoom 再 room.join 修复后入者成员状态时序;_onMemberStateChanged 占位兜底
* _cleanupRemoteProducer 改为按 producerId 精准清理(修复 "关音频误关视频")
* _onRoomEnded + createAndEnter/joinAndEnter 强化 reset(修复重入会看不到自己画面)
* mediasoup-client ensureSend/RecvTransport 引入 in-flight Promise 锁防并发重复建连
- 文档同步:CURRENT_STATUS.md / Task 15 plan / phase2e-2 implementation plan
Made-with: Cursor
|
2026-04-23 16:04:46 +08:00 |
|
bujinyuan
|
46b37b8b4c
|
docs(meeting): 补齐 frontend/meeting.md 后续任务关联至 Task 14
- Task 9 补完完整描述(2026-04-21 前端 mediasoup-client 接入 + resume 走 WS 路径)
- Task 10-12 补入(2026-04-22 前端主链路 5 页 + 6 组件落地)
- Task 14 补入(2026-04-24 docker-compose 双态部署,API 契约无变)
Made-with: Cursor
|
2026-04-22 18:06:50 +08:00 |
|
bujinyuan
|
6913b9e72f
|
docs(task14): 同步 Phase 2e-2 Task 14 进度至全量项目文档
- README.md:脚本表格新增 deploy-public.sh + full 子命令说明;
"方式二" 改为 scripts/start.sh full + 指向 docs/deployment/meeting-mvp.md
- docs/api/README.md:meeting 模块状态标注 Task 5/6/7/13 + extra 8 字段
- docs/architecture/system-architecture.md:meeting 状态升至 Task 0-14 ✅;
media-server / coturn 行同步标注 Task 14 双态编排落地
- docs/plans/2026-04-20-phase2e-design.md:最后更新 + 变更记录新增 04-24 条目
- media-server/README.md:后续任务新增 Task 9 ✅ + Task 14 ✅,指向部署指南
保证所有项目级 README / 架构 / 路线图文档都处于 Task 0-14 ✅ 最新状态。
Made-with: Cursor
|
2026-04-22 18:04:20 +08:00 |
|
bujinyuan
|
a01e973335
|
feat(deploy): Task 14 完成 docker-compose 扩展 + 环境变量双态部署
- deploy/docker-compose.dev.yml 新增 media-server 服务 + coturn(profiles:public),
全部服务参数改为 env 变量注入,go-service 依赖 media-server
- deploy/.env.example / .env.local.example / .env.public.example 三份模板,
公网模板用 _REPLACE_WITH_*_ 占位符防"示例值上生产"
- scripts/start.sh / stop.sh / status.sh 新增 full 子命令对接 docker compose --profile public
- scripts/deploy-public.sh 新建:env 校验 + 端口 checklist + Docker 自检 +
--profile public up -d --build + 健康检查闭环
- docs/deployment/meeting-mvp.md 新建:双态部署全流程 + 强密码生成 + 防火墙 + FAQ
- 双模式 docker compose config 校验通过;deploy-public.sh 三种错误场景按预期退出
同步更新 CURRENT_STATUS / implementation.plan / project-context
Task 0-14 ✅ / 剩余 Task 15-16
Made-with: Cursor
|
2026-04-22 17:59:48 +08:00 |
|
bujinyuan
|
ba8c72aae0
|
docs(task13): 补齐 meeting/notify API 文档 + Playwright UI 回归结果
## API 文档(Task 13 前漏补)
- docs/api/frontend/meeting.md §9 邀请用户接口:展开 extra 8 字段清单
(room_code / room_title / has_password / invite_token / inviter_id
/ inviter_name / inviter_avatar / expired_at),并说明前端如何据
expired_at 判过期
- docs/api/frontend/meeting.md 后续任务关联:Task 13 标 ✅ + deep-link 路径
- docs/api/frontend/notify.md 概览:
* "支持内联按钮的通知类型" 表(friend_request / meeting_invite)
* "meeting_invite 专用 extra 字段" 详细清单
## Playwright UI 回归结果(2026-04-23 补做)
采用 "A 侧 curl 邀请 + B 侧 Playwright 登录" 策略:
- testuser1 邀请 testuser2 → 通知中心渲染 meeting_invite 卡片
- 新邀请卡片 → 双按钮「立即加入 / 稍后」✅
- 过期邀请卡片 → 合并为单 disabled「邀请已过期」按钮 ✅
- 点「立即加入」→ 跳 /pages/meeting/preview?mode=join&code=516-162-828 ✅
- preview 页正确渲染 "即将加入会议 516-162-828" + 设备面板 ✅
- 截图:task13-notify-meeting-invite-cards.png
task13-preview-page-after-invite-accept.png
- CURRENT_STATUS.md + implementation.plan.md 已同步补录
Made-with: Cursor
|
2026-04-22 17:34:29 +08:00 |
|