84 lines
2.1 KiB
Go
84 lines
2.1 KiB
Go
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)
|
||
}
|