42ead16848
modified: serv_nginx/api_bb/internal/handlers/handlers.go new file: serv_nginx/api_bb/internal/handlers/user_achievement_handler.go modified: serv_nginx/api_bb/internal/routes/routes.go modified: serv_nginx/api_bb/internal/service/achievement_service.go modified: serv_nginx/api_bb/pkg/utils/validation.go modified: serv_nginx/bbvue/src/views/Home.vue add achievement's handler, routing, service, migrator gorm and update repository
90 lines
2.2 KiB
Go
90 lines
2.2 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{},
|
|
// Добавьте другие модели здесь
|
|
}
|
|
|
|
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 "Достижения пользователя"
|
|
default:
|
|
return "Unknown"
|
|
}
|
|
} |