Skip to content

Commit 54e92e9

Browse files
committed
Apply value provider to simple elements
1 parent c3db2a4 commit 54e92e9

File tree

1 file changed

+30
-23
lines changed

1 file changed

+30
-23
lines changed

src/Plugins/ZKEACMS.AuditTrail/Service/EntityComparer.cs

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@ public class EntityComparer
2525
/// <summary>
2626
/// Compare two entities and return changed fields
2727
/// </summary>
28-
public static List<FieldChange> Compare<TEntity>(TEntity oldEntity, TEntity newEntity, IEnumerable<IAuditValueProvider> valueProviders = null) where TEntity : class
28+
public static List<FieldChange> Compare<TEntity>(TEntity oldEntity,
29+
TEntity newEntity,
30+
IEnumerable<IAuditValueProvider> valueProviders = null)
31+
where TEntity : class
2932
{
3033
var changes = new List<FieldChange>();
3134

@@ -49,7 +52,11 @@ public static List<FieldChange> Compare<TEntity>(TEntity oldEntity, TEntity newE
4952
/// <summary>
5053
/// Recursively compare entities
5154
/// </summary>
52-
private static void CompareRecursive(object oldObj, object newObj, string prefix, List<FieldChange> changes, IEnumerable<IAuditValueProvider> valueProviders, PropertyInfo currentPropertyInfo)
55+
private static void CompareRecursive(object oldObj, object newObj,
56+
string prefix,
57+
List<FieldChange> changes,
58+
IEnumerable<IAuditValueProvider> valueProviders,
59+
PropertyInfo currentPropertyInfo)
5360
{
5461
if (oldObj == null && newObj == null)
5562
{
@@ -114,7 +121,12 @@ private static bool IsSimpleType(Type type)
114121
/// <summary>
115122
/// Compare collection types
116123
/// </summary>
117-
private static void CompareCollection(object oldObj, object newObj, string fieldName, List<FieldChange> changes, IEnumerable<IAuditValueProvider> valueProviders, PropertyInfo currentPropertyInfo)
124+
private static void CompareCollection(object oldObj,
125+
object newObj,
126+
string fieldName,
127+
List<FieldChange> changes,
128+
IEnumerable<IAuditValueProvider> valueProviders,
129+
PropertyInfo currentPropertyInfo)
118130
{
119131
var oldList = oldObj as IEnumerable;
120132
var newList = newObj as IEnumerable;
@@ -153,7 +165,7 @@ private static void CompareCollection(object oldObj, object newObj, string field
153165
// Check if elementType is a simple type (value type or string)
154166
if (IsSimpleType(elementType))
155167
{
156-
CompareSimpleElements(fieldName, changes, oldItems, newItems);
168+
CompareSimpleElements(fieldName, changes, oldItems, newItems, valueProviders, currentPropertyInfo);
157169
return;
158170
}
159171

@@ -213,7 +225,12 @@ private static void CompareCollection(object oldObj, object newObj, string field
213225
}
214226
}
215227

216-
private static void CompareSimpleElements(string fieldName, List<FieldChange> changes, List<object> oldItems, List<object> newItems)
228+
private static void CompareSimpleElements(string fieldName,
229+
List<FieldChange> changes,
230+
List<object> oldItems,
231+
List<object> newItems,
232+
IEnumerable<IAuditValueProvider> valueProviders,
233+
PropertyInfo currentPropertyInfo)
217234
{
218235
// Handle simple types: compare which values were added or removed
219236
var oldSet = new HashSet<object>(oldItems.Where(i => i != null));
@@ -227,7 +244,7 @@ private static void CompareSimpleElements(string fieldName, List<FieldChange> ch
227244
{
228245
Field = fieldName,
229246
OldValue = null,
230-
NewValue = $"{{Added}} {JsonConverter.Serialize(addedItems)}"
247+
NewValue = $"{{Added}} {SerializeValue(addedItems, currentPropertyInfo, valueProviders)}"
231248
});
232249
}
233250

@@ -238,7 +255,7 @@ private static void CompareSimpleElements(string fieldName, List<FieldChange> ch
238255
changes.Add(new FieldChange
239256
{
240257
Field = fieldName,
241-
OldValue = $"{{Removed}} {JsonConverter.Serialize(deletedItems)}",
258+
OldValue = $"{{Removed}} {SerializeValue(deletedItems, currentPropertyInfo, valueProviders)}",
242259
NewValue = null
243260
});
244261
}
@@ -338,7 +355,7 @@ private static string GetDisplayPropertyName(PropertyInfo property, IEnumerable<
338355

339356
return property.Name;
340357
}
341-
358+
342359
public static string GetKeyAndTitle<TEntity>(TEntity item) where TEntity : class
343360
{
344361
var type = typeof(TEntity);
@@ -481,19 +498,6 @@ private static bool AreEqual(object value1, object value2)
481498
return value1.Equals(value2);
482499
}
483500

484-
/// <summary>
485-
/// Serialize value to string
486-
/// </summary>
487-
public static string SerializeValue(object value)
488-
{
489-
if (value == null) return null;
490-
491-
if (value is string str) return str;
492-
if (value is DateTime dt) return dt.ToString("yyyy-MM-dd HH:mm:ss");
493-
494-
return value.ToString();
495-
}
496-
497501
/// <summary>
498502
/// Serialize value to string with property and value providers
499503
/// </summary>
@@ -513,8 +517,11 @@ private static string SerializeValue(object value, PropertyInfo propertyInfo = n
513517
return provider.GetDisplayValue(propertyInfo, value);
514518
}
515519
}
516-
517-
return value.ToString();
520+
if (IsSimpleType(value.GetType()))
521+
{
522+
return value.ToString();
523+
}
524+
return JsonConverter.Serialize(value);
518525
}
519526

520527
/// <summary>

0 commit comments

Comments
 (0)