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)
|
|||
|
|
}
|