using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using API.Constants; using API.Data; using API.DTOs; using API.Extensions; using API.Services.Plus; using EasyCaching.Core; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; namespace API.Controllers; #nullable enable /// /// Responsible for providing external ratings for Series /// public class RatingController : BaseApiController { private readonly ILicenseService _licenseService; private readonly IRatingService _ratingService; private readonly ILogger _logger; private readonly IUnitOfWork _unitOfWork; private readonly IEasyCachingProvider _cacheProvider; public const string CacheKey = "rating_"; public RatingController(ILicenseService licenseService, IRatingService ratingService, ILogger logger, IEasyCachingProviderFactory cachingProviderFactory, IUnitOfWork unitOfWork) { _licenseService = licenseService; _ratingService = ratingService; _logger = logger; _unitOfWork = unitOfWork; _cacheProvider = cachingProviderFactory.GetCachingProvider(EasyCacheProfiles.KavitaPlusRatings); } /// /// Get the external ratings for a given series /// /// /// [HttpGet] [ResponseCache(CacheProfileName = ResponseCacheProfiles.KavitaPlus, VaryByQueryKeys = ["seriesId"])] public async Task>> GetRating(int seriesId) { if (!await _licenseService.HasActiveLicense()) { return Ok(Enumerable.Empty()); } return Ok(await _ratingService.GetRatings(seriesId)); } [HttpGet("overall")] public async Task> GetOverallRating(int seriesId) { return Ok(new RatingDto() { Provider = ScrobbleProvider.Kavita, AverageScore = await _unitOfWork.SeriesRepository.GetAverageUserRating(seriesId, User.GetUserId()), FavoriteCount = 0 }); } }