Files
sundynix-pets/pets-be/internal/database/database.go
T

44 lines
1.1 KiB
Go

package database
import (
"fmt"
"time"
"gorm.io/driver/postgres"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"gorm.io/gorm/schema"
"github.com/sundynix/pets-be/internal/config"
"github.com/sundynix/pets-be/internal/model"
)
func Open(cfg config.PostgresConfig, release bool) (*gorm.DB, error) {
logLevel := logger.Info
if release {
logLevel = logger.Warn
}
db, err := gorm.Open(postgres.Open(cfg.DSN()), &gorm.Config{
NamingStrategy: schema.NamingStrategy{TablePrefix: "sundynix_", SingularTable: true},
Logger: logger.Default.LogMode(logLevel),
})
if err != nil {
return nil, fmt.Errorf("open postgres: %w", err)
}
sqlDB, err := db.DB()
if err != nil {
return nil, err
}
sqlDB.SetMaxOpenConns(25)
sqlDB.SetMaxIdleConns(10)
sqlDB.SetConnMaxLifetime(time.Hour)
return db, nil
}
func Migrate(db *gorm.DB) error {
if err := db.AutoMigrate(model.All()...); err != nil {
return err
}
return db.Exec("CREATE UNIQUE INDEX IF NOT EXISTS idx_sundynix_walk_one_active_per_user ON sundynix_walk (user_id) WHERE status IN ('active', 'paused')").Error
}