diff --git a/main_dc/yalarba/api_es/internal/database/feel_data.go b/main_dc/yalarba/api_es/internal/database/feel_data.go new file mode 100644 index 0000000..021e50d --- /dev/null +++ b/main_dc/yalarba/api_es/internal/database/feel_data.go @@ -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 +} diff --git a/main_dc/yalarba/api_es/internal/database/psql_db.go b/main_dc/yalarba/api_es/internal/database/psql_db.go index 884f49c..21cda93 100644 --- a/main_dc/yalarba/api_es/internal/database/psql_db.go +++ b/main_dc/yalarba/api_es/internal/database/psql_db.go @@ -15,32 +15,47 @@ import ( func NewPostgresConnection(cfg *config.Config) (*gorm.DB, error) { zapLogger := logger.Get() zapLogger.Info("Start connect to Postgres DB") - 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) + 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) zapLogger.Info("dsn = %s", zap.String("dsn", dsn)) - - db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) - if err != nil { - return nil, fmt.Errorf("failed to connect to database: %w", err) - } + db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) + if err != nil { + return nil, fmt.Errorf("failed to connect to database: %w", err) + } zapLogger.Info("AutoMigrate models") - // Автомиграция - if err := autoMigrate(db); err != nil { - return nil, fmt.Errorf("can't migrate models, error = %s", err) - } + // Автомиграция + 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) + } zapLogger.Info("Migrate complite successfully") - log.Println("Successfully connected to database") - return db, nil + zapLogger.Info("Fill init data") + SeedInitialData(db) + + log.Println("Successfully connected to database") + return db, nil } func autoMigrate(db *gorm.DB) error { - // автоматические миграции GORM - return db.AutoMigrate( - &models.User{}, - // другие модели... - ) -} + zapLogger := logger.Get() + zapLogger.Debug("Start migration") + 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 +}