public HistoryService(NSCRegDbContext dbContext) { _dbContext = dbContext; _userService = new UserService(dbContext); _foreignKeysResolver = new ForeingKeysResolver(dbContext); _commonSvc = new Common(dbContext); }
/// <summary> /// Method returning unchanged cropped fields /// </summary> /// <param name = "after"> After </param> /// <param name = "before"> To </param> /// <param name = "userId"> User Id </param> /// <returns> </returns> private async Task <IEnumerable <ChangedField> > CutUnchangedFields <T>(T after, T before, string userId) where T : class, IStatisticalUnit { var unitType = after.GetType(); var daa = await _userService.GetDataAccessAttributes( userId, StatisticalUnitsTypeHelper.GetStatUnitMappingType(unitType)); var cahangedFields = from prop in unitType.GetProperties() let valueBefore = unitType.GetProperty(prop.Name).GetValue(before, null)?.ToString() ?? "" let valueAfter = unitType.GetProperty(prop.Name).GetValue(after, null)?.ToString() ?? "" where prop.Name != nameof(IStatisticalUnit.RegId) && daa.HasWriteOrReadPermission(DataAccessAttributesHelper.GetName(unitType, prop.Name)) && valueAfter != valueBefore select new ChangedField { Name = prop.Name, Before = valueBefore, After = valueAfter }; var result = cahangedFields.ToArray(); foreach (var historyChangedField in result.Where(x => _foreignKeysResolver.Keys.Contains(x.Name)).Select(x => x).ToArray()) { if (historyChangedField != null) { _foreignKeysResolver[historyChangedField.Name](historyChangedField); } } return(result.ToArray()); }