Browse Source

Audit logging paging

pull/395/head
Yunus Emre Kalkan 8 years ago
parent
commit
0a28ff704b
  1. 73
      modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/Paging/PagedResult.cs
  2. 12
      modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/IAuditLogRepository.cs
  3. 29
      modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs
  4. 23
      modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs

73
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<T> : ListResultDto<T>, IPagedResult<T>
{
/// <inheritdoc />
public long TotalCount { get; set; }
/// <summary>
/// Creates a new <see cref="PagedResult{T}"/> object.
/// </summary>
public PagedResult()
{
}
/// <summary>
/// Creates a new <see cref="PagedResult{T}"/> object.
/// </summary>
/// <param name="totalCount">Total count of Items</param>
/// <param name="items">List of items in current page</param>
public PagedResult(long totalCount, IReadOnlyList<T> items)
: base(items)
{
TotalCount = totalCount;
}
}
public class ListResultDto<T> : IListResult<T>
{
/// <inheritdoc />
public IReadOnlyList<T> Items
{
get { return _items ?? (_items = new List<T>()); }
set { _items = value; }
}
private IReadOnlyList<T> _items;
/// <summary>
/// Creates a new <see cref="ListResultDto{T}"/> object.
/// </summary>
public ListResultDto()
{
}
/// <summary>
/// Creates a new <see cref="ListResultDto{T}"/> object.
/// </summary>
/// <param name="items">List of items</param>
public ListResultDto(IReadOnlyList<T> items)
{
Items = items;
}
}
public interface IListResult<T>
{
IReadOnlyList<T> Items { get; set; }
}
public interface IPagedResult<T> : IListResult<T>, IHasTotalCount
{
}
public interface IHasTotalCount
{
long TotalCount { get; set; }
}
}

12
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<AuditLog, Guid>
{
Task<Paging.PagedResult<AuditLog>> 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);
}
}

29
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<Paging.PagedResult<AuditLog>> 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<AuditLog>(totalCount, auditLogs);
}
public override IQueryable<AuditLog> WithDetails()
{
return GetQueryable().IncludeDetails();

23
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<Paging.PagedResult<AuditLog>> 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<IMongoQueryable<AuditLog>>().LongCountAsync();
var questions = await query.OrderBy(sorting).As<IMongoQueryable<AuditLog>>()
.PageBy<AuditLog, IMongoQueryable<AuditLog>>(skipCount, maxResultCount)
.ToListAsync();
return new Paging.PagedResult<AuditLog>(totalCount, questions);
}
}
}

Loading…
Cancel
Save