go-dart/database.go
2025-04-22 06:59:36 +00:00

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,
}
}