package api import ( "easyvqd/internal/core/host" "easyvqd/internal/core/media" "easyvqd/internal/core/vqd" "easyvqd/internal/core/vqd/store/audioencodedb" "easyvqd/internal/core/vqdtask" "net/http" "easyvqd/domain/uniqueid" "easyvqd/domain/uniqueid/store/uniqueiddb" "easyvqd/domain/version/versionapi" "easyvqd/internal/conf" "git.lnton.com/lnton/pkg/orm" "git.lnton.com/lnton/pkg/web" "github.com/gin-gonic/gin" "github.com/google/wire" "gorm.io/gorm" ) var ( ProviderVersionSet = wire.NewSet(versionapi.NewVersionCore) ProviderSet = wire.NewSet( wire.Struct(new(Usecase), "*"), NewHTTPHandler, NewVqdTaskCore, NewVqdTaskAPI, versionapi.New, host.NewCore, media.NewCore, ) ) type Usecase struct { Conf *conf.Bootstrap DB *gorm.DB Version versionapi.API VqdTaskCore *vqd.Core VqdTaskAPI VqdTaskAPI HostCore *host.Core MediaCore *media.Core VqdSdkCore *vqdtask.Core } // NewHTTPHandler 生成Gin框架路由内容 func NewHTTPHandler(uc *Usecase) http.Handler { cfg := uc.Conf // 检查是否设置了 JWT 密钥,如果未设置,则生成一个长度为 32 的随机字符串作为密钥 if cfg.Server.HTTP.JwtSecret == "" { uc.Conf.Server.HTTP.JwtSecret = orm.GenerateRandomString(32) } // 如果不处于调试模式,将 Gin 设置为发布模式 if !uc.Conf.Debug { gin.SetMode(gin.ReleaseMode) } g := gin.New() // 处理未找到路由的情况,返回 JSON 格式的 404 错误信息 // 如果启用了 Pprof,设置 Pprof 监控 if cfg.Server.HTTP.PProf.Enabled { web.SetupPProf(g, &cfg.Server.HTTP.PProf.AccessIps) } setupRouter(g, uc) RegisterPluginGRPC(uc.HostCore, uc.MediaCore, uc) // 这个一定要在最后执行,避免在迁移过程中发生panic导致迁移一半 uc.Version.RecordVersion() return g } // NewUniqueID 生成唯一 id func NewUniqueID(db *gorm.DB) uniqueid.Core { store := uniqueiddb.NewDB(db).AutoMigrate(orm.GetEnabledAutoMigrate()) return uniqueid.NewCore(store, 6) } // NewVqdTaskCore 推流任务 func NewVqdTaskCore(db *gorm.DB) *vqd.Core { store := audioencodedb.NewDB(db).AutoMigrate(orm.EnabledAutoMigrate) return vqd.NewCore(store) }