test-repo/internal/app/db/db.go
2026-01-31 16:50:50 +03:00

42 lines
840 B
Go

package db
import (
"fmt"
"log"
"os"
"time"
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
func ConnectAndMigrate(models ...interface{}) (*gorm.DB, error) {
dsn := fmt.Sprintf(
"host=%s user=%s password=%s dbname=%s port=%s sslmode=disable",
os.Getenv("DB_HOST"),
os.Getenv("DB_USER"),
os.Getenv("DB_PASSWORD"),
os.Getenv("DB_NAME"),
os.Getenv("DB_PORT"),
)
var database *gorm.DB
var err error
for i := 0; i < 10; i++ {
database, err = gorm.Open(postgres.Open(dsn), &gorm.Config{})
if err == nil {
break
}
log.Println("Failed to connect to database, retrying...")
time.Sleep(2 * time.Second)
}
if err != nil {
return nil, fmt.Errorf("connect database: %w", err)
}
if err := database.AutoMigrate(models...); err != nil {
return nil, fmt.Errorf("auto migrate: %w", err)
}
return database, nil
}