aboutsummaryrefslogtreecommitdiff
path: root/database
diff options
context:
space:
mode:
Diffstat (limited to 'database')
-rw-r--r--database/database.go39
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
}