From 0a28ff704b79e83596758a31d44af909eefa2b8a Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 17 Jul 2018 16:18:56 +0300 Subject: [PATCH] Audit logging paging --- .../Volo/Abp/Paging/PagedResult.cs | 73 +++++++++++++++++++ .../Abp/AuditLogging/IAuditLogRepository.cs | 12 ++- .../EfCoreAuditLogRepository.cs | 29 ++++++++ .../MongoDB/MongoAuditLogRepository.cs | 23 ++++++ 4 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/Paging/PagedResult.cs diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/Paging/PagedResult.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/Paging/PagedResult.cs new file mode 100644 index 0000000000..49e51eb078 --- /dev/null +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/Paging/PagedResult.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Volo.Abp.Paging +{ + public class PagedResult : ListResultDto, IPagedResult + { + /// + public long TotalCount { get; set; } + + /// + /// Creates a new object. + /// + public PagedResult() + { + + } + + /// + /// Creates a new object. + /// + /// Total count of Items + /// List of items in current page + public PagedResult(long totalCount, IReadOnlyList items) + : base(items) + { + TotalCount = totalCount; + } + } + + public class ListResultDto : IListResult + { + /// + public IReadOnlyList Items + { + get { return _items ?? (_items = new List()); } + set { _items = value; } + } + private IReadOnlyList _items; + + /// + /// Creates a new object. + /// + public ListResultDto() + { + + } + + /// + /// Creates a new object. + /// + /// List of items + public ListResultDto(IReadOnlyList items) + { + Items = items; + } + } + + public interface IListResult + { + IReadOnlyList Items { get; set; } + } + + public interface IPagedResult : IListResult, IHasTotalCount + { + } + + public interface IHasTotalCount + { + long TotalCount { get; set; } + } +} diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/IAuditLogRepository.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/IAuditLogRepository.cs index b78987dc91..2163b543d7 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/IAuditLogRepository.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/IAuditLogRepository.cs @@ -1,10 +1,20 @@ using System; +using System.Net; +using System.Threading.Tasks; using Volo.Abp.Domain.Repositories; namespace Volo.Abp.AuditLogging { public interface IAuditLogRepository : IBasicRepository { - + Task> GetListAsync( + string sorting = null, + int maxResultCount = 50, + int skipCount = 0, + string filter = null, + string httpMethod = null, + string url = null, + HttpStatusCode? httpStatusCode = null, + bool includeDetails = false); } } diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs index 44c33b06ea..732ffdc896 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs @@ -1,5 +1,9 @@ using System; using System.Linq; +using System.Linq.Dynamic.Core; +using System.Net; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; @@ -13,6 +17,31 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore } + public async Task> GetListAsync( + string sorting = null, + int maxResultCount = 50, + int skipCount = 0, + string filter = null, + string httpMethod = null, + string url = null, + HttpStatusCode? httpStatusCode = null, + bool includeDetails = false) + { + var query = DbSet.AsNoTracking() + .IncludeDetails(includeDetails) + .WhereIf(httpMethod != null, q => q.HttpMethod == httpMethod) + .WhereIf(url != null, q => q.Url == url) + .WhereIf(httpStatusCode != null, q => q.HttpStatusCode == (decimal?) httpStatusCode); + + var totalCount = await query.LongCountAsync(); + + var auditLogs = await query.OrderBy(sorting) + .PageBy(skipCount, maxResultCount) + .ToListAsync(); + + return new Paging.PagedResult(totalCount, auditLogs); + } + public override IQueryable WithDetails() { return GetQueryable().IncludeDetails(); diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs index 61c83861eb..687adc6382 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs @@ -1,4 +1,10 @@ using System; +using System.Linq; +using System.Linq.Dynamic.Core; +using System.Net; +using System.Threading.Tasks; +using MongoDB.Driver; +using MongoDB.Driver.Linq; using Volo.Abp.Domain.Repositories.MongoDB; using Volo.Abp.MongoDB; @@ -11,5 +17,22 @@ namespace Volo.Abp.AuditLogging.MongoDB { } + + public async Task> GetListAsync(string sorting = null, int maxResultCount = 50, int skipCount = 0, string filter = null, + string httpMethod = null, string url = null, HttpStatusCode? httpStatusCode = null, bool includeDetails = false) + { + var query = GetMongoQueryable() + .WhereIf(httpMethod != null, q => q.HttpMethod == httpMethod) + .WhereIf(url != null, q => q.Url == url) + .WhereIf(httpStatusCode != null && httpStatusCode > 0, q => q.HttpStatusCode == (int?)httpStatusCode); + + var totalCount = await query.As>().LongCountAsync(); + + var questions = await query.OrderBy(sorting).As>() + .PageBy>(skipCount, maxResultCount) + .ToListAsync(); + + return new Paging.PagedResult(totalCount, questions); + } } }