EntityChangeInfo.Merge improvements

pull/395/head
Halil ibrahim Kalkan 7 years ago
parent 2927debb53
commit d73edcb098

@ -0,0 +1,3 @@
using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo("Volo.Abp.Auditing.Tests")]

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Volo.Abp.Data;
using Volo.Abp.MultiTenancy;
@ -30,10 +31,28 @@ namespace Volo.Abp.Auditing
public virtual void Merge(EntityChangeInfo changeInfo)
{
//TODO: Gracefully merge (add/update) and also for ExtraProperties
foreach (var propertyChange in changeInfo.PropertyChanges)
{
PropertyChanges.Add(propertyChange);
var existingChange = PropertyChanges.FirstOrDefault(p => p.PropertyName == propertyChange.PropertyName);
if (existingChange == null)
{
PropertyChanges.Add(propertyChange);
}
else
{
existingChange.NewValue = propertyChange.NewValue;
}
}
foreach (var extraProperty in changeInfo.ExtraProperties)
{
var key = extraProperty.Key;
if (ExtraProperties.ContainsKey(key))
{
key = InternalUtils.AddCounter(key);
}
ExtraProperties[key] = extraProperty.Value;
}
}
}

@ -0,0 +1,24 @@
using System;
namespace Volo.Abp.Auditing
{
internal static class InternalUtils
{
internal static string AddCounter(string str)
{
if (str.Contains("__"))
{
var splitted = str.Split("__");
if (splitted.Length == 2)
{
if (int.TryParse(splitted[1], out var num))
{
return splitted[0] + "__" + (++num);
}
}
}
return str + "__2";
}
}
}

@ -0,0 +1,16 @@
using Shouldly;
using Xunit;
namespace Volo.Abp.Auditing
{
public static class InternalUtils_Tests
{
[Fact]
public static void AddCounter()
{
InternalUtils.AddCounter("test").ShouldBe("test__2");
InternalUtils.AddCounter("test__2").ShouldBe("test__3");
InternalUtils.AddCounter("test__a").ShouldBe("test__a__2");
}
}
}
Loading…
Cancel
Save