From 8c2a74bd8c5dd40b2661727ba4775b943adfbfbe Mon Sep 17 00:00:00 2001 From: Bardin08 Date: Mon, 3 Jun 2024 02:58:51 +0300 Subject: [PATCH] Add case normalization --- src/Core/Extensions/StringExtensions.cs | 27 +++++++++++++++++++++++ src/Core/Mappers/UserPreferencesMapper.cs | 20 ++++++++++++++--- 2 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 src/Core/Extensions/StringExtensions.cs 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,