910e6f5e49
modified: serv_nginx/api_bb/internal/repository/personal_best_repository.go new file: serv_nginx/api_bb/internal/service/achievement_service.go new file: serv_nginx/api_bb/internal/service/personal_best_service.go new file: serv_nginx/api_bb/internal/service/user_stats_service.go add some services
45 lines
1.3 KiB
Go
45 lines
1.3 KiB
Go
// 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)
|
|
} |