create 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 yalarbacreate and moove into new directories for BegushiyBashkir and yalarba
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
// 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
|
||||
}
|
||||
Reference in New Issue
Block a user