diff --git a/src/Arius.Core/Facade/RepositoryOptions.cs b/src/Arius.Core/Facade/RepositoryOptions.cs index 836742cd..b8d25f32 100644 --- a/src/Arius.Core/Facade/RepositoryOptions.cs +++ b/src/Arius.Core/Facade/RepositoryOptions.cs @@ -1,5 +1,4 @@ -using System; -using Azure.Storage.Blobs; +using Azure.Storage.Blobs; namespace Arius.Core.Facade; diff --git a/src/Arius.Core/Facade/StorageAccountOptions.cs b/src/Arius.Core/Facade/StorageAccountOptions.cs index bb2880d8..8830601a 100644 --- a/src/Arius.Core/Facade/StorageAccountOptions.cs +++ b/src/Arius.Core/Facade/StorageAccountOptions.cs @@ -1,5 +1,4 @@ -using System; -using Arius.Core.Commands; +using Arius.Core.Commands; using Azure.Storage; using Azure.Storage.Blobs; @@ -39,6 +38,20 @@ public static BlobServiceClient GetBlobServiceClient(this StorageAccountOptions return new BlobServiceClient(new Uri($"https://{storageAccount.AccountName}.blob.core.windows.net/"), new StorageSharedKeyCredential(storageAccount.AccountName, storageAccount.AccountKey)); } + + public static BlobServiceClient GetBlobServiceClient(this StorageAccountOptions storageAccount, int maxRetries, TimeSpan networkTimeout) + { + var o = new BlobClientOptions + { + Retry = + { + MaxRetries = maxRetries, + NetworkTimeout = networkTimeout, + } + }; + + return GetBlobServiceClient(storageAccount, o); + } public static BlobServiceClient GetBlobServiceClient(this StorageAccountOptions storageAccount, BlobClientOptions options) { return new BlobServiceClient(new Uri($"https://{storageAccount.AccountName}.blob.core.windows.net/"), diff --git a/src/Arius.Core/GlobalUsings.cs b/src/Arius.Core/GlobalUsings.cs index c1e9aa7b..da8afb9f 100644 --- a/src/Arius.Core/GlobalUsings.cs +++ b/src/Arius.Core/GlobalUsings.cs @@ -1,3 +1,8 @@ // Global using directives -global using WouterVanRanst.Utils.Extensions; \ No newline at end of file +global using Microsoft.Extensions.Logging; +global using System; +global using System.Linq; +global using System.Threading.Tasks; +global using WouterVanRanst.Utils.Extensions; +global using System.Threading; \ No newline at end of file diff --git a/src/Arius.Core/Queries/ContainerNames/ContainerNamesQueryHandler.cs b/src/Arius.Core/Queries/ContainerNames/ContainerNamesQueryHandler.cs index 5722c1fc..8d3e546f 100644 --- a/src/Arius.Core/Queries/ContainerNames/ContainerNamesQueryHandler.cs +++ b/src/Arius.Core/Queries/ContainerNames/ContainerNamesQueryHandler.cs @@ -1,9 +1,5 @@ -using System; +using Arius.Core.Facade; using System.Collections.Generic; -using System.Linq; -using Arius.Core.Facade; -using Azure.Storage.Blobs; -using Microsoft.Extensions.Logging; namespace Arius.Core.Queries.ContainerNames; @@ -20,16 +16,7 @@ public ContainerNamesQueryHandler(ILogger logger, St protected override (QueryResultStatus Status, IAsyncEnumerable? Result) ExecuteImpl(ContainerNamesQuery queryOptions) { - var bco = new BlobClientOptions - { - Retry = - { - MaxRetries = queryOptions.MaxRetries, - NetworkTimeout = TimeSpan.FromSeconds(5), - } - }; - - var blobServiceClient = storageAccountOptions.GetBlobServiceClient(bco); + var blobServiceClient = storageAccountOptions.GetBlobServiceClient(queryOptions.MaxRetries, TimeSpan.FromSeconds(5)); return (QueryResultStatus.Success, blobServiceClient.GetBlobContainersAsync().Select(bci => bci.Name)); } diff --git a/src/Arius.Core/Queries/ContainerNames2/ContainerNamesQuery2.cs b/src/Arius.Core/Queries/ContainerNames2/ContainerNamesQuery2.cs index 4b14eea8..eb8393a2 100644 --- a/src/Arius.Core/Queries/ContainerNames2/ContainerNamesQuery2.cs +++ b/src/Arius.Core/Queries/ContainerNames2/ContainerNamesQuery2.cs @@ -1,10 +1,7 @@ using Arius.Core.Facade; using MediatR; -using Microsoft.Extensions.Logging; using System.Collections.Generic; using System.Runtime.CompilerServices; -using System.Threading; -using System.Threading.Tasks; namespace Arius.Core.Queries.ContainerNames2; @@ -15,23 +12,30 @@ public record ContainerNamesQuery2 : IRequest>, IStorag public required int MaxRetries { get; init; } } -public class ContainerNamesQueryHandler : IRequestHandler> +internal class ContainerNamesQuery2Handler : IRequestHandler> { - private readonly ILogger logger; + private readonly ILogger logger; - public ContainerNamesQueryHandler(ILogger logger) + public ContainerNamesQuery2Handler(ILogger logger) { this.logger = logger; } public async Task> Handle(ContainerNamesQuery2 request, CancellationToken cancellationToken) { - return GetContainerNamesAsync(cancellationToken); - } + return GetContainerNames(cancellationToken); - private async IAsyncEnumerable GetContainerNamesAsync([EnumeratorCancellation] CancellationToken cancellationToken) - { - yield return "a"; - yield return "b"; + + async IAsyncEnumerable GetContainerNames([EnumeratorCancellation] CancellationToken cancellationToken) + { + var sao = new StorageAccountOptions(request.AccountName, request.AccountKey); + + var bsc = sao.GetBlobServiceClient(request.MaxRetries, TimeSpan.FromSeconds(5)); + + await foreach (var container in bsc.GetBlobContainersAsync(cancellationToken: cancellationToken)) + { + yield return container.Name; + } + } } } \ No newline at end of file diff --git a/src/Arius.Core/Repositories/Repository.cs b/src/Arius.Core/Repositories/Repository.cs index e69fe3e3..75a0106b 100644 --- a/src/Arius.Core/Repositories/Repository.cs +++ b/src/Arius.Core/Repositories/Repository.cs @@ -1,10 +1,7 @@ -using System; -using System.Threading.Tasks; -using Arius.Core.Facade; +using Arius.Core.Facade; using Arius.Core.Models; using Arius.Core.Repositories.BlobRepository; using Arius.Core.Repositories.StateDb; -using Microsoft.Extensions.Logging; using PostSharp.Constraints; namespace Arius.Core.Repositories; diff --git a/src/Arius.Core/Repositories/RepositoryBuilder.cs b/src/Arius.Core/Repositories/RepositoryBuilder.cs index c5f9865a..aa5bc4da 100644 --- a/src/Arius.Core/Repositories/RepositoryBuilder.cs +++ b/src/Arius.Core/Repositories/RepositoryBuilder.cs @@ -1,10 +1,7 @@ -using System; -using System.Threading.Tasks; -using Arius.Core.Facade; +using Arius.Core.Facade; using Arius.Core.Repositories.BlobRepository; using Azure.Core; using Azure.Storage.Blobs; -using Microsoft.Extensions.Logging; namespace Arius.Core.Repositories; diff --git a/src/Arius.Web.Application/RepositoryOptionsService.cs b/src/Arius.Web.Application/RepositoryOptionsService.cs index 65f9bfff..30de2e6b 100644 --- a/src/Arius.Web.Application/RepositoryOptionsService.cs +++ b/src/Arius.Web.Application/RepositoryOptionsService.cs @@ -9,7 +9,9 @@ public class RepositoryOptionsService private readonly IRepositoryOptionsRepository repositoryOptionsRepository; private readonly IMediator mediator; - public RepositoryOptionsService(IRepositoryOptionsRepository repositoryOptionsRepository, IMediator mediator) + public RepositoryOptionsService( + IRepositoryOptionsRepository repositoryOptionsRepository, + IMediator mediator) { this.repositoryOptionsRepository = repositoryOptionsRepository; this.mediator = mediator; @@ -29,6 +31,8 @@ public async Task AddRepositoryOptionsAsync(RepositoryOptions config) var r = await mediator.Send(q); + var rr = await r.ToListAsync(); + await repositoryOptionsRepository.AddAsync(config); }