74 lines
1.9 KiB
Go
74 lines
1.9 KiB
Go
// scripts/migrate_existing_users.go
|
|
package main
|
|
|
|
import (
|
|
"api_bb/internal/models"
|
|
"api_bb/internal/repository"
|
|
"api_bb/pkg/logger"
|
|
|
|
"gorm.io/gorm"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
func MigrateExistingUsers(db *gorm.DB) error {
|
|
log := logger.NewWrapper(logger.Get().With(zap.String("script", "migrate_existing_users")))
|
|
|
|
userRepo := repository.NewUserRepository(db)
|
|
userStatsRepo := repository.NewUserStatsRepository(db)
|
|
|
|
// Получаем всех пользователей
|
|
users, err := userRepo.FindAll()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
log.Info("starting migration for existing users",
|
|
zap.Int("total_users", len(users)))
|
|
|
|
successCount := 0
|
|
for _, user := range users {
|
|
// Проверяем, есть ли уже статистика
|
|
_, err := userStatsRepo.GetByUserID(user.ID)
|
|
if err == gorm.ErrRecordNotFound {
|
|
// Создаем статистику
|
|
userStats := &models.UserStats{
|
|
UserID: user.ID,
|
|
TotalDistance: 0,
|
|
TotalTime: 0,
|
|
AvgPace: "0:00",
|
|
WorkoutsCount: 0,
|
|
CurrentStreak: 0,
|
|
LongestStreak: 0,
|
|
WeeklyDistance: 0,
|
|
MonthlyDistance: 0,
|
|
Best5K: "",
|
|
Best10K: "",
|
|
BestHalf: "",
|
|
BestMarathon: "",
|
|
LastWorkout: user.CreatedAt, // Используем дату создания как последнюю тренировку
|
|
}
|
|
|
|
if err := userStatsRepo.Create(userStats); err != nil {
|
|
log.Error("failed to create stats for user",
|
|
zap.Uint("user_id", user.ID),
|
|
zap.Error(err))
|
|
continue
|
|
}
|
|
|
|
successCount++
|
|
log.Info("created stats for user",
|
|
zap.Uint("user_id", user.ID),
|
|
zap.String("email", user.Email))
|
|
} else if err != nil {
|
|
log.Error("error checking stats for user",
|
|
zap.Uint("user_id", user.ID),
|
|
zap.Error(err))
|
|
}
|
|
}
|
|
|
|
log.Info("migration completed",
|
|
zap.Int("successful_creations", successCount),
|
|
zap.Int("total_users", len(users)))
|
|
|
|
return nil
|
|
} |