diff --git a/Application/Application.csproj b/Application/Application.csproj index d1a1586..28753c1 100644 --- a/Application/Application.csproj +++ b/Application/Application.csproj @@ -12,6 +12,8 @@ + + diff --git a/Application/Configuration/PlayListConfiguration.cs b/Application/Configuration/PlayListConfiguration.cs index fea1cf7..e0360c0 100644 --- a/Application/Configuration/PlayListConfiguration.cs +++ b/Application/Configuration/PlayListConfiguration.cs @@ -1,7 +1,11 @@ -namespace Musify.Application.Configuration +using Microsoft.Extensions.Configuration; + +namespace Musify.Application.Configuration { public class PlayListConfiguration { + public const string SectionName = "PlayListConfiguration"; + public PlayListRoutes Routes { get; set; } = new PlayListRoutes(); public int SmallPictureWidth { get; set; } = 128; @@ -15,6 +19,43 @@ public int LargePictureWidth { get; private set; } = 512; public int LargePictureHeight { get; private set; } = 512; + + public PlayListConfiguration Load(IConfiguration configuration) + { + var section = configuration.GetSection(SectionName).Get() + ?? throw new InvalidOperationException($"{SectionName} configuration section not found."); + + Validate(); + + return section; + } + + void Validate() + { + EnsureValue(Routes.ParentFolder, $"{SectionName}:BucketName"); + EnsureValue(Routes.SmallPictures, $"{SectionName}:Routes:SmallPictures"); + EnsureValue(Routes.MediumPictures, $"{SectionName}:Routes:MediumPictures"); + EnsureValue(Routes.LargePictures, $"{SectionName}:Routes:LargePictures"); + + EnsurePositiveValue(SmallPictureWidth, $"{SectionName}:SmallPictureWidth"); + EnsurePositiveValue(SmallPictureHeight, $"{SectionName}:SmallPictureHeight"); + EnsurePositiveValue(MediumPictureWidth, $"{SectionName}:MediumPictureWidth"); + EnsurePositiveValue(MediumPictureHeight, $"{SectionName}:MediumPictureHeight"); + EnsurePositiveValue(LargePictureWidth, $"{SectionName}:LargePictureWidth"); + EnsurePositiveValue(LargePictureHeight, $"{SectionName}:LargePictureHeight"); + } + + void EnsureValue(string value, string name) + { + if (string.IsNullOrEmpty(value)) + throw new InvalidOperationException($"{name} configuration value not found."); + } + + void EnsurePositiveValue(int value, string name) + { + if (value < 1) + throw new InvalidOperationException($"{name} configuration value must be a positive integer."); + } } public class PlayListRoutes diff --git a/Application/Configuration/StorageConfiguration.cs b/Application/Configuration/StorageConfiguration.cs index 8cf6c49..e18b5de 100644 --- a/Application/Configuration/StorageConfiguration.cs +++ b/Application/Configuration/StorageConfiguration.cs @@ -1,10 +1,36 @@ -namespace Musify.Application.Configuration +using Microsoft.Extensions.Configuration; + +namespace Musify.Application.Configuration { public class StorageConfiguration { + public const string SectionName = "Storage"; + public string BucketName { get; set; } = "musify-S3"; public StorageRoutes Routes { get; set; } = new StorageRoutes(); + + public StorageConfiguration Load(IConfiguration configuration) + { + var section = configuration.GetSection(SectionName).Get() + ?? throw new InvalidOperationException($"{SectionName} configuration section not found."); + + Validate(); + + return section; + } + + void Validate() + { + EnsureValue(BucketName, nameof(BucketName)); + EnsureValue(Routes.Uploads, $"{SectionName}:Route:Upload"); + } + + void EnsureValue(string value, string name) + { + if (string.IsNullOrEmpty(value)) + throw new InvalidOperationException($"{name} configuration value not found."); + } } public class StorageRoutes