modified: serv_nginx/api_bb/internal/repository/user_stats_repository.go
new file: serv_nginx/api_bb/internal/scripts/migrate_existing_users.go modified: serv_nginx/api_bb/internal/service/auth_service.go modified: serv_nginx/api_bb/internal/service/user_stats_service.go modified: serv_nginx/bbvue/src/views/Achievements.vue modified: serv_nginx/bbvue/src/views/Reviews.vue modified: serv_nginx/bbvue/src/views/Training.vue fix bag with no stats into table
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