Add mysql support
This commit is contained in:
		@@ -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
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user