onebeyond/onebeyond-studio-core

View on GitHub
src/OneBeyond.Studio.EntityAuditing/OneBeyond.Studio.EntityAuditing.Domain/AuditEventSerializers/JsonAuditEventSerializer.cs

Summary

Maintainability
A
0 mins
Test Coverage
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using EnsureThat;
using Newtonsoft.Json.Linq;

namespace OneBeyond.Studio.EntityAuditing.Domain.AuditEventSerializers;

public class JsonAuditEventSerializer<TEntity> : IJsonAuditEventSerializer<TEntity>
    where TEntity : class
{
    ValueTask<IAuditChangeResult<JToken>> IAuditEventSerializer<TEntity, JToken>.SerializeAsync(TEntity entity, AuditEvent auditEntityEvent, CancellationToken cancellationToken)
        => SerializeAsync(entity, auditEntityEvent, cancellationToken);

    public virtual ValueTask<IAuditChangeResult<JToken>> SerializeAsync(TEntity entity, AuditEvent auditEntityEvent, CancellationToken cancellationToken)
    {
        EnsureArg.IsNotNull(entity, nameof(entity));
        EnsureArg.IsNotNull(auditEntityEvent, nameof(auditEntityEvent));

        return new ValueTask<IAuditChangeResult<JToken>>(
            new JTokenAuditChangeResult(
                auditEntityEvent.EntityChanges != null && auditEntityEvent.EntityChanges.Any()
                ? JToken.FromObject(auditEntityEvent.EntityChanges)
                : JValue.CreateNull()));
    }
}