using PostFundManagement.Domain.Abstractions; using PostFundManagement.Domain.Errors; using PostFundManagement.Infrastructure.Database; namespace PostFundManagement.Application.Services.Shared; public sealed class AuditService(IDbContextFactory contextFactory, ITenantContextService tenantContextService) : IService { public async ValueTask LogActionAsync(string entityId, string entityName, string action, string[] changes, Guid performedBy, CancellationToken cancellationToken = default) => await Result.Try((Func>)(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); })); }