diff --git a/DeepDrftContent/FileDatabase/Models/IndexData.cs b/DeepDrftContent/FileDatabase/Models/IndexData.cs index c5f0fe4..1b79047 100644 --- a/DeepDrftContent/FileDatabase/Models/IndexData.cs +++ b/DeepDrftContent/FileDatabase/Models/IndexData.cs @@ -34,12 +34,21 @@ public class DirectoryIndexData : IndexData } } +/// +/// Entry data for vault index serialization +/// +public class VaultEntryData +{ + public EntryKey Key { get; set; } = null!; + public MetaData Value { get; set; } = null!; +} + /// /// Serializable data for vault indexes /// public class VaultIndexData : IndexData { - public List<(EntryKey Key, MetaData Value)> Entries { get; set; } = new(); + public List Entries { get; set; } = new(); public VaultIndexData(string indexKey) : base(indexKey) { } @@ -47,7 +56,7 @@ public class VaultIndexData : IndexData { var data = new VaultIndexData(index.GetKey()) { - Entries = index.Entries.Select(kvp => (kvp.Key, kvp.Value)).ToList() + Entries = index.Entries.Select(kvp => new VaultEntryData { Key = kvp.Key, Value = kvp.Value }).ToList() }; return data; } @@ -92,9 +101,9 @@ public class VaultIndex : IndexData, IIndex { Entries = new StructuralMap(); // Load entries from data - foreach (var (key, value) in indexData.Entries) + foreach (var entry in indexData.Entries) { - Entries.Set(key, value); + Entries.Set(entry.Key, entry.Value); } } diff --git a/DeepDrftContent/FileDatabase/Models/MediaModels.cs b/DeepDrftContent/FileDatabase/Models/MediaModels.cs index a54d278..ebaaee3 100644 --- a/DeepDrftContent/FileDatabase/Models/MediaModels.cs +++ b/DeepDrftContent/FileDatabase/Models/MediaModels.cs @@ -156,8 +156,15 @@ public static class MimeTypeExtensions { ".bmp", "image/bmp" } }; - private static readonly Dictionary Extensions = - MimeTypes.ToDictionary(kvp => kvp.Value, kvp => kvp.Key); + private static readonly Dictionary Extensions = new() + { + { "image/jpeg", ".jpg" }, + { "image/png", ".png" }, + { "image/gif", ".gif" }, + { "image/webp", ".webp" }, + { "image/svg+xml", ".svg" }, + { "image/bmp", ".bmp" } + }; public static string GetMimeType(string extension) { diff --git a/DeepDrftContent/FileDatabase/Models/MetaData.cs b/DeepDrftContent/FileDatabase/Models/MetaData.cs index 12d84d5..be1f7e0 100644 --- a/DeepDrftContent/FileDatabase/Models/MetaData.cs +++ b/DeepDrftContent/FileDatabase/Models/MetaData.cs @@ -1,3 +1,5 @@ +using System.Text.Json.Serialization; + namespace DeepDrftContent.FileDatabase.Models; /// @@ -5,6 +7,9 @@ namespace DeepDrftContent.FileDatabase.Models; /// /// The key used to identify the media file /// The file extension of the media +[JsonPolymorphic(TypeDiscriminatorPropertyName = "$type")] +[JsonDerivedType(typeof(MetaData), typeDiscriminator: "media")] +[JsonDerivedType(typeof(ImageMetaData), typeDiscriminator: "image")] public record MetaData(string MediaKey, string Extension); /// diff --git a/DeepDrftContent/Models/FileDatabaseSettings.cs b/DeepDrftContent/Models/FileDatabaseSettings.cs new file mode 100644 index 0000000..6932951 --- /dev/null +++ b/DeepDrftContent/Models/FileDatabaseSettings.cs @@ -0,0 +1,7 @@ +namespace DeepDrftContent.Models +{ + public class FileDatabaseSettings + { + public required string VaultPath { get; set; } + } +} \ No newline at end of file diff --git a/DeepDrftContent/Startup.cs b/DeepDrftContent/Startup.cs new file mode 100644 index 0000000..2635f11 --- /dev/null +++ b/DeepDrftContent/Startup.cs @@ -0,0 +1,18 @@ +using DeepDrftContent.Models; + +namespace DeepDrftContent +{ + public static class Startup + { + public static void ConfigureDomainServices(WebApplicationBuilder builder) + { + // File Database + builder.Configuration.AddJsonFile("environment/filedatabase.json", optional: false, reloadOnChange: true); + var fileDatabaseSettings = builder.Configuration.GetSection(nameof(FileDatabaseSettings)).Get(); + if (fileDatabaseSettings is null) { throw new Exception("File database settings are not configured"); } + builder.Services.AddSingleton( + FileDatabase.Services.FileDatabase.FromAsync( + fileDatabaseSettings.VaultPath)); + } + } +} \ No newline at end of file