From e978ab328b6caae06e62efda9eda6adbcfb14c3c Mon Sep 17 00:00:00 2001 From: Ahmet Date: Wed, 8 Apr 2020 12:46:33 +0300 Subject: [PATCH] renamed --- ...History.cs => EntityChangeWithUsername.cs} | 2 +- .../Abp/AuditLogging/IAuditLogRepository.cs | 4 +- .../EfCoreAuditLogRepository.cs | 16 ++- .../MongoDB/MongoAuditLogRepository.cs | 17 ++- .../AuditLogging/AuditLogRepository_Tests.cs | 109 +++++++++++++++++- 5 files changed, 140 insertions(+), 8 deletions(-) rename modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/{EntityHistory.cs => EntityChangeWithUsername.cs} (78%) diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/EntityHistory.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/EntityChangeWithUsername.cs similarity index 78% rename from modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/EntityHistory.cs rename to modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/EntityChangeWithUsername.cs index 981eba161b..8f59b2900e 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/EntityHistory.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/EntityChangeWithUsername.cs @@ -1,6 +1,6 @@ namespace Volo.Abp.AuditLogging { - public class EntityHistory + public class EntityChangeWithUsername { public EntityChange EntityChange { 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 ed0666f2e2..ad0e0d20c2 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 @@ -70,6 +70,8 @@ namespace Volo.Abp.AuditLogging string entityTypeFullName = null, CancellationToken cancellationToken = default); - Task> GetEntityHistoriesAsync(string entityId, string entityTypeFullName); + Task GetEntityChangeWithUsernameAsync(Guid entityChangeId); + + Task> GetEntityChangesWithUsernameAsync(string entityId, string entityTypeFullName); } } 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 690273ae1f..1ae28a8478 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 @@ -182,13 +182,25 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore return totalCount; } - public virtual async Task> GetEntityHistoriesAsync(string entityId, string entityTypeFullName) + public virtual async Task GetEntityChangeWithUsernameAsync(Guid entityChangeId) + { + var auditLog = await DbSet.AsNoTracking().IncludeDetails() + .Where(x => x.EntityChanges.Any(y => y.Id == entityChangeId)).FirstAsync(); + + return new EntityChangeWithUsername() + { + EntityChange = auditLog.EntityChanges.First(x => x.Id == entityChangeId), + UserName = auditLog.UserName + }; + } + + public virtual async Task> GetEntityChangesWithUsernameAsync(string entityId, string entityTypeFullName) { var query = DbContext.Set().AsNoTracking().IncludeDetails().Where(x => x.EntityId == entityId && x.EntityTypeFullName == entityTypeFullName); return await (from e in query join auditLog in DbSet on e.AuditLogId equals auditLog.Id - select new EntityHistory() {EntityChange = e, UserName = auditLog.UserName}).ToListAsync(); + select new EntityChangeWithUsername() {EntityChange = e, UserName = auditLog.UserName}).ToListAsync(); } protected virtual IQueryable GetEntityChangeListQuery( 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 cc7248c9f2..2e4d9895df 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 @@ -191,7 +191,20 @@ namespace Volo.Abp.AuditLogging.MongoDB return count; } - public virtual async Task> GetEntityHistoriesAsync(string entityId, string entityTypeFullName) + public virtual async Task GetEntityChangeWithUsernameAsync(Guid entityChangeId) + { + var auditLog = (await GetMongoQueryable() + .Where(x => x.EntityChanges.Any(y => y.Id == entityChangeId)) + .FirstAsync()); + + return new EntityChangeWithUsername() + { + EntityChange = auditLog.EntityChanges.First(x => x.Id == entityChangeId), + UserName = auditLog.UserName + }; + } + + public virtual async Task> GetEntityChangesWithUsernameAsync(string entityId, string entityTypeFullName) { var auditLogs = await GetMongoQueryable().Where(x => x.EntityChanges.Any(y => y.EntityId == entityId && y.EntityTypeFullName == entityTypeFullName)).As>().ToListAsync(); @@ -200,7 +213,7 @@ namespace Volo.Abp.AuditLogging.MongoDB entityChanges.RemoveAll(x => x.EntityId != entityId || x.EntityTypeFullName != entityTypeFullName); - return entityChanges.Select(x => new EntityHistory() + return entityChanges.Select(x => new EntityChangeWithUsername() {EntityChange = x, UserName = auditLogs.First(y => y.Id == x.AuditLogId).UserName}).ToList(); } diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditLogRepository_Tests.cs b/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditLogRepository_Tests.cs index 25720e83aa..68c56bf5a7 100644 --- a/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditLogRepository_Tests.cs +++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditLogRepository_Tests.cs @@ -764,7 +764,7 @@ namespace Volo.Abp.AuditLogging } [Fact] - public async Task GetEntityHistoryAsync() + public async Task GetEntityChangesWithUsernameAsync() { // Arrange var userId = new Guid("4456fb0d-74cc-4807-9eee-23e551e6cb06"); @@ -868,7 +868,7 @@ namespace Volo.Abp.AuditLogging await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)); //Assert - var entityHistory = await AuditLogRepository.GetEntityHistoriesAsync(entityId, entityType); + var entityHistory = await AuditLogRepository.GetEntityChangesWithUsernameAsync(entityId, entityType); entityHistory.Count.ShouldBe(2); var firstUserChange = entityHistory.First(x => x.UserName == firstUser); @@ -881,5 +881,110 @@ namespace Volo.Abp.AuditLogging secondUserChange.EntityChange.ShouldNotBeNull(); secondUserChange.EntityChange.ChangeType.ShouldBe(EntityChangeType.Updated); } + + [Fact] + public async Task GetEntityChangeWithUsernameAsync() + { + // Arrange + var userId = new Guid("4456fb0d-74cc-4807-9eee-23e551e6cb06"); + var userId2 = new Guid("4456fb0d-74cc-4807-9eee-23e551e6cb06"); + var ipAddress = "153.1.7.61"; + var firstComment = "first Comment"; + + var log1 = new AuditLogInfo + { + UserId = userId, + ImpersonatorUserId = Guid.NewGuid(), + ImpersonatorTenantId = Guid.NewGuid(), + ExecutionTime = DateTime.Today, + ExecutionDuration = 42, + ClientIpAddress = ipAddress, + ClientName = "MyDesktop", + BrowserInfo = "Chrome", + Comments = new List { firstComment, "Second Comment" }, + UserName = "Douglas", + EntityChanges = { + new EntityChangeInfo + { + EntityId = Guid.NewGuid().ToString(), + EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Deleted", + ChangeType = EntityChangeType.Deleted, + ChangeTime = new DateTime(1995, 3, 27), + PropertyChanges = new List + { + new EntityPropertyChangeInfo + { + PropertyTypeFullName = typeof(string).FullName, + PropertyName = "Name", + NewValue = "New value", + OriginalValue = null + } + } + }, + new EntityChangeInfo + { + EntityId = Guid.NewGuid().ToString(), + EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Created", + ChangeType = EntityChangeType.Created, + ChangeTime = DateTime.Now, + PropertyChanges = new List + { + new EntityPropertyChangeInfo + { + PropertyTypeFullName = typeof(string).FullName, + PropertyName = "Name", + NewValue = "New value", + OriginalValue = null + } + } + } + + } + }; + + var log2 = new AuditLogInfo + { + UserId = userId2, + ImpersonatorUserId = Guid.NewGuid(), + ImpersonatorTenantId = Guid.NewGuid(), + ExecutionTime = DateTime.Today, + ExecutionDuration = 42, + ClientIpAddress = ipAddress, + ClientName = "MyDesktop", + BrowserInfo = "Chrome", + Comments = new List { firstComment, "Second Comment" }, + HttpStatusCode = (int?)HttpStatusCode.BadGateway, + UserName = "John Doe", + EntityChanges = { + new EntityChangeInfo + { + EntityId = Guid.NewGuid().ToString(), + EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Updated", + ChangeType = EntityChangeType.Updated, + ChangeTime = DateTime.Now, + PropertyChanges = new List + { + new EntityPropertyChangeInfo + { + PropertyTypeFullName = typeof(string).FullName, + PropertyName = "Name", + NewValue = "New value", + OriginalValue = null + } + } + } + } + }; + + await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log1)); + await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)); + + var entityChanges = await AuditLogRepository.GetEntityChangeListAsync(); + var entityHistory = + await AuditLogRepository.GetEntityChangeWithUsernameAsync(entityChanges.First().Id); + + entityHistory.EntityChange.ChangeTime.ShouldBe(entityChanges.First().ChangeTime); + entityHistory.UserName.ShouldNotBeNull();; + } } }