diff --git a/RMuseum/Services/IContributionStatsService.cs b/RMuseum/Services/IContributionStatsService.cs index 58f97f5b..bc1eae28 100644 --- a/RMuseum/Services/IContributionStatsService.cs +++ b/RMuseum/Services/IContributionStatsService.cs @@ -172,6 +172,28 @@ namespace RMuseum.Services /// Task> GetApprovedRecitationsSummedUpStatsAsync(); + /// + /// approved museum links daily + /// + /// + /// + /// + Task> GetApprovedMuseumLinksGroupedByDateAsync(PagingParameterModel paging, Guid? userId); + + /// + /// approved museum links grouped by user + /// + /// + /// + /// + /// + Task> GetApprovedMuseumLinksGroupedByUserAsync(PagingParameterModel paging, DateTime? day, Guid? userId); + + /// + /// summed up stats of approved museum links + /// + /// + Task> GetApprovedMuseumLinksSummedUpStatsAsync(); } } diff --git a/RMuseum/Services/Implementation/ContributionStatsService.cs b/RMuseum/Services/Implementation/ContributionStatsService.cs index 301fc15d..b6ca2f06 100644 --- a/RMuseum/Services/Implementation/ContributionStatsService.cs +++ b/RMuseum/Services/Implementation/ContributionStatsService.cs @@ -807,6 +807,118 @@ namespace RMuseum.Services.Implementation } } + /// + /// approved museum links daily + /// + /// + /// + /// + public async Task> GetApprovedMuseumLinksGroupedByDateAsync(PagingParameterModel paging, Guid? userId) + { + try + { + return new RServiceResult<(PaginationMetadata PagingMeta, GroupedByDateViewModel[] Tracks)>( + await QueryablePaginator.Paginate( + _context.GanjoorLinks + .Where(c => + c.ReviewResult == Models.GanjoorIntegration.ReviewResult.Approved + && + (userId == null || c.SuggestedById == userId) + ) + .GroupBy(a => a.SuggestionDate.Date) + .Select(a => new GroupedByDateViewModel() + { + Date = a.Key.Date.ToString(), + Number = a.Count(), + }).OrderByDescending(s => s.Date) + , paging)); + } + catch (Exception e) + { + return new RServiceResult<(PaginationMetadata PagingMeta, GroupedByDateViewModel[] Tracks)>((null, null), e.ToString()); + } + } + + /// + /// approved museum links grouped by user + /// + /// + /// + /// + /// + public async Task> GetApprovedMuseumLinksGroupedByUserAsync(PagingParameterModel paging, DateTime? day, Guid? userId) + { + try + { + return new RServiceResult<(PaginationMetadata PagingMeta, GroupedByUserViewModel[] Tracks)>( + await QueryablePaginator.Paginate( + _context.GanjoorLinks + .Join + ( + _context.Users, + correction => correction.SuggestedById, + user => user.Id, + (correction, user) => new + { + correction.SuggestionDate, + UserId = user.Id, + UserName = user.NickName, + correction.ReviewResult, + } + ) + .Where(f => + f.ReviewResult == Models.GanjoorIntegration.ReviewResult.Approved + && + (day == null || f.SuggestionDate.Date == day) && (userId == null || f.UserId == userId)) + .GroupBy(a => new { a.UserId, a.UserName }).Select(a => new GroupedByUserViewModel() + { + UserId = a.Key.UserId, + UserName = a.Key.UserName, + Number = a.Count(), + }).OrderByDescending(s => s.Number) + , paging)); + + } + catch (Exception e) + { + return new RServiceResult<(PaginationMetadata PagingMeta, GroupedByUserViewModel[] Tracks)>((null, null), e.ToString()); + } + } + + /// + /// summed up stats of approved museum links + /// + /// + public async Task> GetApprovedMuseumLinksSummedUpStatsAsync() + { + try + { + return new RServiceResult + ( + new SummedUpViewModel() + { + Days = await _context.GanjoorLinks + .Where(f => f.ReviewResult == Models.GanjoorIntegration.ReviewResult.Approved + ) + .GroupBy(f => f.SuggestionDate.Date).CountAsync(), + TotalCount = await _context.GanjoorLinks + + .Where(f => f.ReviewResult == Models.GanjoorIntegration.ReviewResult.Approved + ) + .CountAsync(), + UserIds = await _context.GanjoorLinks + .Where(f => f.ReviewResult == Models.GanjoorIntegration.ReviewResult.Approved + ) + .GroupBy(f => f.SuggestedById).CountAsync(), + } + ); + + } + catch (Exception e) + { + return new RServiceResult(null, e.ToString()); + } + } ///