package dart import ( "fmt" "log" "gorm.io/driver/mysql" "gorm.io/driver/postgres" "gorm.io/driver/sqlite" "gorm.io/gorm" ) type Database struct { Conn *gorm.DB } type MySQLConfig struct { Username string Password string Host string Port string Database string } type PostgreSQLConfig struct { Username string Password string Host string Port string Database string } type SQLiteConfig struct { Filename string } func NewMySQLDatabase(cfg MySQLConfig) *Database { dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", cfg.Username, cfg.Password, cfg.Host, cfg.Port, cfg.Database) db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) if err != nil { log.Fatal(err) } return &Database{ Conn: db, } } func NewPostgreSQLDatabase(cfg PostgreSQLConfig) *Database { dsn := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=disabled TimeZone=Europe/Vienna", cfg.Host, cfg.Username, cfg.Password, cfg.Database, cfg.Port) db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) if err != nil { log.Fatal(err) } return &Database{ Conn: db, } } func NewSQLiteDatabase(cfg SQLiteConfig) *Database { db, err := gorm.Open(sqlite.Open(cfg.Filename), &gorm.Config{}) if err != nil { log.Fatal(err) } return &Database{ Conn: db, } }