Include create date in audit item (#17447)

This commit is contained in:
Mole
2024-11-08 08:58:38 +01:00
committed by GitHub
parent f7729508cf
commit 2d4230c001
3 changed files with 58 additions and 7 deletions

View File

@@ -7,6 +7,21 @@ public sealed class AuditItem : EntityBase, IAuditItem
/// <summary>
/// Initializes a new instance of the <see cref="AuditItem" /> class.
/// </summary>
public AuditItem(int objectId, AuditType type, int userId, string? entityType, DateTime createDate, string? comment = null, string? parameters = null)
{
DisableChangeTracking();
Id = objectId;
Comment = comment;
AuditType = type;
UserId = userId;
EntityType = entityType;
Parameters = parameters;
CreateDate = createDate;
EnableChangeTracking();
}
public AuditItem(int objectId, AuditType type, int userId, string? entityType, string? comment = null, string? parameters = null)
{
DisableChangeTracking();

View File

@@ -29,7 +29,7 @@ internal class AuditRepository : EntityRepositoryBase<int, IAuditItem>, IAuditRe
List<LogDto>? dtos = Database.Fetch<LogDto>(sql);
return dtos.Select(x => new AuditItem(x.NodeId, Enum<AuditType>.Parse(x.Header), x.UserId ?? Constants.Security.UnknownUserId, x.EntityType, x.Comment, x.Parameters)).ToList();
return dtos.Select(x => new AuditItem(x.NodeId, Enum<AuditType>.Parse(x.Header), x.UserId ?? Constants.Security.UnknownUserId, x.EntityType, x.Datestamp, x.Comment, x.Parameters)).ToList();
}
public void CleanLogs(int maximumAgeOfLogsInMinutes)
@@ -104,7 +104,7 @@ internal class AuditRepository : EntityRepositoryBase<int, IAuditItem>, IAuditRe
totalRecords = page.TotalItems;
var items = page.Items.Select(
dto => new AuditItem(dto.NodeId, Enum<AuditType>.ParseOrNull(dto.Header) ?? AuditType.Custom, dto.UserId ?? Constants.Security.UnknownUserId, dto.EntityType, dto.Comment, dto.Parameters)).ToList();
dto => new AuditItem(dto.NodeId, Enum<AuditType>.ParseOrNull(dto.Header) ?? AuditType.Custom, dto.UserId ?? Constants.Security.UnknownUserId, dto.EntityType, dto.Datestamp, dto.Comment, dto.Parameters)).ToList();
// map the DateStamp
for (var i = 0; i < items.Count; i++)
@@ -144,12 +144,12 @@ internal class AuditRepository : EntityRepositoryBase<int, IAuditItem>, IAuditRe
protected override IAuditItem? PerformGet(int id)
{
Sql<ISqlContext> sql = GetBaseQuery(false);
sql.Where(GetBaseWhereClause(), new { Id = id });
sql.Where(GetBaseWhereClause(), new { id = id });
LogDto? dto = Database.First<LogDto>(sql);
return dto == null
? null
: new AuditItem(dto.NodeId, Enum<AuditType>.Parse(dto.Header), dto.UserId ?? Constants.Security.UnknownUserId, dto.EntityType, dto.Comment, dto.Parameters);
: new AuditItem(dto.NodeId, Enum<AuditType>.Parse(dto.Header), dto.UserId ?? Constants.Security.UnknownUserId, dto.EntityType, dto.Datestamp, dto.Comment, dto.Parameters);
}
protected override IEnumerable<IAuditItem> PerformGetAll(params int[]? ids) => throw new NotImplementedException();
@@ -162,7 +162,7 @@ internal class AuditRepository : EntityRepositoryBase<int, IAuditItem>, IAuditRe
List<LogDto>? dtos = Database.Fetch<LogDto>(sql);
return dtos.Select(x => new AuditItem(x.NodeId, Enum<AuditType>.Parse(x.Header), x.UserId ?? Constants.Security.UnknownUserId, x.EntityType, x.Comment, x.Parameters)).ToList();
return dtos.Select(x => new AuditItem(x.NodeId, Enum<AuditType>.Parse(x.Header), x.UserId ?? Constants.Security.UnknownUserId, x.EntityType, x.Datestamp, x.Comment, x.Parameters)).ToList();
}
protected override Sql<ISqlContext> GetBaseQuery(bool isCount)
@@ -184,7 +184,7 @@ internal class AuditRepository : EntityRepositoryBase<int, IAuditItem>, IAuditRe
return sql;
}
protected override string GetBaseWhereClause() => "id = @id";
protected override string GetBaseWhereClause() => "umbracoLog.id = @id";
protected override IEnumerable<string> GetDeleteClauses() => throw new NotImplementedException();
}

View File

@@ -1,11 +1,11 @@
// Copyright (c) Umbraco.
// See LICENSE for more details.
using System.Linq;
using Microsoft.Extensions.Logging;
using NUnit.Framework;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Persistence.Repositories;
using Umbraco.Cms.Infrastructure.Persistence;
using Umbraco.Cms.Infrastructure.Persistence.Dtos;
using Umbraco.Cms.Infrastructure.Persistence.Repositories.Implement;
@@ -24,6 +24,10 @@ public class AuditRepositoryTest : UmbracoIntegrationTest
private ILogger<AuditRepository> _logger;
private IAuditRepository AuditRepository => GetRequiredService<IAuditRepository>();
private IAuditItem GetAuditItem(int id) => new AuditItem(id, AuditType.System, -1, UmbracoObjectTypes.Document.GetName(), "This is a System audit trail");
[Test]
public void Can_Add_Audit_Entry()
{
@@ -40,6 +44,38 @@ public class AuditRepositoryTest : UmbracoIntegrationTest
}
}
[Test]
public void Has_Create_Date_When_Get_By_Id()
{
using var scope = ScopeProvider.CreateScope();
AuditRepository.Save(GetAuditItem(1));
var auditEntry = AuditRepository.Get(1);
Assert.That(auditEntry.CreateDate, Is.Not.EqualTo(default(DateTime)));
}
[Test]
public void Has_Create_Date_When_Get_By_Query()
{
using var scope = ScopeProvider.CreateScope();
AuditRepository.Save(GetAuditItem(1));
var auditEntry = AuditRepository.Get(AuditType.System, ScopeProvider.CreateQuery<IAuditItem>().Where(x => x.Id == 1)).FirstOrDefault();
Assert.That(auditEntry, Is.Not.Null);
Assert.That(auditEntry.CreateDate, Is.Not.EqualTo(default(DateTime)));
}
[Test]
public void Has_Create_Date_When_Get_By_Paged_Query()
{
using var scope = ScopeProvider.CreateScope();
AuditRepository.Save(GetAuditItem(1));
var auditEntry = AuditRepository.GetPagedResultsByQuery(ScopeProvider.CreateQuery<IAuditItem>().Where(x => x.Id == 1),0, 10, out long total, Direction.Ascending, null, null).FirstOrDefault();
Assert.That(auditEntry, Is.Not.Null);
Assert.That(auditEntry.CreateDate, Is.Not.EqualTo(default(DateTime)));
}
[Test]
public void Get_Paged_Items()
{