diff --git a/RackPeek.Domain/Api/UpsertInventoryUseCase.cs b/RackPeek.Domain/Api/UpsertInventoryUseCase.cs index cc063dc5..a1e2661a 100644 --- a/RackPeek.Domain/Api/UpsertInventoryUseCase.cs +++ b/RackPeek.Domain/Api/UpsertInventoryUseCase.cs @@ -1,9 +1,11 @@ +using System.Collections.Specialized; using System.ComponentModel.DataAnnotations; using System.Text.Json; using System.Text.Json.Serialization; using RackPeek.Domain.Persistence; using RackPeek.Domain.Persistence.Yaml; using RackPeek.Domain.Resources; +using RackPeek.Domain.Resources.Connections; using YamlDotNet.Serialization; using YamlDotNet.Serialization.NamingConventions; @@ -49,24 +51,14 @@ public async Task ExecuteAsync(ImportYamlRequest request) { rawJson, _jsonOptions) ?? throw new ValidationException("Invalid JSON structure."); - // Generate YAML only for persistence layer - ISerializer yamlSerializer = new SerializerBuilder() - .WithNamingConvention(CamelCaseNamingConvention.Instance) - .WithTypeConverter(new StorageSizeYamlConverter()) - .WithTypeConverter(new NotesStringYamlConverter()) - .ConfigureDefaultValuesHandling( - DefaultValuesHandling.OmitNull | - DefaultValuesHandling.OmitEmptyCollections) - .Build(); - - yamlInput = yamlSerializer.Serialize(incomingRoot); + + yamlInput = YamlResourceCollection.SerializeRootAsync(incomingRoot); } if (incomingRoot.Resources == null) throw new ValidationException("Missing 'resources' section."); // 2️Compute Diff - List? incomingResources = incomingRoot.Resources; IReadOnlyList currentResources = await repo.GetAllOfTypeAsync(); diff --git a/RackPeek.Domain/Persistence/Yaml/YamlResourceCollection.cs b/RackPeek.Domain/Persistence/Yaml/YamlResourceCollection.cs index 081fa126..d846f30e 100644 --- a/RackPeek.Domain/Persistence/Yaml/YamlResourceCollection.cs +++ b/RackPeek.Domain/Persistence/Yaml/YamlResourceCollection.cs @@ -358,6 +358,11 @@ private async Task BackupOriginalAsync(string originalYaml) { } private async Task SaveRootAsync(YamlRoot? root) { + var contents = SerializeRootAsync(root); + await fileStore.WriteAllTextAsync(filePath, contents); + } + + public static string SerializeRootAsync(YamlRoot? root) { ISerializer serializer = new SerializerBuilder() .WithNamingConvention(CamelCaseNamingConvention.Instance) .WithTypeConverter(new StorageSizeYamlConverter()) @@ -377,10 +382,11 @@ private async Task SaveRootAsync(YamlRoot? root) { ["connections"] = root.Connections ?? new List() }; - await fileStore.WriteAllTextAsync(filePath, serializer.Serialize(payload)); + return serializer.Serialize(payload); } - private string GetKind(Resource resource) { + + private static string GetKind(Resource resource) { return resource switch { Server => "Server", Switch => "Switch", @@ -396,7 +402,7 @@ private string GetKind(Resource resource) { }; } - private OrderedDictionary SerializeResource(Resource resource) { + public static OrderedDictionary SerializeResource(Resource resource) { var map = new OrderedDictionary { ["kind"] = GetKind(resource) };