EasyVQD/internal/web/api/provider.go

84 lines
2.1 KiB
Go
Raw Normal View History

2026-01-15 19:32:33 +08:00
package api
import (
"easyvqd/internal/core/host"
"easyvqd/internal/core/media"
"easyvqd/internal/core/vqd"
"easyvqd/internal/core/vqd/store/audioencodedb"
"easyvqd/internal/core/vqdsdk"
"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 *vqdsdk.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)
}