aboutsummaryrefslogtreecommitdiffstats
path: root/backend/internal/database/database.go
diff options
context:
space:
mode:
authorLibravatarLibravatar Biswa Kalyan Bhuyan <biswa@surgot.in> 2025-04-24 08:18:27 +0530
committerLibravatarLibravatar Biswa Kalyan Bhuyan <biswa@surgot.in> 2025-04-24 08:18:27 +0530
commit50d5e6534f5e593297a09323e683c7c8b850117b (patch)
tree339d6e8b123c5d4caa4129971e2cb1b960b12a89 /backend/internal/database/database.go
parent76066679b5bdab53419492066c4e80d2ed3be518 (diff)
downloadfinance-50d5e6534f5e593297a09323e683c7c8b850117b.tar.gz
finance-50d5e6534f5e593297a09323e683c7c8b850117b.tar.bz2
finance-50d5e6534f5e593297a09323e683c7c8b850117b.zip
feat: added basic backend features to it
- Set up API framework (Gin Gonic) - Set up ORM/DB library (GORM) - Design database schema (Users, Accounts, Transactions, Loans, Goals) - Set up database connection and migrations
Diffstat (limited to 'backend/internal/database/database.go')
-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
+}