视频会议保存

This commit is contained in:
duoaohui
2026-05-18 19:42:55 +08:00
parent 315884685f
commit ac8ec4c903
41 changed files with 5069 additions and 39 deletions

View File

@@ -140,3 +140,99 @@ type ActiveGroupItem struct {
Name string `json:"name"` // 群名称
Count int64 `json:"count"` // 消息数
}
// ====== 管理端会议管理 DTOPhase B 扩展) ======
// AdminMeetingListRequest 管理端会议列表查询请求
//
// 与消息列表保持一致的分页/筛选风格:
// - Keyword模糊匹配 title 或 room_code方便客服按客户描述定位
// - Status0=未开始 / 1=进行中 / 2=已结束(与 meeting_rooms.status 一一对应)
// - HasRecordingtrue=仅返回有录制记录的会议,便于"录制审计"场景
// - StartTime / EndTime按 created_at 过滤YYYY-MM-DD 闭区间
type AdminMeetingListRequest struct {
Keyword string `form:"keyword"` // 模糊匹配 title / room_code
Status *int `form:"status"` // 0=未开始 1=进行中 2=已结束
HostID *int64 `form:"host_id"` // 主持人 ID 精确匹配
HasRecording *bool `form:"has_recording"` // true=仅含录制的会议
StartTime string `form:"start_time"` // YYYY-MM-DD
EndTime string `form:"end_time"` // YYYY-MM-DD
Page int `form:"page"`
PageSize int `form:"page_size"`
}
// AdminMeetingDTO 管理端会议条目(列表行)
//
// 字段选择原则:
// - 列表场景:会议号 / 标题 / 主持人 / 状态 / 时间 / 参与人数 / 录制数
// - 详情字段(参与者明细、录制列表)放到 GetMeetingDetail 单独返回,避免列表过宽
type AdminMeetingDTO struct {
ID int64 `json:"id"`
RoomCode string `json:"room_code"`
Title string `json:"title"`
Type int `json:"type"` // 1=即时 2=预约
TypeLabel string `json:"type_label"` // "即时会议" / "预约会议"
Status int `json:"status"` // 0/1/2
StatusLabel string `json:"status_label"` // "未开始" / "进行中" / "已结束"
HostID int64 `json:"host_id"`
HostNickname string `json:"host_nickname"`
HostAvatar string `json:"host_avatar"`
MaxMembers int `json:"max_members"`
ParticipantCount int `json:"participant_count"` // 历史累计入会人数(去重)
RecordingCount int `json:"recording_count"` // 该会议的录制条数
DurationSec int `json:"duration_sec"` // 会议时长(秒);结束前用 now-started_at结束后用 ended_at-started_at
ScheduledAt string `json:"scheduled_at"` // 预约会议开始时间,空表示即时会议
StartedAt string `json:"started_at"` // 实际开始
EndedAt string `json:"ended_at"` // 实际结束
EndedReason string `json:"ended_reason"` // host_ended / empty_ttl / admin_force / system_error
CreatedAt string `json:"created_at"`
}
// AdminMeetingListResponse 管理端会议列表响应(含统计摘要)
type AdminMeetingListResponse struct {
Total int64 `json:"total"`
List []AdminMeetingDTO `json:"list"`
Page int `json:"page"`
PageSize int `json:"page_size"`
}
// AdminMeetingParticipantDTO 会议详情中的参与者条目
type AdminMeetingParticipantDTO struct {
UserID int64 `json:"user_id"`
Nickname string `json:"nickname"`
Avatar string `json:"avatar"`
Role int `json:"role"` // 0=普通 1=主持人 2=联合主持人
RoleLabel string `json:"role_label"`
JoinedAt string `json:"joined_at"`
LeftAt string `json:"left_at"` // 空表示仍在会议中
LeftReason string `json:"left_reason"` // self / kicked / host_end / empty_ttl / disconnect
Duration int `json:"duration"` // 秒
}
// AdminMeetingRecordingDTO 会议详情中的录制条目
type AdminMeetingRecordingDTO struct {
ID int64 `json:"id"`
StartedBy int64 `json:"started_by"`
Status string `json:"status"` // recording / uploading / ready / failed
FileURL string `json:"file_url"`
SizeBytes int64 `json:"size_bytes"`
DurationSec int `json:"duration_sec"`
FailureReason string `json:"failure_reason"` // 仅 failed 时返回
StartedAt string `json:"started_at"`
StoppedAt string `json:"stopped_at"`
}
// AdminMeetingDetailResponse 会议详情(含参与者列表 + 录制列表)
type AdminMeetingDetailResponse struct {
AdminMeetingDTO
Participants []AdminMeetingParticipantDTO `json:"participants"`
Recordings []AdminMeetingRecordingDTO `json:"recordings"`
}
// AdminMeetingStatsResponse 会议管理摘要统计(顶栏卡片)
type AdminMeetingStatsResponse struct {
TotalCount int64 `json:"total_count"` // 历史会议总数
ActiveCount int64 `json:"active_count"` // 当前进行中
TodayCount int64 `json:"today_count"` // 今日创建的会议
RecordingCount int64 `json:"recording_count"` // 录制总数
}