using System; using System.Linq; using System.Threading; using System.Threading.Tasks; using Nashel.Modules.Reputation.Domain.Repositories; namespace Nashel.Modules.Reputation.Domain.Services; /// /// Сервис для расчета рейтинга пользователей. /// public class RatingCalculator { private readonly IReviewRepository _reviewRepository; public RatingCalculator(IReviewRepository reviewRepository) { _reviewRepository = reviewRepository; } /// /// Вычисляет средний рейтинг пользователя на основе всех его отзывов. /// /// Средний рейтинг (double) или 0, если отзывов нет. public async Task CalculateAverage(Guid targetId, CancellationToken cancellationToken = default) { var reviews = await _reviewRepository.GetByTargetIdAsync(targetId, cancellationToken); if (reviews == null || !reviews.Any()) { return 0.0; } // Простое среднее арифметическое double avg = reviews.Average(r => r.Rating); // Округлим до 1 знака (опционально) return Math.Round(avg, 1); } }