Changes
This commit is contained in:
@@ -8,14 +8,12 @@ namespace Musify.Application.Configuration
|
|||||||
public static void AddPlayListConfiguration(this IServiceCollection serviceDescriptors, IConfiguration configuration)
|
public static void AddPlayListConfiguration(this IServiceCollection serviceDescriptors, IConfiguration configuration)
|
||||||
{
|
{
|
||||||
var playListConfiguration = PlayListConfiguration.Load(configuration);
|
var playListConfiguration = PlayListConfiguration.Load(configuration);
|
||||||
|
|
||||||
serviceDescriptors.AddSingleton(playListConfiguration);
|
serviceDescriptors.AddSingleton(playListConfiguration);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void AddStorageConfiguration(this IServiceCollection serviceDescriptors, IConfiguration configuration)
|
public static void AddStorageConfiguration(this IServiceCollection serviceDescriptors, IConfiguration configuration)
|
||||||
{
|
{
|
||||||
var storageConfiguration = StorageConfiguration.Load(configuration);
|
var storageConfiguration = StorageConfiguration.Load(configuration);
|
||||||
|
|
||||||
serviceDescriptors.AddSingleton(storageConfiguration);
|
serviceDescriptors.AddSingleton(storageConfiguration);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ namespace Musify.Application.Configuration
|
|||||||
?? throw new InvalidOperationException($"{SectionName} configuration section not found.");
|
?? throw new InvalidOperationException($"{SectionName} configuration section not found.");
|
||||||
|
|
||||||
Validate(section);
|
Validate(section);
|
||||||
|
|
||||||
return section;
|
return section;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ namespace Musify.Application.Configuration
|
|||||||
?? throw new InvalidOperationException($"{SectionName} configuration section not found.");
|
?? throw new InvalidOperationException($"{SectionName} configuration section not found.");
|
||||||
|
|
||||||
Validate(section);
|
Validate(section);
|
||||||
|
|
||||||
return 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
-2
@@ -1,6 +1,6 @@
|
|||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
|
|
||||||
namespace Musify.Infrastructure.Identity
|
namespace Musify.Infrastructure.Configuration
|
||||||
{
|
{
|
||||||
public class KeycloakConfiguration
|
public class KeycloakConfiguration
|
||||||
{
|
{
|
||||||
@@ -20,7 +20,6 @@ namespace Musify.Infrastructure.Identity
|
|||||||
?? throw new InvalidOperationException($"{SectionName} configuration section not found.");
|
?? throw new InvalidOperationException($"{SectionName} configuration section not found.");
|
||||||
|
|
||||||
Validate(keycloakConfiguration);
|
Validate(keycloakConfiguration);
|
||||||
|
|
||||||
return keycloakConfiguration;
|
return keycloakConfiguration;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Musify.Application.Contracts.Infrastructure;
|
using Musify.Application.Contracts.Infrastructure;
|
||||||
|
using Musify.Infrastructure.Configuration;
|
||||||
|
|
||||||
namespace Musify.Infrastructure.Identity
|
namespace Musify.Infrastructure.Identity
|
||||||
{
|
{
|
||||||
@@ -9,9 +10,7 @@ namespace Musify.Infrastructure.Identity
|
|||||||
public static void AddKeycloakAuthentication(this IServiceCollection serviceDescriptors, IConfiguration configuration)
|
public static void AddKeycloakAuthentication(this IServiceCollection serviceDescriptors, IConfiguration configuration)
|
||||||
{
|
{
|
||||||
var keycloakConfiguration = KeycloakConfiguration.Load(configuration);
|
var keycloakConfiguration = KeycloakConfiguration.Load(configuration);
|
||||||
|
|
||||||
serviceDescriptors.AddSingleton(keycloakConfiguration);
|
serviceDescriptors.AddSingleton(keycloakConfiguration);
|
||||||
|
|
||||||
serviceDescriptors.AddScoped<IKeycloakUserClient, KeycloakIdentityService>();
|
serviceDescriptors.AddScoped<IKeycloakUserClient, KeycloakIdentityService>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ using Keycloak.Net.Models.Users;
|
|||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Musify.Application.Contracts.Infrastructure;
|
using Musify.Application.Contracts.Infrastructure;
|
||||||
using Musify.Application.Users.Contracts;
|
using Musify.Application.Users.Contracts;
|
||||||
|
using Musify.Infrastructure.Configuration;
|
||||||
|
|
||||||
namespace Musify.Infrastructure.Identity
|
namespace Musify.Infrastructure.Identity
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,12 +1,18 @@
|
|||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Musify.Application.Contracts.Infrastructure;
|
using Musify.Application.Contracts.Infrastructure;
|
||||||
using Musify.Domain.Entities;
|
using Musify.Domain.Entities;
|
||||||
|
using Musify.Infrastructure.Configuration;
|
||||||
|
|
||||||
namespace Musify.Infrastructure.Persistence
|
namespace Musify.Infrastructure.Persistence
|
||||||
{
|
{
|
||||||
public class Database(DbContextOptions<Database> dbContextOptions)
|
public class Database(DatabaseConfiguration configuration)
|
||||||
: DbContext(dbContextOptions), IDatabase
|
: DbContext, IDatabase
|
||||||
{
|
{
|
||||||
|
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||||
|
{
|
||||||
|
optionsBuilder.UseNpgsql(configuration.ConnectionString);
|
||||||
|
}
|
||||||
|
|
||||||
public DbSet<User> Users => Set<User>();
|
public DbSet<User> Users => Set<User>();
|
||||||
|
|
||||||
public DbSet<Track> Tracks => Set<Track>();
|
public DbSet<Track> Tracks => Set<Track>();
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Design;
|
using Microsoft.EntityFrameworkCore.Design;
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
|
using Musify.Infrastructure.Configuration;
|
||||||
|
|
||||||
namespace Musify.Infrastructure.Persistence
|
namespace Musify.Infrastructure.Persistence
|
||||||
{
|
{
|
||||||
@@ -12,12 +13,15 @@ namespace Musify.Infrastructure.Persistence
|
|||||||
.SetBasePath(Directory.GetCurrentDirectory())
|
.SetBasePath(Directory.GetCurrentDirectory())
|
||||||
.AddJsonFile("AppSettings.json")
|
.AddJsonFile("AppSettings.json")
|
||||||
.Build();
|
.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>();
|
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 =>
|
serviceDescriptors.AddScoped<IAmazonS3>(serviceProvider =>
|
||||||
{
|
{
|
||||||
var configuration = serviceProvider.GetRequiredService<StorageConfiguration>();
|
var configuration = serviceProvider.GetRequiredService<StorageConfiguration>();
|
||||||
|
|
||||||
var s3Configuration = new AmazonS3Config
|
var s3Configuration = new AmazonS3Config
|
||||||
{
|
{
|
||||||
ServiceURL = configuration.ServiceUrl,
|
ServiceURL = configuration.ServiceUrl,
|
||||||
ForcePathStyle = configuration.ForcePathStyle,
|
ForcePathStyle = configuration.ForcePathStyle,
|
||||||
UseHttp = configuration.UseHttp,
|
UseHttp = configuration.UseHttp,
|
||||||
};
|
};
|
||||||
|
|
||||||
return new AmazonS3Client(configuration.AccessKey, configuration.SecretAccessKey, s3Configuration);
|
return new AmazonS3Client(configuration.AccessKey, configuration.SecretAccessKey, s3Configuration);
|
||||||
} );
|
} );
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user