| package model
|
|
|
| import (
|
| "fmt"
|
| "log"
|
| "os"
|
| "time"
|
|
|
| "gorm.io/driver/postgres"
|
| "gorm.io/gorm"
|
| "gorm.io/gorm/logger"
|
| )
|
|
|
| var DB *gorm.DB
|
|
|
|
|
| func InitDB() error {
|
| databaseURL := os.Getenv("DATABASE_URL")
|
| if databaseURL == "" {
|
| return fmt.Errorf("DATABASE_URL environment variable is not set")
|
| }
|
|
|
| var err error
|
| DB, err = gorm.Open(postgres.Open(databaseURL), &gorm.Config{
|
| Logger: logger.Default.LogMode(logger.Info),
|
| NowFunc: func() time.Time {
|
| return time.Now().UTC()
|
| },
|
| })
|
| if err != nil {
|
| return fmt.Errorf("failed to connect to database: %w", err)
|
| }
|
|
|
|
|
| sqlDB, err := DB.DB()
|
| if err != nil {
|
| return fmt.Errorf("failed to get database instance: %w", err)
|
| }
|
|
|
| sqlDB.SetMaxIdleConns(10)
|
| sqlDB.SetMaxOpenConns(100)
|
| sqlDB.SetConnMaxLifetime(time.Hour)
|
|
|
|
|
| if err := autoMigrate(); err != nil {
|
| return fmt.Errorf("failed to migrate database: %w", err)
|
| }
|
|
|
| log.Println("Database connected and migrated successfully")
|
| return nil
|
| }
|
|
|
|
|
| func autoMigrate() error {
|
| return DB.AutoMigrate(
|
| &User{},
|
| &MorphCookie{},
|
| &UserSession{},
|
| )
|
| }
|
|
|
|
|
| func CloseDB() error {
|
| sqlDB, err := DB.DB()
|
| if err != nil {
|
| return err
|
| }
|
| return sqlDB.Close()
|
| } |