EasyAudioEncode/internal/web/api/provider.go
2025-12-25 17:01:46 +08:00

84 lines
2.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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