#478 GetApprovedEditsGroupedByDateAndUserAsync

This commit is contained in:
Hamid Reza Mohammadi 2025-03-26 19:25:45 +03:30
parent 28fd9343e8
commit 01f3569c20
4 changed files with 123 additions and 2 deletions

View File

@ -0,0 +1,30 @@
using System;
namespace RMuseum.Models.Generic.ViewModels
{
/// <summary>
/// grouped by date / user
/// </summary>
public class GroupedByDateUserViewModel
{
/// <summary>
/// date (day date or month or ...)
/// </summary>
public string Date { get; set; }
/// <summary>
/// number of clicks
/// </summary>
public int Number { get; set; }
/// <summary>
/// user id
/// </summary>
public Guid UserId { get; set; }
/// <summary>
/// user name
/// </summary>
public string UserName { get; set; }
}
}

View File

@ -13362,6 +13362,31 @@
rejected
</summary>
</member>
<member name="T:RMuseum.Models.Generic.ViewModels.GroupedByDateUserViewModel">
<summary>
grouped by date / user
</summary>
</member>
<member name="P:RMuseum.Models.Generic.ViewModels.GroupedByDateUserViewModel.Date">
<summary>
date (day date or month or ...)
</summary>
</member>
<member name="P:RMuseum.Models.Generic.ViewModels.GroupedByDateUserViewModel.Number">
<summary>
number of clicks
</summary>
</member>
<member name="P:RMuseum.Models.Generic.ViewModels.GroupedByDateUserViewModel.UserId">
<summary>
user id
</summary>
</member>
<member name="P:RMuseum.Models.Generic.ViewModels.GroupedByDateUserViewModel.UserName">
<summary>
user name
</summary>
</member>
<member name="P:RMuseum.Models.Generic.ViewModels.GroupedByDateViewModel.Date">
<summary>
date (day date or month or ...)
@ -15804,12 +15829,19 @@
</member>
<member name="M:RMuseum.Services.IContributionStatsService.GetApprovedEditsGroupedByDateAsync(RSecurityBackend.Models.Generic.PagingParameterModel,System.Nullable{System.Guid})">
<summary>
get approved edits daily
approved edits daily
</summary>
<param name="paging"></param>
<param name="userId"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IContributionStatsService.GetApprovedEditsGroupedByDateAndUserAsync(RSecurityBackend.Models.Generic.PagingParameterModel)">
<summary>
approved edits grouped by user / daily
</summary>
<param name="paging"></param>
<returns></returns>
</member>
<member name="T:RMuseum.Services.IDonationService">
<summary>
donation service
@ -18724,6 +18756,13 @@
<param name="userId"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.ContributionStatsService.GetApprovedEditsGroupedByDateAndUserAsync(RSecurityBackend.Models.Generic.PagingParameterModel)">
<summary>
get approved edits grouped by user / daily
</summary>
<param name="paging"></param>
<returns></returns>
</member>
<member name="F:RMuseum.Services.Implementation.ContributionStatsService._context">
<summary>
Database Context

View File

@ -11,11 +11,19 @@ namespace RMuseum.Services
public interface IContributionStatsService
{
/// <summary>
/// get approved edits daily
/// approved edits daily
/// </summary>
/// <param name="paging"></param>
/// <param name="userId"></param>
/// <returns></returns>
Task<RServiceResult<(PaginationMetadata PagingMeta, GroupedByDateViewModel[] Tracks)>> GetApprovedEditsGroupedByDateAsync(PagingParameterModel paging, Guid? userId);
/// <summary>
/// approved edits grouped by user / daily
/// </summary>
/// <param name="paging"></param>
/// <returns></returns>
Task<RServiceResult<(PaginationMetadata PagingMeta, GroupedByDateUserViewModel[] Tracks)>> GetApprovedEditsGroupedByDateAndUserAsync(PagingParameterModel paging);
}
}

View File

@ -45,6 +45,50 @@ namespace RMuseum.Services.Implementation
}
}
/// <summary>
/// get approved edits grouped by user / daily
/// </summary>
/// <param name="paging"></param>
/// <returns></returns>
public async Task<RServiceResult<(PaginationMetadata PagingMeta, GroupedByDateUserViewModel[] Tracks)>> GetApprovedEditsGroupedByDateAndUserAsync(PagingParameterModel paging)
{
try
{
return new RServiceResult<(PaginationMetadata PagingMeta, GroupedByDateUserViewModel[] Tracks)>(
await QueryablePaginator<GroupedByDateUserViewModel>.Paginate(
_context.GanjoorPoemCorrections
.Join
(
_context.Users,
correction => correction.UserId,
user => user.Id,
(correction, user) => new
{
correction.Id,
UserId = user.Id,
UserName = user.NickName,
DateTime = correction.Date,
correction.AffectedThePoem,
}
)
.Where(f => f.AffectedThePoem)
.GroupBy(a => new { a.DateTime.Date, a.UserId, a.UserName })
.Select(a => new GroupedByDateUserViewModel()
{
Date = a.Key.Date.ToString(),
UserId = a.Key.UserId,
UserName = a.Key.UserName,
Number = a.Count(),
}).OrderByDescending(s => s.Date).ThenBy(s => s.Number)
, paging));
}
catch (Exception e)
{
return new RServiceResult<(PaginationMetadata PagingMeta, GroupedByDateUserViewModel[] Tracks)>((null, null), e.ToString());
}
}
/// <summary>
/// Database Context
/// </summary>