// services/user_stats_service.go package service import ( "time" "api_bb/internal/models" "api_bb/internal/repository" ) type UserStatsService struct { userStatsRepo repository.UserStatsRepository } func NewUserStatsService(userStatsRepo repository.UserStatsRepository) *UserStatsService { return &UserStatsService{ userStatsRepo: userStatsRepo, } } func (s *UserStatsService) AddWorkout(userID uint, distance float64, duration int, workoutTime time.Time) error { // Обновляем общую статистику if err := s.userStatsRepo.IncrementWorkouts(userID, distance, duration); err != nil { return err } // Обновляем серии if err := s.userStatsRepo.UpdateStreaks(userID, workoutTime); err != nil { return err } // Обновляем недельный и месячный пробег if err := s.userStatsRepo.UpdateWeeklyDistance(userID, distance); err != nil { return err } return s.userStatsRepo.UpdateMonthlyDistance(userID, distance) } func (s *UserStatsService) GetUserStats(userID uint) (*models.UserStatsResponse, error) { return s.userStatsRepo.GetUserStatsResponse(userID) } func (s *UserStatsService) UpdatePersonalBest(userID uint, distanceType string, time string) error { return s.userStatsRepo.UpdatePersonalBest(userID, distanceType, time) }