diff --git a/PostFundManagement.Domain/Extensions/Constants.cs b/PostFundManagement.Domain/Extensions/Constants.cs index dd57bd2..c16be94 100644 --- a/PostFundManagement.Domain/Extensions/Constants.cs +++ b/PostFundManagement.Domain/Extensions/Constants.cs @@ -8,11 +8,11 @@ public static class Constants public const string ContractS3SettingsSection = "ContractS3Settings"; - public const string GeneralQuotesBucketName = "pfm.general"; + public const string GeneralBucketName = "pfm.general"; - public const string EvidenceQuotesBucketName = "pfm.evidence"; + public const string EvidenceBucketName = "pfm.evidence"; - public const string ContractQuotesBucketName = "pfm.contract"; + public const string ContractBucketName = "pfm.contract"; public const string DatabaseConfigName = "PfmDatabase"; diff --git a/PostFundManagement.Domain/Extensions/S3.cs b/PostFundManagement.Domain/Extensions/S3.cs new file mode 100644 index 0000000..add63c4 --- /dev/null +++ b/PostFundManagement.Domain/Extensions/S3.cs @@ -0,0 +1,64 @@ +using PostFundManagement.Domain.Abstractions; +using PostFundManagement.Domain.Services; +using static PostFundManagement.Domain.Extensions.Constants; + +namespace PostFundManagement.Domain.Extensions; + +public static class S3 +{ + public static IServiceCollection AddGarageS3(this IServiceCollection services, IConfiguration configuration) + { + if (!string.IsNullOrWhiteSpace(configuration.GetSection($"{GeneralS3SettingsSection}:ServiceUrl").Value)) + { + services.AddKeyedSingleton(GeneralBucketName, (provider, client) => + new AmazonS3Client(new BasicAWSCredentials(configuration.GetSection($"{GeneralS3SettingsSection}:AccessKey").Value, + configuration.GetSection($"{GeneralS3SettingsSection}:SecretKey").Value), + new AmazonS3Config + { + ServiceURL = configuration.GetSection($"{GeneralS3SettingsSection}:ServiceUrl").Value, + AuthenticationRegion = configuration.GetSection($"{GeneralS3SettingsSection}:Region").Value, + ForcePathStyle = true, + EndpointDiscoveryEnabled = true, + UseHttp = configuration.GetSection($"{GeneralS3SettingsSection}:ServiceUrl").Value!.Contains("http://", StringComparison.InvariantCultureIgnoreCase), + })); + + services.AddKeyedScoped(GeneralBucketName); + } + + if (!string.IsNullOrWhiteSpace(configuration.GetSection($"{EvidenceS3SettingsSection}:ServiceUrl").Value)) + { + services.AddKeyedSingleton(EvidenceS3SettingsSection, (provider, client) => + new AmazonS3Client(new BasicAWSCredentials(configuration.GetSection($"{EvidenceS3SettingsSection}:AccessKey").Value, + configuration.GetSection($"{EvidenceS3SettingsSection}:SecretKey").Value), + new AmazonS3Config + { + ServiceURL = configuration.GetSection($"{EvidenceS3SettingsSection}:ServiceUrl").Value, + AuthenticationRegion = configuration.GetSection($"{EvidenceS3SettingsSection}:Region").Value, + ForcePathStyle = true, + EndpointDiscoveryEnabled = true, + UseHttp = configuration.GetSection($"{EvidenceS3SettingsSection}:ServiceUrl").Value!.Contains("http://", StringComparison.InvariantCultureIgnoreCase), + })); + + services.AddKeyedScoped(EvidenceS3SettingsSection); + } + + if (!string.IsNullOrWhiteSpace(configuration.GetSection($"{ContractS3SettingsSection}:ServiceUrl").Value)) + { + services.AddKeyedSingleton(ContractS3SettingsSection, (provider, client) => + new AmazonS3Client(new BasicAWSCredentials(configuration.GetSection($"{ContractS3SettingsSection}:AccessKey").Value, + configuration.GetSection($"{ContractS3SettingsSection}:SecretKey").Value), + new AmazonS3Config + { + ServiceURL = configuration.GetSection($"{ContractS3SettingsSection}:ServiceUrl").Value, + AuthenticationRegion = configuration.GetSection($"{ContractS3SettingsSection}:Region").Value, + ForcePathStyle = true, + EndpointDiscoveryEnabled = true, + UseHttp = configuration.GetSection($"{ContractS3SettingsSection}:ServiceUrl").Value!.Contains("http://", StringComparison.InvariantCultureIgnoreCase), + })); + + services.AddKeyedScoped(ContractS3SettingsSection); + } + + return services; + } +} \ No newline at end of file diff --git a/PostFundManagement.Domain/Services/ContractS3Service.cs b/PostFundManagement.Domain/Services/ContractS3Service.cs index b7f632b..481f37e 100644 --- a/PostFundManagement.Domain/Services/ContractS3Service.cs +++ b/PostFundManagement.Domain/Services/ContractS3Service.cs @@ -3,7 +3,7 @@ using static PostFundManagement.Domain.Extensions.Constants; namespace PostFundManagement.Domain.Services; -public sealed class ContractS3Service(IConfiguration configuration, [FromKeyedServices(ContractQuotesBucketName)] IAmazonS3 amazonS3) : +public sealed class ContractS3Service(IConfiguration configuration, [FromKeyedServices(ContractBucketName)] IAmazonS3 amazonS3) : S3ServiceBase(amazonS3), IS3Service { protected override string BucketName => configuration.GetSection($"{ContractS3SettingsSection}:BucketName").Value ?? ""; diff --git a/PostFundManagement.Domain/Services/EvidenceS3Service.cs b/PostFundManagement.Domain/Services/EvidenceS3Service.cs index 097715b..67de5ac 100644 --- a/PostFundManagement.Domain/Services/EvidenceS3Service.cs +++ b/PostFundManagement.Domain/Services/EvidenceS3Service.cs @@ -3,7 +3,7 @@ using static PostFundManagement.Domain.Extensions.Constants; namespace PostFundManagement.Domain.Services; -public sealed class EvidenceS3Service(IConfiguration configuration, [FromKeyedServices(EvidenceQuotesBucketName)] IAmazonS3 amazonS3) : +public sealed class EvidenceS3Service(IConfiguration configuration, [FromKeyedServices(EvidenceBucketName)] IAmazonS3 amazonS3) : S3ServiceBase(amazonS3), IS3Service { protected override string BucketName => configuration.GetSection($"{EvidenceS3SettingsSection}:BucketName").Value ?? ""; diff --git a/PostFundManagement.Domain/Services/GeneralS3Service.cs b/PostFundManagement.Domain/Services/GeneralS3Service.cs index 5b425df..79b0fb6 100644 --- a/PostFundManagement.Domain/Services/GeneralS3Service.cs +++ b/PostFundManagement.Domain/Services/GeneralS3Service.cs @@ -3,7 +3,7 @@ using static PostFundManagement.Domain.Extensions.Constants; namespace PostFundManagement.Domain.Services; -public sealed class GeneralS3Service(IConfiguration configuration, [FromKeyedServices(GeneralQuotesBucketName)] IAmazonS3 amazonS3) : +public sealed class GeneralS3Service(IConfiguration configuration, [FromKeyedServices(GeneralBucketName)] IAmazonS3 amazonS3) : S3ServiceBase(amazonS3), IS3Service { protected override string BucketName => configuration.GetSection($"{GeneralS3SettingsSection}:BucketName").Value ?? "";