Fix 8 design majors: optional ILogger in libraries, IndexFactoryService singleton threading, SharedMediaTypeRegistry, required TrackDto fields, GetExtensionType dedup, PagedResult zero-guard, TrackService null-return on failure

This commit is contained in:
Daniel Harvey
2026-05-17 16:57:03 -04:00
parent fc5b8de81a
commit 4bd3be2eb8
11 changed files with 99 additions and 68 deletions
@@ -3,12 +3,20 @@ using DeepDrftContent.Services.FileDatabase.Services;
namespace DeepDrftContent.Services.FileDatabase.Models;
/// <summary>
/// Shared media type registry instance — one allocation for all factory classes in this file.
/// </summary>
file static class SharedMediaTypeRegistry
{
internal static readonly IMediaTypeRegistry Instance = new SimpleMediaTypeRegistry();
}
/// <summary>
/// Type mappings for media vault types - simple dictionary-based approach
/// </summary>
public static class MediaVaultTypeMap
{
private static readonly IMediaTypeRegistry _registry = new SimpleMediaTypeRegistry();
private static readonly IMediaTypeRegistry _registry = SharedMediaTypeRegistry.Instance;
public static Type GetBinaryType(MediaVaultType vaultType) => _registry.GetBinaryType(vaultType);
@@ -55,7 +63,7 @@ public static class MetaDataFactory
return new AudioMetaData(entryKey, extension, duration, bitrate);
}
private static readonly IMediaTypeRegistry _metaDataRegistry = new SimpleMediaTypeRegistry();
private static readonly IMediaTypeRegistry _metaDataRegistry = SharedMediaTypeRegistry.Instance;
public static MetaData CreateFromMedia(MediaVaultType type, string entryKey, string extension, object media)
{
@@ -75,7 +83,7 @@ public static class MetaDataFactory
/// </summary>
public static class MediaParamsFactory
{
private static readonly IMediaTypeRegistry _registry = new SimpleMediaTypeRegistry();
private static readonly IMediaTypeRegistry _registry = SharedMediaTypeRegistry.Instance;
public static object Create(MediaVaultType type, FileBinary fileBinary, MetaData metaData)
{
@@ -94,7 +102,7 @@ public static class MediaParamsFactory
/// </summary>
public static class FileBinaryFactory
{
private static readonly IMediaTypeRegistry _registry = new SimpleMediaTypeRegistry();
private static readonly IMediaTypeRegistry _registry = SharedMediaTypeRegistry.Instance;
public static object Create(MediaVaultType vaultType, object parameters)
{
@@ -124,7 +132,7 @@ public static class FileBinaryFactory
/// </summary>
public static class FileBinaryDtoFactory
{
private static readonly IMediaTypeRegistry _registry = new SimpleMediaTypeRegistry();
private static readonly IMediaTypeRegistry _registry = SharedMediaTypeRegistry.Instance;
public static object From(MediaVaultType type, object mediaBinary)
{
@@ -68,7 +68,7 @@ public class MediaBinary : FileBinary
return new MediaBinary(new MediaBinaryParams(buffer, dto.Size, extension));
}
private static string GetExtensionType(string mime)
protected static string GetExtensionType(string mime)
{
return MimeTypeExtensions.GetExtension(mime);
}
@@ -116,11 +116,6 @@ public class ImageBinary : MediaBinary
var extension = GetExtensionType(dto.Mime);
return new ImageBinary(new ImageBinaryParams(buffer, dto.Size, extension, dto.AspectRatio));
}
private static string GetExtensionType(string mime)
{
return MimeTypeExtensions.GetExtension(mime);
}
}
/// <summary>
@@ -171,11 +166,6 @@ public class AudioBinary : MediaBinary
var extension = GetExtensionType(dto.Mime);
return new AudioBinary(new AudioBinaryParams(buffer, dto.Size, extension, dto.Duration, dto.Bitrate));
}
private static string GetExtensionType(string mime)
{
return MimeTypeExtensions.GetExtension(mime);
}
}
/// <summary>