Модуль репутации
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user