| | 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()
|
| | } |