Files
nashel-backend/src/Modules/Reputation/Domain/Services/RatingCalculator.cs
T

41 lines
1.3 KiB
C#

using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Nashel.Modules.Reputation.Domain.Repositories;
namespace Nashel.Modules.Reputation.Domain.Services;
/// <summary>
/// Сервис для расчета рейтинга пользователей.
/// </summary>
public class RatingCalculator
{
private readonly IReviewRepository _reviewRepository;
public RatingCalculator(IReviewRepository reviewRepository)
{
_reviewRepository = reviewRepository;
}
/// <summary>
/// Вычисляет средний рейтинг пользователя на основе всех его отзывов.
/// </summary>
/// <returns>Средний рейтинг (double) или 0, если отзывов нет.</returns>
public async Task<double> 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);
}
}