EasyAudioEncode/internal/web/api/provider.go

84 lines
2.3 KiB
Go
Raw Permalink Normal View History

2025-12-25 17:01:46 +08:00
package api
import (
"easyaudioencode/internal/core/audioencode"
"easyaudioencode/internal/core/audioencode/store/audioencodedb"
"easyaudioencode/internal/core/host"
"easyaudioencode/internal/core/media"
"easyaudioencode/internal/core/transcode"
"net/http"
"easyaudioencode/domain/uniqueid"
"easyaudioencode/domain/uniqueid/store/uniqueiddb"
"easyaudioencode/domain/version/versionapi"
"easyaudioencode/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,
NewAudioEncodeCore,
NewAudioEncodeAPI,
versionapi.New,
host.NewCore,
media.NewCore,
)
)
type Usecase struct {
Conf *conf.Bootstrap
DB *gorm.DB
Version versionapi.API
AudioEncodeCore *audioencode.Core
AudioEncodeAPI AudioEncodeAPI
HostCore *host.Core
MediaCore *media.Core
TranscodeCore *transcode.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)
}
// NewAudioEncodeCore 推流任务
func NewAudioEncodeCore(db *gorm.DB) *audioencode.Core {
store := audioencodedb.NewDB(db).AutoMigrate(orm.EnabledAutoMigrate)
return audioencode.NewCore(store)
}