using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Kavita.Common.Helpers; using Kavita.Models.DTOs; using Kavita.Models.DTOs.Metadata; using Kavita.Models.DTOs.Person; using Kavita.Models.DTOs.ReadingLists; using Kavita.Models.DTOs.Statistics; using Kavita.Models.DTOs.Stats; using Kavita.Models.DTOs.Stats.V3.ClientDevice; using Kavita.Models.Entities.Enums; namespace Kavita.API.Services; public interface IStatisticService { Task GetServerStatistics(CancellationToken ct = default); Task GetUserReadStatistics(int userId, IList libraryIds, CancellationToken ct = default); Task>> GetYearCount(CancellationToken ct = default); Task>> GetTopYears(CancellationToken ct = default); Task> GetPopularDecades(CancellationToken ct = default); Task>> GetPopularLibraries(CancellationToken ct = default); Task>> GetPopularSeries(CancellationToken ct = default); Task>> GetPopularReadingList(int take = 5, CancellationToken ct = default); Task>> GetPopularGenres(CancellationToken ct = default); Task>> GetPopularTags(CancellationToken ct = default); Task>> GetPopularPerson(PersonRole role, CancellationToken ct = default); Task>> GetPublicationCount(CancellationToken ct = default); Task>> GetMangaFormatCount(CancellationToken ct = default); Task GetFileBreakdown(CancellationToken ct = default); Task> GetTopUsers(int days, CancellationToken ct = default); Task> GetReadingHistory(int userId, CancellationToken ct = default); Task>> ReadCountByDay(int userId = 0, int days = 0, CancellationToken ct = default); Task>> ReadCounts(StatsFilterDto filter, int userId = 0, CancellationToken ct = default); Task>> GetDayBreakdown(int userId = 0, CancellationToken ct = default); Task>> GetPagesReadCountByYear(int userId = 0, CancellationToken ct = default); Task>> GetWordsReadCountByYear(int userId = 0, CancellationToken ct = default); Task UpdateServerStatistics(CancellationToken ct = default); Task> GetFilesByExtension(string fileExtension, CancellationToken ct = default); Task GetClientTypeBreakdown(DateTime fromDateUtc, CancellationToken ct = default); Task>> GetDeviceTypeCounts(DateTime fromDateUtc, CancellationToken ct = default); Task GetReadingActivityGraphData(StatsFilterDto filter, int userId, int year, int requestingUserId, CancellationToken ct = default); Task GetReadingPaceForUser(StatsFilterDto filter, int userId, int year, bool booksOnly, int requestingUserId, CancellationToken ct = default); Task> GetGenreBreakdownForUser(StatsFilterDto filter, int userId, int requestingUserId, CancellationToken ct = default); Task> GetTagBreakdownForUser(StatsFilterDto filter, int userId, int requestingUserId, CancellationToken ct = default); Task GetPageSpreadForUser(StatsFilterDto filter, int userId, int requestingUserId, CancellationToken ct = default); Task GetWordSpreadForUser(StatsFilterDto filter, int userId, int requestingUserId, CancellationToken ct = default); Task>> GetReadsPerMonth(StatsFilterDto filter, int userId, int requestingUserId, CancellationToken ct = default); Task> GetMostReadAuthors(StatsFilterDto filter, int userId, int requestingUserId, CancellationToken ct = default); Task GetTotalReads(int userId, int requestingUserId, CancellationToken ct = default); Task GetTimeReadingByHour(StatsFilterDto filter, int userId, int requestingUserId, CancellationToken ct = default); Task GetUserStatBar(StatsFilterDto filter, int userId, int requestingUserId, CancellationToken ct = default); Task> GetMostActiveUsers(StatsFilterDto filter, CancellationToken ct = default); Task>> GetFilesAddedOverTime(CancellationToken ct = default); Task> GetReadingHistoryItems(StatsFilterDto filter, UserParams userParams, int userId, int requestingUserId, CancellationToken ct = default); }