71 lines
1.3 KiB
Go
71 lines
1.3 KiB
Go
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,
|
|
}
|
|
}
|