#478 basic service class and interface and a basic view model

This commit is contained in:
Hamid Reza Mohammadi 2025-03-26 18:01:01 +03:30
parent 232b5eae5c
commit 28fd9343e8
5 changed files with 161 additions and 0 deletions

View File

@ -0,0 +1,15 @@
namespace RMuseum.Models.Generic.ViewModels
{
public class GroupedByDateViewModel
{
/// <summary>
/// date (day date or month or ...)
/// </summary>
public string Date { get; set; }
/// <summary>
/// number of clicks
/// </summary>
public int Number { get; set; }
}
}

View File

@ -4484,6 +4484,18 @@
<member name="M:RMuseum.Migrations.CatSugs.BuildTargetModel(Microsoft.EntityFrameworkCore.ModelBuilder)">
<inheritdoc />
</member>
<member name="T:RMuseum.Migrations.CatCorrectionPlusPageId">
<inheritdoc />
</member>
<member name="M:RMuseum.Migrations.CatCorrectionPlusPageId.Up(Microsoft.EntityFrameworkCore.Migrations.MigrationBuilder)">
<inheritdoc />
</member>
<member name="M:RMuseum.Migrations.CatCorrectionPlusPageId.Down(Microsoft.EntityFrameworkCore.Migrations.MigrationBuilder)">
<inheritdoc />
</member>
<member name="M:RMuseum.Migrations.CatCorrectionPlusPageId.BuildTargetModel(Microsoft.EntityFrameworkCore.ModelBuilder)">
<inheritdoc />
</member>
<member name="T:RMuseum.Models.Accounting.DonationExpenditure">
<summary>
donation expenditures
@ -13350,6 +13362,16 @@
rejected
</summary>
</member>
<member name="P:RMuseum.Models.Generic.ViewModels.GroupedByDateViewModel.Date">
<summary>
date (day date or month or ...)
</summary>
</member>
<member name="P:RMuseum.Models.Generic.ViewModels.GroupedByDateViewModel.Number">
<summary>
number of clicks
</summary>
</member>
<member name="T:RMuseum.Models.ImportJob.ImportJob">
<summary>
Import Job
@ -15775,6 +15797,19 @@
<param name="jpegStream"></param>
<returns></returns>
</member>
<member name="T:RMuseum.Services.IContributionStatsService">
<summary>
contributions stats service
</summary>
</member>
<member name="M:RMuseum.Services.IContributionStatsService.GetApprovedEditsGroupedByDateAsync(RSecurityBackend.Models.Generic.PagingParameterModel,System.Nullable{System.Guid})">
<summary>
get approved edits daily
</summary>
<param name="paging"></param>
<param name="userId"></param>
<returns></returns>
</member>
<member name="T:RMuseum.Services.IDonationService">
<summary>
donation service
@ -18676,6 +18711,30 @@
<param name="format"></param>
<returns></returns>
</member>
<member name="T:RMuseum.Services.Implementation.ContributionStatsService">
<summary>
contributions stats service implementation
</summary>
</member>
<member name="M:RMuseum.Services.Implementation.ContributionStatsService.GetApprovedEditsGroupedByDateAsync(RSecurityBackend.Models.Generic.PagingParameterModel,System.Nullable{System.Guid})">
<summary>
get approved edits daily
</summary>
<param name="paging"></param>
<param name="userId"></param>
<returns></returns>
</member>
<member name="F:RMuseum.Services.Implementation.ContributionStatsService._context">
<summary>
Database Context
</summary>
</member>
<member name="M:RMuseum.Services.Implementation.ContributionStatsService.#ctor(RMuseum.DbContext.RMuseumDbContext)">
<summary>
constructor
</summary>
<param name="context"></param>
</member>
<member name="T:RMuseum.Services.Implementation.CorrectionReviewResultConvertor">
<summary>
تبدیلگر CorrectionReviewResult

View File

@ -0,0 +1,21 @@
using RMuseum.Models.Generic.ViewModels;
using RSecurityBackend.Models.Generic;
using System.Threading.Tasks;
using System;
namespace RMuseum.Services
{
/// <summary>
/// contributions stats service
/// </summary>
public interface IContributionStatsService
{
/// <summary>
/// get 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);
}
}

View File

@ -0,0 +1,63 @@
using RMuseum.DbContext;
using RMuseum.Models.Generic.ViewModels;
using RSecurityBackend.Models.Generic;
using RSecurityBackend.Services.Implementation;
using System;
using System.Linq;
using System.Threading.Tasks;
namespace RMuseum.Services.Implementation
{
/// <summary>
/// contributions stats service implementation
/// </summary>
public class ContributionStatsService : IContributionStatsService
{
/// <summary>
/// get approved edits daily
/// </summary>
/// <param name="paging"></param>
/// <param name="userId"></param>
/// <returns></returns>
public async Task<RServiceResult<(PaginationMetadata PagingMeta, GroupedByDateViewModel[] Tracks)>> GetApprovedEditsGroupedByDateAsync(PagingParameterModel paging, Guid? userId)
{
try
{
return new RServiceResult<(PaginationMetadata PagingMeta, GroupedByDateViewModel[] Tracks)>(
await QueryablePaginator<GroupedByDateViewModel>.Paginate(
_context.GanjoorPoemCorrections
.Where(c =>
c.AffectedThePoem == true
&&
(userId == null || c.UserId == userId)
)
.GroupBy(a => a.Date.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());
}
}
/// <summary>
/// Database Context
/// </summary>
protected readonly RMuseumDbContext _context;
/// <summary>
/// constructor
/// </summary>
/// <param name="context"></param>
public ContributionStatsService(RMuseumDbContext context)
{
_context = context;
}
}
}

View File

@ -317,6 +317,9 @@ namespace RMuseum
//Queued FTP Upload Service
services.AddTransient<IQueuedFTPUploadService, QueuedFTPUploadService>();
//Contributions stats service
services.AddTransient<IContributionStatsService, ContributionStatsService>();
//upload limit for IIS
services.Configure<IISServerOptions>(options =>
{