#478 GetApprovedEditsGroupedByUserAsync

This commit is contained in:
Hamid Reza Mohammadi 2025-03-26 19:36:27 +03:30
parent 01f3569c20
commit 3d2560440e
4 changed files with 122 additions and 5 deletions

View File

@ -0,0 +1,25 @@
using System;
namespace RMuseum.Models.Generic.ViewModels
{
/// <summary>
/// grouped by user view model
/// </summary>
public class GroupedByUserViewModel
{
/// <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

@ -13397,6 +13397,26 @@
number of clicks
</summary>
</member>
<member name="T:RMuseum.Models.Generic.ViewModels.GroupedByUserViewModel">
<summary>
grouped by user view model
</summary>
</member>
<member name="P:RMuseum.Models.Generic.ViewModels.GroupedByUserViewModel.Number">
<summary>
number of clicks
</summary>
</member>
<member name="P:RMuseum.Models.Generic.ViewModels.GroupedByUserViewModel.UserId">
<summary>
user id
</summary>
</member>
<member name="P:RMuseum.Models.Generic.ViewModels.GroupedByUserViewModel.UserName">
<summary>
user name
</summary>
</member>
<member name="T:RMuseum.Models.ImportJob.ImportJob">
<summary>
Import Job
@ -15842,6 +15862,15 @@
<param name="paging"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IContributionStatsService.GetApprovedEditsGroupedByUserAsync(RSecurityBackend.Models.Generic.PagingParameterModel,System.Nullable{System.DateTime},System.Nullable{System.Guid})">
<summary>
approved edits grouped by user
</summary>
<param name="paging"></param>
<param name="day"></param>
<param name="userId"></param>
<returns></returns>
</member>
<member name="T:RMuseum.Services.IDonationService">
<summary>
donation service
@ -18750,7 +18779,7 @@
</member>
<member name="M:RMuseum.Services.Implementation.ContributionStatsService.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>
@ -18758,11 +18787,20 @@
</member>
<member name="M:RMuseum.Services.Implementation.ContributionStatsService.GetApprovedEditsGroupedByDateAndUserAsync(RSecurityBackend.Models.Generic.PagingParameterModel)">
<summary>
get approved edits grouped by user / daily
approved edits grouped by user / daily
</summary>
<param name="paging"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.ContributionStatsService.GetApprovedEditsGroupedByUserAsync(RSecurityBackend.Models.Generic.PagingParameterModel,System.Nullable{System.DateTime},System.Nullable{System.Guid})">
<summary>
approved edits grouped by user
</summary>
<param name="paging"></param>
<param name="day"></param>
<param name="userId"></param>
<returns></returns>
</member>
<member name="F:RMuseum.Services.Implementation.ContributionStatsService._context">
<summary>
Database Context

View File

@ -25,5 +25,14 @@ namespace RMuseum.Services
/// <returns></returns>
Task<RServiceResult<(PaginationMetadata PagingMeta, GroupedByDateUserViewModel[] Tracks)>> GetApprovedEditsGroupedByDateAndUserAsync(PagingParameterModel paging);
/// <summary>
/// approved edits grouped by user
/// </summary>
/// <param name="paging"></param>
/// <param name="day"></param>
/// <param name="userId"></param>
/// <returns></returns>
Task<RServiceResult<(PaginationMetadata PagingMeta, GroupedByUserViewModel[] Tracks)>> GetApprovedEditsGroupedByUserAsync(PagingParameterModel paging, DateTime? day, Guid? userId);
}
}

View File

@ -14,7 +14,7 @@ namespace RMuseum.Services.Implementation
public class ContributionStatsService : IContributionStatsService
{
/// <summary>
/// get approved edits daily
/// approved edits daily
/// </summary>
/// <param name="paging"></param>
/// <param name="userId"></param>
@ -46,7 +46,7 @@ namespace RMuseum.Services.Implementation
}
/// <summary>
/// get approved edits grouped by user / daily
/// approved edits grouped by user / daily
/// </summary>
/// <param name="paging"></param>
/// <returns></returns>
@ -64,7 +64,6 @@ namespace RMuseum.Services.Implementation
user => user.Id,
(correction, user) => new
{
correction.Id,
UserId = user.Id,
UserName = user.NickName,
DateTime = correction.Date,
@ -89,6 +88,52 @@ namespace RMuseum.Services.Implementation
}
}
/// <summary>
/// approved edits grouped by user
/// </summary>
/// <param name="paging"></param>
/// <param name="day"></param>
/// <param name="userId"></param>
/// <returns></returns>
public async Task<RServiceResult<(PaginationMetadata PagingMeta, GroupedByUserViewModel[] Tracks)>> GetApprovedEditsGroupedByUserAsync(PagingParameterModel paging, DateTime? day, Guid? userId)
{
try
{
return new RServiceResult<(PaginationMetadata PagingMeta, GroupedByUserViewModel[] Tracks)>(
await QueryablePaginator<GroupedByUserViewModel>.Paginate(
_context.GanjoorPoemCorrections
.Join
(
_context.Users,
correction => correction.UserId,
user => user.Id,
(correction, user) => new
{
correction.Date,
UserId = user.Id,
UserName = user.NickName,
correction.AffectedThePoem,
}
)
.Where(f =>
f.AffectedThePoem
&&
(day == null || f.Date.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());
}
}
/// <summary>
/// Database Context
/// </summary>