package data import ( "context" "nixcn-cms/data/drivers" "os" "log/slog" "github.com/redis/go-redis/v9" "github.com/spf13/viper" "gorm.io/gorm" ) var Database *gorm.DB var Redis redis.UniversalClient func Init(ctx context.Context) { // 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" { slog.ErrorContext(ctx, "[Database] Only support postgras db!") os.Exit(1) } // Conect to db db, err := drivers.Postgres(exDSN) if err != nil { slog.ErrorContext(ctx, "[Database] Error connecting to db!", "err", err) os.Exit(1) } // Auto migrate err = db.AutoMigrate(&User{}, &Event{}, &Attendance{}, &Client{}, &Kyc{}) if err != nil { slog.ErrorContext(ctx, "[Database] Error migrating database!", "err", err) os.Exit(1) } 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 { slog.ErrorContext(ctx, "[Redis] Error connecting to Redis!", "err", err) os.Exit(1) } Redis = rdb }