package data import ( "fmt" "kra/internal/conf" datasystem "kra/internal/data/system" pkgcasbin "kra/pkg/casbin" "github.com/casbin/casbin/v2" _ "github.com/go-sql-driver/mysql" "github.com/google/wire" "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/logger" ) // ProviderSet is data providers. var ProviderSet = wire.NewSet( NewDB, NewData, NewCasbinEnforcer, datasystem.NewUserRepo, datasystem.NewApiRepo, datasystem.NewAuthorityRepo, datasystem.NewAuthorityBtnRepo, datasystem.NewCasbinRepo, datasystem.NewMenuRepo, datasystem.NewDictionaryRepo, datasystem.NewDictionaryDetailRepo, datasystem.NewJwtBlacklistRepo, datasystem.NewOperationRecordRepo, datasystem.NewParamsRepo, ) // Data 数据层包装器 type Data struct { db *gorm.DB } // NewData 创建数据层包装器 func NewData(db *gorm.DB) (*Data, func(), error) { cleanup := func() { // 关闭数据库连接 sqlDB, err := db.DB() if err == nil { sqlDB.Close() } } return &Data{db: db}, cleanup, nil } // NewDB 创建数据库连接 func NewDB(c *conf.Mysql) (*gorm.DB, error) { dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?%s", c.Username, c.Password, c.Path, c.Port, c.DbName, c.Config) db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{ Logger: logger.Default.LogMode(logger.Info), }) if err != nil { return nil, err } return db, nil } // NewCasbinEnforcer 创建Casbin Enforcer func NewCasbinEnforcer(db *gorm.DB) (*casbin.SyncedCachedEnforcer, error) { return pkgcasbin.InitCasbin(db, "") }