package data import ( "nixcn-cms/data/drivers" "github.com/meilisearch/meilisearch-go" "github.com/redis/go-redis/v9" log "github.com/sirupsen/logrus" "github.com/spf13/viper" "gorm.io/gorm" ) var Database *gorm.DB var Redis redis.UniversalClient var MeiliSearch meilisearch.ServiceManager func Init() { // Init database dbType := viper.GetString("database.type") exDSN := drivers.ExternalDSN{ Host: viper.GetString("database.host"), Name: viper.GetString("database.name"), Username: viper.GetString("database.username"), Password: viper.GetString("database.password"), } if dbType != "postgres" { log.Fatal("[Database] Only support postgras db!") } // Conect to db db, err := drivers.Postgres(exDSN) if err != nil { log.Fatal("[Database] Error connecting to db!") } // Auto migrate err = db.AutoMigrate(&User{}, &Event{}) if err != nil { log.Error("[Database] Error migrating database: ", err) } Database = db // Init redis conection rdbAddress := viper.GetStringSlice("cache.hosts") rDSN := drivers.RedisDSN{ Hosts: rdbAddress, Master: viper.GetString("cache.master"), Username: viper.GetString("cache.username"), Password: viper.GetString("cache.password"), DB: viper.GetInt("cache.db"), } rdb, err := drivers.Redis(rDSN) if err != nil { log.Fatal("[Redis] Error connecting to Redis: ", err) } Redis = rdb // Init meilisearch mDSN := drivers.MeiliDSN{ Host: viper.GetString("search.host"), ApiKey: viper.GetString("search.api_key"), } mdb := drivers.MeiliSearch(mDSN) MeiliSearch = mdb }