new file: main_dc/yalarba/api_es/internal/database/feel_data.go

modified:   main_dc/yalarba/api_es/internal/database/psql_db.go
add to migrate Object and fill init data
This commit is contained in:
2025-11-15 05:38:28 +05:00
parent 39c871476b
commit c63480be25
2 changed files with 63 additions and 19 deletions
@@ -0,0 +1,29 @@
package database
import (
"api_es/internal/models"
"api_es/pkg/logger"
"gorm.io/gorm"
)
func SeedInitialData(db *gorm.DB) error {
zapLogger := logger.Get()
zapLogger.Debug("start fill init data")
// Создание базовых удобств
amenities := []models.Amenity{
{Name: "Wi-Fi", Category: "basic", Icon: "wifi"},
{Name: "Парковка", Category: "basic", Icon: "parking"},
{Name: "Бассейн", Category: "comfort", Icon: "pool"},
// ... другие удобства
}
for _, amenity := range amenities {
if err := db.FirstOrCreate(&amenity, models.Amenity{Name: amenity.Name}).Error; err != nil {
return err
}
}
zapLogger.Debug("end fill init data")
return nil
}
@@ -15,32 +15,47 @@ import (
func NewPostgresConnection(cfg *config.Config) (*gorm.DB, error) { func NewPostgresConnection(cfg *config.Config) (*gorm.DB, error) {
zapLogger := logger.Get() zapLogger := logger.Get()
zapLogger.Info("Start connect to Postgres DB") zapLogger.Info("Start connect to Postgres DB")
dsn := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=disable TimeZone=UTC", dsn := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=disable TimeZone=UTC",
cfg.DBHost, cfg.DBUser, cfg.DBPassword, cfg.DBName, cfg.DBPort) cfg.DBHost, cfg.DBUser, cfg.DBPassword, cfg.DBName, cfg.DBPort)
zapLogger.Info("dsn = %s", zap.String("dsn", dsn)) zapLogger.Info("dsn = %s", zap.String("dsn", dsn))
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) if err != nil {
if err != nil { return nil, fmt.Errorf("failed to connect to database: %w", err)
return nil, fmt.Errorf("failed to connect to database: %w", err) }
}
zapLogger.Info("AutoMigrate models") zapLogger.Info("AutoMigrate models")
// Автомиграция // Автомиграция
if err := autoMigrate(db); err != nil { if err := autoMigrate(db); err != nil {
return nil, fmt.Errorf("can't migrate models, error = %s", err) zapLogger.Error("can't migrate models, error = %s", zap.Error(err))
} return nil, fmt.Errorf("can't migrate models, error = %s", err)
}
zapLogger.Info("Migrate complite successfully") zapLogger.Info("Migrate complite successfully")
log.Println("Successfully connected to database") zapLogger.Info("Fill init data")
return db, nil SeedInitialData(db)
log.Println("Successfully connected to database")
return db, nil
} }
func autoMigrate(db *gorm.DB) error { func autoMigrate(db *gorm.DB) error {
// автоматические миграции GORM zapLogger := logger.Get()
return db.AutoMigrate( zapLogger.Debug("Start migration")
&models.User{}, models := []interface{}{
// другие модели... &models.User{},
) &models.Object{},
} &models.ObjectImage{},
&models.Amenity{},
&models.ObjectAmenity{},
}
for _, model := range models {
if err := db.AutoMigrate(model); err != nil {
return fmt.Errorf("failed to migrate %T: %w", model, err)
}
}
zapLogger.Debug("End migration seccessfully")
return nil
}