diff --git a/src/Core/Extensions/StringExtensions.cs b/src/Core/Extensions/StringExtensions.cs new file mode 100644 index 0000000..21bf6bf --- /dev/null +++ b/src/Core/Extensions/StringExtensions.cs @@ -0,0 +1,27 @@ +using System.Globalization; +using System.Text; + +namespace Core.Extensions; + +public static class StringExtensions +{ + public static string ToPascalCase(this string text) + { + if (text.Length < 1) + return text; + + var words = text.Split(new[] { ' ', '-', '_', '.' }, StringSplitOptions.RemoveEmptyEntries); + + var sb = new StringBuilder(); + + foreach (var word in words) + { + if (word.Length > 0) + { + sb.Append(CultureInfo.InvariantCulture.TextInfo.ToTitleCase(word.ToLowerInvariant())); + } + } + + return sb.ToString(); + } +} \ No newline at end of file diff --git a/src/Core/Mappers/UserPreferencesMapper.cs b/src/Core/Mappers/UserPreferencesMapper.cs index febcfdb..184aa67 100644 --- a/src/Core/Mappers/UserPreferencesMapper.cs +++ b/src/Core/Mappers/UserPreferencesMapper.cs @@ -1,4 +1,5 @@ -using Core.Models.UserPreferences; +using Core.Extensions; +using Core.Models.UserPreferences; using Infrastructure.Persistence.Mongo.Entities.Preferences; using MongoDB.Bson; @@ -26,7 +27,20 @@ public static UserPreferences UpdateEntity(UserPreferences e, UserPreferencesDto var channels = e.Channels; foreach (var ch in dto.Channels) { - if (channels.TryGetValue(ch.Key, out var channel)) + for (var i = 0; i < ch.Value.Metadata?.Keys.Count; i++) + { + var key = ch.Value.Metadata.Keys.ElementAt(i); + var normalized = ch.Key.ToPascalCase(); + + if (!key.Equals(normalized)) + { + ch.Value.Metadata[normalized] = ch.Value.Metadata[key]; + ch.Value.Metadata.Remove(key); + } + } + + var normalizedKey = ch.Key.ToPascalCase(); + if (channels.TryGetValue(normalizedKey, out var channel)) { channel.Enabled = ch.Value.Enabled; channel.Description = ch.Value.Description; @@ -34,7 +48,7 @@ public static UserPreferences UpdateEntity(UserPreferences e, UserPreferencesDto } else { - channels.Add(ch.Key, new ChannelDescriptorBase + channels.Add(normalizedKey, new ChannelDescriptorBase { Enabled = ch.Value.Enabled, Description = ch.Value.Description,