aboutsummaryrefslogtreecommitdiff
path: root/database
diff options
context:
space:
mode:
authorBobby <[email protected]>2025-07-07 11:58:04 +0530
committerBobby <[email protected]>2025-07-07 11:58:04 +0530
commit9e4d6b1e271032d14e55f16395343979276e8de5 (patch)
treeadb0915e2854113c401960e3c1f8cf97e5e7aca8 /database
parent48c6de533c459a1bb923f292e43914689b1357df (diff)
downloadimageboard-9e4d6b1e271032d14e55f16395343979276e8de5.tar.xz
imageboard-9e4d6b1e271032d14e55f16395343979276e8de5.zip
refactored config system with generic `Defaults` function, fixed database migration setup, and applied dry principles
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
}