15357fd3c0
yalarbacreate and moove into new directories for BegushiyBashkir and yalarbacreate and moove into new directories for BegushiyBashkir and yalarbacreate and moove into new directories for BegushiyBashkir and yalarbacreate and moove into new directories for BegushiyBashkir and yalarbacreate and moove into new directories for BegushiyBashkir and yalarbacreate and moove into new directories for BegushiyBashkir and yalarbacreate and moove into new directories for BegushiyBashkir and yalarbacreate and moove into new directories for BegushiyBashkir and yalarba
106 lines
2.7 KiB
Go
106 lines
2.7 KiB
Go
package database
|
|
|
|
import (
|
|
"go.uber.org/zap"
|
|
|
|
"api_bb/internal/models"
|
|
"api_bb/pkg/logger"
|
|
)
|
|
|
|
// Migrate выполняет автоматические миграции для всех моделей
|
|
func (d *Database) Migrate() error {
|
|
zapLogger := logger.Get()
|
|
|
|
zapLogger.Info("starting database migration")
|
|
|
|
// Список всех моделей для миграции
|
|
models := []interface{}{
|
|
&models.User{},
|
|
&models.News{},
|
|
&models.Comment{},
|
|
&models.Review{},
|
|
&models.UserStats{},
|
|
&models.Workout{},
|
|
&models.Achievement{},
|
|
&models.Event{},
|
|
&models.EventRegistration{},
|
|
&models.PersonalBest{},
|
|
&models.TrainingPlan{},
|
|
&models.EmailVerification{},
|
|
// Добавьте другие модели здесь
|
|
}
|
|
|
|
for _, model := range models {
|
|
modelName := getModelName(model)
|
|
zapLogger.Debug("migrating model", zap.String("model", modelName))
|
|
|
|
if err := d.DB.AutoMigrate(model); err != nil {
|
|
zapLogger.Error("failed to migrate model",
|
|
zap.String("model", modelName),
|
|
zap.Error(err),
|
|
)
|
|
return err
|
|
}
|
|
}
|
|
|
|
zapLogger.Info("database migration completed successfully")
|
|
return nil
|
|
}
|
|
|
|
// MigrateModels выполняет миграции для конкретных моделей
|
|
func (d *Database) MigrateModels(models ...interface{}) error {
|
|
zapLogger := logger.Get()
|
|
|
|
zapLogger.Info("starting migration for specific models",
|
|
zap.Int("model_count", len(models)),
|
|
)
|
|
|
|
for _, model := range models {
|
|
modelName := getModelName(model)
|
|
zapLogger.Debug("migrating model", zap.String("model", modelName))
|
|
|
|
if err := d.DB.AutoMigrate(model); err != nil {
|
|
zapLogger.Error("failed to migrate model",
|
|
zap.String("model", modelName),
|
|
zap.Error(err),
|
|
)
|
|
return err
|
|
}
|
|
}
|
|
|
|
zapLogger.Info("models migration completed successfully")
|
|
return nil
|
|
}
|
|
|
|
// getModelName возвращает имя модели для логирования
|
|
func getModelName(model interface{}) string {
|
|
switch model.(type) {
|
|
case *models.User:
|
|
return "User"
|
|
case *models.News:
|
|
return "News"
|
|
case *models.Comment:
|
|
return "Comment"
|
|
case *models.Review:
|
|
return "Reviews"
|
|
case *models.UserStats:
|
|
return "Статистика Пользователя"
|
|
case *models.Workout:
|
|
return "Тренировки пользователя"
|
|
case *models.Achievement:
|
|
return "Достижения пользователя"
|
|
case *models.Event:
|
|
return "Событие"
|
|
case *models.EventRegistration:
|
|
return "Администрирование события"
|
|
case *models.PersonalBest:
|
|
return "Персональные достижения"
|
|
case *models.TrainingPlan:
|
|
return "Тренировочный план"
|
|
case *models.EmailVerification:
|
|
return "Верификация email"
|
|
default:
|
|
return "Unknown"
|
|
}
|
|
}
|