This commit is contained in:
2026-03-18 18:59:41 +01:00
parent e28532a1d9
commit b77b56859e
11 changed files with 69 additions and 15 deletions
@@ -8,14 +8,12 @@ namespace Musify.Application.Configuration
public static void AddPlayListConfiguration(this IServiceCollection serviceDescriptors, IConfiguration configuration)
{
var playListConfiguration = PlayListConfiguration.Load(configuration);
serviceDescriptors.AddSingleton(playListConfiguration);
}
public static void AddStorageConfiguration(this IServiceCollection serviceDescriptors, IConfiguration configuration)
{
var storageConfiguration = StorageConfiguration.Load(configuration);
serviceDescriptors.AddSingleton(storageConfiguration);
}
}
@@ -26,7 +26,6 @@ namespace Musify.Application.Configuration
?? throw new InvalidOperationException($"{SectionName} configuration section not found.");
Validate(section);
return section;
}
@@ -26,7 +26,6 @@ namespace Musify.Application.Configuration
?? throw new InvalidOperationException($"{SectionName} configuration section not found.");
Validate(section);
return section;
}
@@ -0,0 +1,20 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace Musify.Infrastructure.Configuration
{
public static class ConfigurationDependencyInjection
{
public static void AddKeycloakConfiguration(this IServiceCollection serviceDescriptors, IConfiguration configuration)
{
var keycloakConfiguration = KeycloakConfiguration.Load(configuration);
serviceDescriptors.AddSingleton(keycloakConfiguration);
}
public static void AddDatabaseConfiguration(this IServiceCollection serviceDescriptors, IConfiguration configuration)
{
var databaseConfiguration = DatabaseConfiguration.Load(configuration);
serviceDescriptors.AddSingleton(databaseConfiguration);
}
}
}
@@ -0,0 +1,31 @@
using Microsoft.Extensions.Configuration;
namespace Musify.Infrastructure.Configuration
{
public class DatabaseConfiguration
{
public const string SectionName = "Database";
public string ConnectionString { get; set; } = string.Empty;
public static DatabaseConfiguration Load(IConfiguration configuration)
{
var databaseConfiguration = configuration.GetSection(SectionName).Get<DatabaseConfiguration>()
?? throw new InvalidOperationException($"{SectionName} configuration section not found.");
Validate(databaseConfiguration);
return databaseConfiguration;
}
static void Validate(DatabaseConfiguration configuration)
{
EnsureValue(configuration.ConnectionString, nameof(configuration.ConnectionString));
}
static void EnsureValue(string value, string name)
{
if (string.IsNullOrEmpty(value))
throw new InvalidOperationException($"{name} configuration value not found.");
}
}
}
@@ -1,6 +1,6 @@
using Microsoft.Extensions.Configuration;
namespace Musify.Infrastructure.Identity
namespace Musify.Infrastructure.Configuration
{
public class KeycloakConfiguration
{
@@ -20,7 +20,6 @@ namespace Musify.Infrastructure.Identity
?? throw new InvalidOperationException($"{SectionName} configuration section not found.");
Validate(keycloakConfiguration);
return keycloakConfiguration;
}
@@ -1,6 +1,7 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Musify.Application.Contracts.Infrastructure;
using Musify.Infrastructure.Configuration;
namespace Musify.Infrastructure.Identity
{
@@ -9,9 +10,7 @@ namespace Musify.Infrastructure.Identity
public static void AddKeycloakAuthentication(this IServiceCollection serviceDescriptors, IConfiguration configuration)
{
var keycloakConfiguration = KeycloakConfiguration.Load(configuration);
serviceDescriptors.AddSingleton(keycloakConfiguration);
serviceDescriptors.AddScoped<IKeycloakUserClient, KeycloakIdentityService>();
}
}
@@ -4,6 +4,7 @@ using Keycloak.Net.Models.Users;
using Microsoft.Extensions.Logging;
using Musify.Application.Contracts.Infrastructure;
using Musify.Application.Users.Contracts;
using Musify.Infrastructure.Configuration;
namespace Musify.Infrastructure.Identity
{
+8 -2
View File
@@ -1,12 +1,18 @@
using Microsoft.EntityFrameworkCore;
using Musify.Application.Contracts.Infrastructure;
using Musify.Domain.Entities;
using Musify.Infrastructure.Configuration;
namespace Musify.Infrastructure.Persistence
{
public class Database(DbContextOptions<Database> dbContextOptions)
: DbContext(dbContextOptions), IDatabase
public class Database(DatabaseConfiguration configuration)
: DbContext, IDatabase
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseNpgsql(configuration.ConnectionString);
}
public DbSet<User> Users => Set<User>();
public DbSet<Track> Tracks => Set<Track>();
@@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.Extensions.Configuration;
using Musify.Infrastructure.Configuration;
namespace Musify.Infrastructure.Persistence
{
@@ -12,12 +13,15 @@ namespace Musify.Infrastructure.Persistence
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("AppSettings.json")
.Build();
var connectionString = configuration.GetConnectionString("Default");
var databaseConfiguration = configuration.GetSection(DatabaseConfiguration.SectionName)
.Get<DatabaseConfiguration>()
?? throw new InvalidOperationException($"Failed to load {DatabaseConfiguration.SectionName} configuration.");
var optionsBuilder = new DbContextOptionsBuilder<Database>();
optionsBuilder.UseNpgsql(connectionString);
optionsBuilder.UseNpgsql(databaseConfiguration.ConnectionString);
return new Database(optionsBuilder.Options);
return new Database(databaseConfiguration);
}
}
}
@@ -12,14 +12,12 @@ namespace Musify.Infrastructure.Storage
serviceDescriptors.AddScoped<IAmazonS3>(serviceProvider =>
{
var configuration = serviceProvider.GetRequiredService<StorageConfiguration>();
var s3Configuration = new AmazonS3Config
{
ServiceURL = configuration.ServiceUrl,
ForcePathStyle = configuration.ForcePathStyle,
UseHttp = configuration.UseHttp,
};
return new AmazonS3Client(configuration.AccessKey, configuration.SecretAccessKey, s3Configuration);
} );