diff --git a/src/Services/Basket/Basket.API/IntegrationEvents/EventHandling/ProductPriceChangedIntegrationEventHandler.cs b/src/Services/Basket/Basket.API/IntegrationEvents/EventHandling/ProductPriceChangedIntegrationEventHandler.cs index 88244404a..76a78bad7 100644 --- a/src/Services/Basket/Basket.API/IntegrationEvents/EventHandling/ProductPriceChangedIntegrationEventHandler.cs +++ b/src/Services/Basket/Basket.API/IntegrationEvents/EventHandling/ProductPriceChangedIntegrationEventHandler.cs @@ -18,7 +18,7 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API.IntegrationEvents.Even public async Task Handle(ProductPriceChangedIntegrationEvent @event) { - var userIds = await _repository.GetUsersAsync(); + var userIds = _repository.GetUsers(); foreach (var id in userIds) { diff --git a/src/Services/Basket/Basket.API/Model/IBasketRepository.cs b/src/Services/Basket/Basket.API/Model/IBasketRepository.cs index fcdc69faa..850b5b637 100644 --- a/src/Services/Basket/Basket.API/Model/IBasketRepository.cs +++ b/src/Services/Basket/Basket.API/Model/IBasketRepository.cs @@ -6,7 +6,7 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API.Model public interface IBasketRepository { Task GetBasketAsync(string customerId); - Task> GetUsersAsync(); + IEnumerable GetUsers(); Task UpdateBasketAsync(CustomerBasket basket); Task DeleteBasketAsync(string id); } diff --git a/src/Services/Basket/Basket.API/Model/RedisBasketRepository.cs b/src/Services/Basket/Basket.API/Model/RedisBasketRepository.cs index e896c0773..f748d2c25 100644 --- a/src/Services/Basket/Basket.API/Model/RedisBasketRepository.cs +++ b/src/Services/Basket/Basket.API/Model/RedisBasketRepository.cs @@ -1,5 +1,4 @@ using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Options; using Newtonsoft.Json; using StackExchange.Redis; using System.Collections.Generic; @@ -10,40 +9,33 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API.Model { public class RedisBasketRepository : IBasketRepository { - private ILogger _logger; - private BasketSettings _settings; + private readonly ILogger _logger; - private ConnectionMultiplexer _redis; + private readonly ConnectionMultiplexer _redis; + private readonly IDatabase _database; - public RedisBasketRepository(IOptionsSnapshot options, ILoggerFactory loggerFactory) + public RedisBasketRepository(ILoggerFactory loggerFactory, ConnectionMultiplexer redis) { - _settings = options.Value; _logger = loggerFactory.CreateLogger(); + _redis = redis; + _database = redis.GetDatabase(); } public async Task DeleteBasketAsync(string id) { - var database = await GetDatabase(); - return await database.KeyDeleteAsync(id.ToString()); + return await _database.KeyDeleteAsync(id); } - public async Task> GetUsersAsync() + public IEnumerable GetUsers() { - var server = await GetServer(); - - IEnumerable data = server.Keys(); - if (data == null) - { - return null; - } - return data.Select(k => k.ToString()); + var server = GetServer(); + var data = server.Keys(); + return data?.Select(k => k.ToString()); } public async Task GetBasketAsync(string customerId) { - var database = await GetDatabase(); - - var data = await database.StringGetAsync(customerId.ToString()); + var data = await _database.StringGetAsync(customerId); if (data.IsNullOrEmpty) { return null; @@ -54,9 +46,7 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API.Model public async Task UpdateBasketAsync(CustomerBasket basket) { - var database = await GetDatabase(); - - var created = await database.StringSetAsync(basket.BuyerId, JsonConvert.SerializeObject(basket)); + var created = await _database.StringSetAsync(basket.BuyerId, JsonConvert.SerializeObject(basket)); if (!created) { _logger.LogInformation("Problem occur persisting the item."); @@ -68,34 +58,10 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API.Model return await GetBasketAsync(basket.BuyerId); } - private async Task GetDatabase() - { - if (_redis == null) - { - await ConnectToRedisAsync(); - } - - return _redis.GetDatabase(); - } - - private async Task GetServer() + private IServer GetServer() { - if (_redis == null) - { - await ConnectToRedisAsync(); - } var endpoint = _redis.GetEndPoints(); - return _redis.GetServer(endpoint.First()); } - - private async Task ConnectToRedisAsync() - { - var configuration = ConfigurationOptions.Parse(_settings.ConnectionString, true); - configuration.ResolveDns = true; - - _logger.LogInformation($"Connecting to database {configuration.SslHost}."); - _redis = await ConnectionMultiplexer.ConnectAsync(configuration); - } } } diff --git a/test/Services/IntegrationTests/Services/Basket/RedisBasketRepositoryTests.cs b/test/Services/IntegrationTests/Services/Basket/RedisBasketRepositoryTests.cs index aa763e4bb..5bc9240e1 100644 --- a/test/Services/IntegrationTests/Services/Basket/RedisBasketRepositoryTests.cs +++ b/test/Services/IntegrationTests/Services/Basket/RedisBasketRepositoryTests.cs @@ -1,4 +1,6 @@  +using StackExchange.Redis; + namespace IntegrationTests.Services.Basket { using Microsoft.eShopOnContainers.Services.Basket.API; @@ -57,10 +59,9 @@ namespace IntegrationTests.Services.Basket RedisBasketRepository BuildBasketRepository() { var loggerFactory = new LoggerFactory(); - var basketSettings = new BasketSettings() { ConnectionString = "127.0.0.1" }; - _optionsMock.Setup(x => x.Value).Returns(basketSettings); - - return new RedisBasketRepository(_optionsMock.Object, loggerFactory); + var configuration = ConfigurationOptions.Parse("127.0.0.1", true); + configuration.ResolveDns = true; + return new RedisBasketRepository(loggerFactory, ConnectionMultiplexer.Connect(configuration)); } List BuildBasketItems()