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:
@@ -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
|
||||||
|
}
|
||||||
@@ -19,7 +19,6 @@ func NewPostgresConnection(cfg *config.Config) (*gorm.DB, error) {
|
|||||||
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)
|
||||||
@@ -28,19 +27,35 @@ func NewPostgresConnection(cfg *config.Config) (*gorm.DB, error) {
|
|||||||
zapLogger.Info("AutoMigrate models")
|
zapLogger.Info("AutoMigrate models")
|
||||||
// Автомиграция
|
// Автомиграция
|
||||||
if err := autoMigrate(db); err != nil {
|
if err := autoMigrate(db); err != nil {
|
||||||
|
zapLogger.Error("can't migrate models, error = %s", zap.Error(err))
|
||||||
return nil, fmt.Errorf("can't migrate models, error = %s", err)
|
return nil, fmt.Errorf("can't migrate models, error = %s", err)
|
||||||
}
|
}
|
||||||
zapLogger.Info("Migrate complite successfully")
|
zapLogger.Info("Migrate complite successfully")
|
||||||
|
|
||||||
|
zapLogger.Info("Fill init data")
|
||||||
|
SeedInitialData(db)
|
||||||
|
|
||||||
log.Println("Successfully connected to database")
|
log.Println("Successfully connected to database")
|
||||||
return db, nil
|
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 := []interface{}{
|
||||||
&models.User{},
|
&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
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user