aboutsummaryrefslogtreecommitdiffstats
path: root/backend/internal/database
diff options
context:
space:
mode:
Diffstat (limited to 'backend/internal/database')
-rw-r--r--backend/internal/database/database.go61
1 files changed, 61 insertions, 0 deletions
diff --git a/backend/internal/database/database.go b/backend/internal/database/database.go
new file mode 100644
index 0000000..15228e2
--- /dev/null
+++ b/backend/internal/database/database.go
@@ -0,0 +1,61 @@
+package database
+
+import (
+ "log"
+ "time"
+
+ "finance/backend/internal/config"
+ "finance/backend/internal/models"
+
+ "gorm.io/driver/postgres"
+ "gorm.io/gorm"
+ "gorm.io/gorm/logger"
+)
+
+var DB *gorm.DB
+
+// InitDatabase initializes the database connection and runs migrations.
+func InitDatabase(cfg *config.Config) error {
+ var err error
+ log.Println("Connecting to database...")
+
+ // Configure GORM logger
+ // You might want to adjust the log level based on environment (e.g., Silent in production)
+ newLogger := logger.New(
+ log.New(log.Writer(), "\r\n", log.LstdFlags), // io writer
+ logger.Config{
+ SlowThreshold: 200 * time.Millisecond, // Explicitly set slow query threshold
+ LogLevel: logger.Info, // Log all SQL
+ IgnoreRecordNotFoundError: true,
+ Colorful: false, // Disable color in logs, or true if terminal supports
+ },
+ )
+
+ DB, err = gorm.Open(postgres.Open(cfg.DatabaseDSN), &gorm.Config{
+ Logger: newLogger,
+ })
+
+ if err != nil {
+ log.Printf("Failed to connect to database: %v\n", err)
+ return err
+ }
+
+ log.Println("Database connection established.")
+
+ // Run Migrations
+ log.Println("Running database migrations...")
+ err = DB.AutoMigrate(
+ &models.User{},
+ &models.Account{},
+ &models.Transaction{},
+ &models.Loan{},
+ &models.Goal{},
+ )
+ if err != nil {
+ log.Printf("Failed to run migrations: %v\n", err)
+ return err
+ }
+
+ log.Println("Database migrations completed.")
+ return nil
+}