From e0aa177f07a5eab335c8b845506aac002c36d0ce Mon Sep 17 00:00:00 2001 From: Mohammad Mahdi Date: Fri, 25 Jul 2025 11:50:08 +0330 Subject: [PATCH] Add mysql support --- internal/config/config.go | 31 +++++++++++++++++++++++++++++++ internal/database/database.go | 34 +++++++++++++++++++++++++++------- 2 files changed, 58 insertions(+), 7 deletions(-) diff --git a/internal/config/config.go b/internal/config/config.go index 64b9a62..03bf16b 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -15,6 +15,13 @@ type config struct { JwtSecret string JwtIssuer string JwtAudience string + + DBEngine string + DBHost string + DBPort string + DBUser string + DBPassword string + DBName string } var Config *config @@ -58,6 +65,23 @@ func Load() *config { audience = "CatsOfMastodonBotGo" } + + dbEngine := os.Getenv("CAOM_DB_ENGINE") + dbHost := os.Getenv("CAOM_DB_HOST") + dbPort := os.Getenv("CAOM_DB_PORT") + dbUser := os.Getenv("CAOM_DB_USER") + dbPassword := os.Getenv("CAOM_DB_PASSWORD") + dbName := os.Getenv("CAOM_DB_NAME") + + if dbEngine == "" || dbHost == "" || dbPort == "" || dbUser == "" || dbPassword == "" || dbName == "" { + slog.Info("No database connection provided, using sqlite") + dbEngine = "sqlite" + dbHost = "" + dbPort = "" + dbUser = "" + dbPassword = "" + dbName = "caom.db" + } // Inititlize AppContext var appContext = &config{ AdminPassword: adminPassword, @@ -67,6 +91,13 @@ func Load() *config { JwtSecret: secret, JwtIssuer: issuer, JwtAudience: audience, + + DBEngine: dbEngine, + DBHost: dbHost, + DBPort: dbPort, + DBUser: dbUser, + DBPassword: dbPassword, + DBName: dbName, } return appContext diff --git a/internal/database/database.go b/internal/database/database.go index c67abce..95b344b 100644 --- a/internal/database/database.go +++ b/internal/database/database.go @@ -1,9 +1,12 @@ package database import ( + "CatsOfMastodonBotGo/internal/config" "CatsOfMastodonBotGo/internal/domain" + "fmt" "os" + "gorm.io/driver/mysql" "gorm.io/driver/sqlite" "gorm.io/gorm" ) @@ -11,17 +14,34 @@ import ( var Gorm *gorm.DB func Connect() (*gorm.DB, error) { - _, err := os.ReadDir("data") - if err != nil { - err := os.Mkdir("data", 0755) + var db *gorm.DB + var err error = nil + + if config.Config.DBEngine == "sqlite" { + _, err = os.ReadDir("data") + if err != nil { + err = os.Mkdir("data", 0755) + if err != nil { + return nil, err + } + } + db, err = gorm.Open(sqlite.Open("data/caom.db"), &gorm.Config{}) + if err != nil { + return nil, err + } + } else { + dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", + config.Config.DBUser, + config.Config.DBPassword, + config.Config.DBHost, + config.Config.DBPort, + config.Config.DBName) + db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{}) if err != nil { return nil, err } } - db, err := gorm.Open(sqlite.Open("data/caom.db"), &gorm.Config{}) - if err != nil { - return nil, err - } + // Migrate the schema if err := db.AutoMigrate(&domain.Post{}, &domain.MediaAttachment{}, &domain.Account{}); err != nil { return nil, err