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