Модуль репутации

This commit is contained in:
Халимов Рустам
2026-02-12 16:11:14 +03:00
parent d6c1f63842
commit 46f008aefa
38 changed files with 1959 additions and 4 deletions
@@ -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);
}
}