diff --git a/RMuseum/RMuseum.xml b/RMuseum/RMuseum.xml index 5c44baaf..71d5adc2 100644 --- a/RMuseum/RMuseum.xml +++ b/RMuseum/RMuseum.xml @@ -16150,6 +16150,20 @@ + + + approved poet spec lines grouped by user + + + + + + + + summed up stats of approved poet spec lines + + + donation service @@ -19263,6 +19277,20 @@ + + + approved poet spec lines grouped by user + + + + + + + + summed up stats of approved poet spec lines + + + Database Context diff --git a/RMuseum/Services/IContributionStatsService.cs b/RMuseum/Services/IContributionStatsService.cs index 293d41c6..741a7a3d 100644 --- a/RMuseum/Services/IContributionStatsService.cs +++ b/RMuseum/Services/IContributionStatsService.cs @@ -217,5 +217,19 @@ namespace RMuseum.Services /// /// Task> GetApprovedPinterestLinksSummedUpStatsAsync(); + + /// + /// approved poet spec lines grouped by user + /// + /// + /// + /// + Task> GetApprovedPoetSpecLinesGroupedByUserAsync(PagingParameterModel paging, Guid? userId); + + /// + /// summed up stats of approved poet spec lines + /// + /// + Task> GetApprovedPoetSpecLinesSummedUpStatsAsync(); } } diff --git a/RMuseum/Services/Implementation/ContributionStatsService.cs b/RMuseum/Services/Implementation/ContributionStatsService.cs index e228fd52..793672c8 100644 --- a/RMuseum/Services/Implementation/ContributionStatsService.cs +++ b/RMuseum/Services/Implementation/ContributionStatsService.cs @@ -1033,6 +1033,83 @@ namespace RMuseum.Services.Implementation } } + /// + /// approved poet spec lines grouped by user + /// + /// + /// + /// + public async Task> GetApprovedPoetSpecLinesGroupedByUserAsync(PagingParameterModel paging, Guid? userId) + { + try + { + return new RServiceResult<(PaginationMetadata PagingMeta, GroupedByUserViewModel[] Tracks)>( + await QueryablePaginator.Paginate( + _context.GanjoorPoetSuggestedSpecLines + .Join + ( + _context.Users, + correction => correction.SuggestedById, + user => user.Id, + (correction, user) => new + { + UserId = user.Id, + UserName = user.NickName, + correction.Published, + } + ) + .Where(f => + f.Published + && + (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 poet spec lines + /// + /// + public async Task> GetApprovedPoetSpecLinesSummedUpStatsAsync() + { + try + { + return new RServiceResult + ( + new SummedUpViewModel() + { + Days = 0, + TotalCount = await _context.GanjoorPoetSuggestedSpecLines + + .Where(f => f.Published + ) + .CountAsync(), + UserIds = await _context.GanjoorPoetSuggestedSpecLines + .Where(f => f.Published + ) + .GroupBy(f => f.SuggestedById).CountAsync(), + } + ); + + } + catch (Exception e) + { + return new RServiceResult(null, e.ToString()); + } + } + + ///