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);
}
}