Ejemplo n.º 1
0
        private void GenerateAuditEvent(string id, int descriptionId, string description)
        {
            var audit = new Audit.Audit
            {
                category                = "System call audit",
                description             = description,
                fullyQualifiedClassName = "CreditCardController",
                descriptionId           = descriptionId.ToString(),
                id         = id,
                methodName = "Get",
                severity   = "Information",
                timeStamp  = DateTime.Now.ToString(),
                user       = id,
                data       = new object()
            };

            auditHandler.Post(audit);
        }
        private async Task <bool> TrackStatePrivateAsync([NotNull] EntityEntry entry, EntityState state)
        {
            if (entry.Entity is IEntity e)
            {
                Changecount++;

                var auditTran = await EnsureTransactionAuditAsync();

                EventMethod method = EventMethod.Add;
                switch (state)
                {
                case EntityState.Deleted:
                    break;

                case EntityState.Modified:

                    e.UpdatedTransaction   = auditTran;
                    e.UpdatedTransactionId = auditTran.Id;
                    method = EventMethod.Update;

                    if (null != e.DeletedTransaction)
                    {
                        method = EventMethod.Delete;
                    }

                    break;

                case EntityState.Added:
                    e.CreatedTransaction   = auditTran;
                    e.CreatedTransactionId = auditTran.Id;
                    e.UpdatedTransaction   = auditTran;
                    e.UpdatedTransactionId = auditTran.Id;
                    break;
                }

                if (AuditingEnabled)
                {
                    var    t           = FindEntityType(e);
                    string strObjectId = "";



                    //var json = System.Text.Json.JsonSerializer.Serialize(entity, EntityJsonSerializerOptions);
                    var jSettings = new JsonSerializerSettings()
                    {
                        ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
                        Formatting            = Formatting.None,
                    };
                    //jSettings.Converters.Add(new EntityConverter());

                    var eo    = new ExpandoObject();
                    var d     = (IDictionary <string, object>)eo;
                    var props = entry.CurrentValues.Properties.OrderBy(x => x.Name).ToList();
                    foreach (var property in props)
                    {
                        var name = property.Name;

                        var getter   = property.PropertyInfo.GetMethod;
                        var valueRaw = getter?.Invoke(e, null);
                        d.Add(name, valueRaw);

                        if (name == "Id")
                        {
                            strObjectId = $"{valueRaw}";
                        }
                    }

                    var vl = Newtonsoft.Json.JsonConvert.SerializeObject(d, jSettings);

                    var a = new Audit.Audit()
                    {
                        Author        = Author,
                        Action        = $"{method}",
                        DateTime      = DateTime.UtcNow,
                        EntityName    = t.entityType.Name,
                        TableName     = t.TableName,
                        Id            = $"{NewId.NextGuid():N}",
                        KeyValue      = strObjectId,
                        TransactionId = auditTran.Id,
                        Values        = Encoding.UTF8.GetBytes(vl)
                    };

                    await Audits.AddAsync(a);
                }

                return(true);
            }
            else
            {
                return(false);
            }
        }