new file: serv_nginx/api_bb/internal/repository/achievement_repository.go
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
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
// 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)
|
||||
}
|
||||
Reference in New Issue
Block a user