28 lines
1.2 KiB
C#
28 lines
1.2 KiB
C#
using PostFundManagement.Domain.Abstractions;
|
|
using PostFundManagement.Domain.Errors;
|
|
using PostFundManagement.Infrastructure.Database;
|
|
|
|
namespace PostFundManagement.Application.Services.Shared;
|
|
|
|
public sealed class AuditService(IDbContextFactory<ApplicationDbContext> contextFactory, ITenantContextService tenantContextService) : IService
|
|
{
|
|
public async Task<Result> LogActionAsync(string entityId, string entityName, string action, string[] changes, Guid performedBy, CancellationToken cancellationToken = default) =>
|
|
await Result.Try((Func<Task<Result>>)(async () =>
|
|
{
|
|
await using var context = await contextFactory.CreateDbContextAsync(cancellationToken);
|
|
|
|
context.Add(new Domain.Entities.AuditLog
|
|
{
|
|
EntityId = entityId,
|
|
Action = action,
|
|
Changes = changes,
|
|
EntityName = entityName,
|
|
PerformedBy = performedBy,
|
|
Timestamp = DateTime.UtcNow,
|
|
TenantId = tenantContextService.TenantId > 0 ? tenantContextService.TenantId : null,
|
|
});
|
|
|
|
return Result.FailIf(await context.SaveChangesAsync(cancellationToken) <= 0, CreateError.New);
|
|
}));
|
|
}
|