diff options
Diffstat (limited to 'database')
| -rw-r--r-- | database/database.go | 39 |
1 files changed, 34 insertions, 5 deletions
diff --git a/database/database.go b/database/database.go index d063cfc..d284c0f 100644 --- a/database/database.go +++ b/database/database.go @@ -3,6 +3,7 @@ package database import ( "fmt" "imageboard/config" + "imageboard/models" "log" "gorm.io/driver/postgres" @@ -16,27 +17,39 @@ var ( ) func init() { - dsn := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%d sslmode=%s", + dsn := fmt.Sprintf("host=%s port=%d user=%s dbname=%s sslmode=%s", config.Database.Host, + config.Database.Port, config.Database.Username, - config.Database.Password, config.Database.DatabaseName, - config.Database.Port, config.Database.SSLMode, ) + if config.Database.Password != "" { + dsn += fmt.Sprintf(" password=%s", config.Database.Password) + } + logLevel := logger.Silent if config.Server.IsDevMode { logLevel = logger.Info } - DB, err = gorm.Open(postgres.Open(dsn), &gorm.Config{ + dialector := postgres.Open(dsn) + + DB, err = gorm.Open(dialector, &gorm.Config{ Logger: logger.Default.LogMode(logLevel), }) if err != nil { log.Fatalf("failed to connect to database: %v", err) } + if config.Server.IsDevMode && config.Database.WipeAndResetDatabase { + if err := wipeAndResetDatabase(); err != nil { + log.Fatalf("failed to wipe and reset database: %v", err) + } + log.Println("Database wiped and reset successfully") + } + if err := autoMigrate(); err != nil { log.Fatalf("failed to auto migrate database: %v", err) } @@ -45,5 +58,21 @@ func init() { } func autoMigrate() error { - return DB.AutoMigrate() + return DB.AutoMigrate( + &models.User{}, + &models.Image{}, + &models.ImageSize{}, + &models.Tag{}, + &models.Comment{}, + ) +} + +func wipeAndResetDatabase() error { + if err := DB.Exec("DROP SCHEMA public CASCADE").Error; err != nil { + return err + } + if err := DB.Exec("CREATE SCHEMA public").Error; err != nil { + return err + } + return nil } |
