视频保存
This commit is contained in:
@@ -2,11 +2,11 @@ package controller
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"os"
|
||||
"strconv"
|
||||
|
||||
"github.com/echochat/backend/app/meeting/model"
|
||||
"github.com/echochat/backend/app/meeting/service"
|
||||
"github.com/echochat/backend/config"
|
||||
"github.com/echochat/backend/pkg/logs"
|
||||
"github.com/echochat/backend/pkg/utils"
|
||||
"github.com/gin-gonic/gin"
|
||||
@@ -21,11 +21,17 @@ import (
|
||||
// - GET /rooms/:code/recordings 列出录制(host 或参与者)
|
||||
type MeetingRecordingController struct {
|
||||
recordingSvc *service.MeetingRecordingService
|
||||
cfg *config.MeetingConfig
|
||||
}
|
||||
|
||||
// NewMeetingRecordingController Wire Provider
|
||||
func NewMeetingRecordingController(svc *service.MeetingRecordingService) *MeetingRecordingController {
|
||||
return &MeetingRecordingController{recordingSvc: svc}
|
||||
//
|
||||
// cfg 提供 InternalWebhookSecret,用于校验 media-server 失败回调 X-Internal-Secret header
|
||||
func NewMeetingRecordingController(
|
||||
svc *service.MeetingRecordingService,
|
||||
cfg *config.MeetingConfig,
|
||||
) *MeetingRecordingController {
|
||||
return &MeetingRecordingController{recordingSvc: svc, cfg: cfg}
|
||||
}
|
||||
|
||||
// handleErr 将录制相关领域错误映射成 HTTP 状态码
|
||||
@@ -161,9 +167,11 @@ type mediaServerFailurePayload struct {
|
||||
// - 始终返回 200(webhook 语义:吞错避免 media-server 端反复重试)
|
||||
func (ctl *MeetingRecordingController) MediaServerFailureWebhook(c *gin.Context) {
|
||||
funcName := "controller.meeting_recording_controller.MediaServerFailureWebhook"
|
||||
secret := os.Getenv("INTERNAL_WEBHOOK_SECRET")
|
||||
// 优先 config.meeting.internal_webhook_secret(yaml/viper)。
|
||||
// 环境变量覆盖走 ECHOCHAT_MEETING_INTERNAL_WEBHOOK_SECRET(LoadConfig 已启用 viper.AutomaticEnv)。
|
||||
secret := ctl.cfg.InternalWebhookSecret
|
||||
if secret == "" {
|
||||
logs.Warn(c.Request.Context(), funcName, "INTERNAL_WEBHOOK_SECRET 未配置,拒绝 webhook 请求")
|
||||
logs.Warn(c.Request.Context(), funcName, "meeting.internal_webhook_secret 未配置,拒绝 webhook 请求")
|
||||
utils.ResponseForbidden(c, "internal webhook not configured")
|
||||
return
|
||||
}
|
||||
|
||||
@@ -185,6 +185,12 @@ func provideLLMSourceConfig(cfg *config.Config) *config.LLMSourceConfig {
|
||||
return &cfg.LLMSource
|
||||
}
|
||||
|
||||
// provideMeetingConfig 从全局 Config 中提取 MeetingConfig
|
||||
// Phase B:会议模块需要 InternalWebhookSecret 用于校验 media-server 失败回调
|
||||
func provideMeetingConfig(cfg *config.Config) *config.MeetingConfig {
|
||||
return &cfg.Meeting
|
||||
}
|
||||
|
||||
// InfraSet 基础设施层 Provider Set
|
||||
var InfraSet = wire.NewSet(
|
||||
provideDBConfig,
|
||||
@@ -193,6 +199,7 @@ var InfraSet = wire.NewSet(
|
||||
provideMinioConfig,
|
||||
provideServerConfig,
|
||||
provideLLMSourceConfig,
|
||||
provideMeetingConfig,
|
||||
db.NewPostgres,
|
||||
db.NewRedis,
|
||||
db.NewLLMSourceDB,
|
||||
|
||||
@@ -119,7 +119,8 @@ func InitializeApp(cfg *config.Config) (*App, error) {
|
||||
meetingManageService := service2.NewMeetingManageService(meetingManageDAO, meetingRecordingService)
|
||||
meetingManageController := controller2.NewMeetingManageController(meetingManageService)
|
||||
meetingController := controller7.NewMeetingController(meetingService)
|
||||
meetingRecordingController := controller7.NewMeetingRecordingController(meetingRecordingService)
|
||||
meetingConfig := provideMeetingConfig(cfg)
|
||||
meetingRecordingController := controller7.NewMeetingRecordingController(meetingRecordingService, meetingConfig)
|
||||
meetingWSHandler := controller7.NewMeetingWSHandler(meetingSignalService, hub)
|
||||
meetingCleanupTask := task2.NewMeetingCleanupTask(meetingLifecycleService, meetingRoomDAO, meetingChatDAO)
|
||||
llmSourceConfig := provideLLMSourceConfig(cfg)
|
||||
|
||||
Reference in New Issue
Block a user