100 lines
2.5 KiB
Go
100 lines
2.5 KiB
Go
package initialize
|
||
|
||
import (
|
||
"fmt"
|
||
|
||
"github.com/gin-gonic/gin"
|
||
"gorm.io/gorm"
|
||
)
|
||
|
||
// Plugin 插件接口 (v1版本)
|
||
type Plugin interface {
|
||
// Register 注册路由
|
||
Register(group *gin.RouterGroup)
|
||
// RouterPath 返回路由路径
|
||
RouterPath() string
|
||
}
|
||
|
||
// PluginV2 插件接口 (v2版本)
|
||
type PluginV2 interface {
|
||
// Register 注册到引擎
|
||
Register(engine *gin.Engine)
|
||
}
|
||
|
||
// PluginManager 插件管理器
|
||
type PluginManager struct {
|
||
db *gorm.DB
|
||
pluginsV1 []Plugin
|
||
pluginsV2 []PluginV2
|
||
initialized bool
|
||
}
|
||
|
||
// NewPluginManager 创建插件管理器
|
||
func NewPluginManager(db *gorm.DB) *PluginManager {
|
||
return &PluginManager{
|
||
db: db,
|
||
pluginsV1: make([]Plugin, 0),
|
||
pluginsV2: make([]PluginV2, 0),
|
||
}
|
||
}
|
||
|
||
// RegisterPluginV1 注册V1版本插件
|
||
func (m *PluginManager) RegisterPluginV1(plugin Plugin) {
|
||
m.pluginsV1 = append(m.pluginsV1, plugin)
|
||
}
|
||
|
||
// RegisterPluginV2 注册V2版本插件
|
||
func (m *PluginManager) RegisterPluginV2(plugin PluginV2) {
|
||
m.pluginsV2 = append(m.pluginsV2, plugin)
|
||
}
|
||
|
||
// InstallPlugins 安装所有插件
|
||
func (m *PluginManager) InstallPlugins(privateGroup *gin.RouterGroup, publicGroup *gin.RouterGroup, engine *gin.Engine) {
|
||
if m.db == nil {
|
||
fmt.Println("项目暂未初始化,无法安装插件,初始化后重启项目即可完成插件安装")
|
||
return
|
||
}
|
||
|
||
// 安装V1版本插件
|
||
m.installPluginsV1(privateGroup, publicGroup)
|
||
|
||
// 安装V2版本插件
|
||
m.installPluginsV2(engine)
|
||
|
||
m.initialized = true
|
||
}
|
||
|
||
// installPluginsV1 安装V1版本插件
|
||
func (m *PluginManager) installPluginsV1(privateGroup *gin.RouterGroup, publicGroup *gin.RouterGroup) {
|
||
for _, plugin := range m.pluginsV1 {
|
||
fmt.Printf("%s 注册开始!\n", plugin.RouterPath())
|
||
pluginGroup := privateGroup.Group(plugin.RouterPath())
|
||
plugin.Register(pluginGroup)
|
||
fmt.Printf("%s 注册成功!\n", plugin.RouterPath())
|
||
}
|
||
}
|
||
|
||
// installPluginsV2 安装V2版本插件
|
||
func (m *PluginManager) installPluginsV2(engine *gin.Engine) {
|
||
for _, plugin := range m.pluginsV2 {
|
||
plugin.Register(engine)
|
||
}
|
||
}
|
||
|
||
// PluginInit 初始化V1版本插件(兼容旧版方式)
|
||
func PluginInit(group *gin.RouterGroup, plugins ...Plugin) {
|
||
for _, plugin := range plugins {
|
||
fmt.Printf("%s 注册开始!\n", plugin.RouterPath())
|
||
pluginGroup := group.Group(plugin.RouterPath())
|
||
plugin.Register(pluginGroup)
|
||
fmt.Printf("%s 注册成功!\n", plugin.RouterPath())
|
||
}
|
||
}
|
||
|
||
// PluginInitV2 初始化V2版本插件(兼容旧版方式)
|
||
func PluginInitV2(engine *gin.Engine, plugins ...PluginV2) {
|
||
for _, plugin := range plugins {
|
||
plugin.Register(engine)
|
||
}
|
||
}
|