public static AuditTrailResource FromEntity(AuditTrailEntity entity) { return(new AuditTrailResource() { CreatedAt = entity.CreatedAt, RequestBaseUrl = entity.RequestBaseUrl, RequestMethod = entity.RequestMethod, RequestMethodColor = entity.RequestMethodColor, Audit = "User: '******' from company: '" + entity.Company.Name + "' made an '" + entity.RequestMethod + "' request on '" + entity.RequestBaseUrl + "' with flag-color '" + entity.RequestMethodColor + "' and Ip address '" + entity.IpAddress + "'", Id = entity.PrimaryKey, Name = entity.Identifier, UserName = entity.User.Name, CompanyName = entity.Company.Name, IpAddress = entity.IpAddress, Changes = entity.AuditTrailChangeLog.Select(AuditTrailChangeLogResource.FromEntity).ToList().Count > 0 ? entity.AuditTrailChangeLog.Select(AuditTrailChangeLogResource.FromEntity).ToList() : null }); }
public bool Capture(AuditTrailMetaData auditTrailMetaData) { // Meta Data var user = auditTrailMetaData.User; var company = auditTrailMetaData.Company; var permission = auditTrailMetaData.Permission; var requestMethod = auditTrailMetaData.RequestMethod; var requestBaseUrl = auditTrailMetaData.RequestBaseUrl; var requestIpAddress = auditTrailMetaData.RequestIpAddress; var license = auditTrailMetaData.License; if (license == false) { license = company.Licenses.Any(x => x.LicenseType.Name == "CFR"); } var now = DateTime.UtcNow.ToString(CultureInfo.InvariantCulture); // Validation if (license == false) { return(false); } if (user == null) { throw new Exception("AuditTrail Error: User is mandatory"); } if (company == null) { throw new Exception("AuditTrail Error: Company is mandatory"); } if (permission == null) { throw new Exception("AuditTrail Error: Permission is mandatory"); } if (requestIpAddress == null) { requestIpAddress = "Not specified"; } if (requestMethod == null) { requestMethod = "Not specified"; } if (requestBaseUrl == null) { requestBaseUrl = "Not specified"; } var states = ((IObjectContextAdapter)_context).ObjectContext.ObjectStateManager.GetObjectStateEntries( EntityState.Added | EntityState.Modified | EntityState.Deleted); foreach (var state in states) { switch (state.State) { case EntityState.Added: { var auditTrailEntity = new AuditTrailEntity() { User = user, Company = company, Permission = permission, RequestBaseUrl = requestBaseUrl, RequestMethod = requestMethod, RequestMethodColor = "Green", IpAddress = requestIpAddress, Identifier = GetTableName(state), PrimaryKey = GetPrimaryKey(state), CreatedAt = now }; _context.Set <AuditTrailEntity>().Add(auditTrailEntity); return(true); } case EntityState.Modified: { var logs = GetChanges(); if (logs.Count == 0) { return(false); } var auditTrailUpdate = new AuditTrailEntity() { User = user, Company = company, Permission = permission, RequestBaseUrl = requestBaseUrl, RequestMethod = requestMethod, RequestMethodColor = "Yellow", IpAddress = requestIpAddress, AuditTrailChangeLog = logs, Identifier = GetTableName(state), PrimaryKey = GetPrimaryKey(state), CreatedAt = now.ToString(CultureInfo.InvariantCulture), }; _context.Set <AuditTrailEntity>().Add(auditTrailUpdate); return(true); } case EntityState.Deleted: { var auditTrailEntity = new AuditTrailEntity() { User = user, Company = company, Permission = permission, RequestBaseUrl = requestBaseUrl, RequestMethod = requestMethod, RequestMethodColor = "Red", IpAddress = requestIpAddress, Identifier = GetTableName(state), PrimaryKey = GetPrimaryKey(state), CreatedAt = now }; _context.Set <AuditTrailEntity>().Add(auditTrailEntity); return(true); } case EntityState.Detached: { break; } case EntityState.Unchanged: { break; } default: throw new ArgumentOutOfRangeException(); } } return(false); }