11using Microsoft . Extensions . Logging ;
2- using Microsoft . Extensions . Options ;
32using Newtonsoft . Json ;
43using StackExchange . Redis ;
54using System . Collections . Generic ;
@@ -10,40 +9,33 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API.Model
109{
1110 public class RedisBasketRepository : IBasketRepository
1211 {
13- private ILogger < RedisBasketRepository > _logger ;
14- private BasketSettings _settings ;
12+ private readonly ILogger < RedisBasketRepository > _logger ;
1513
16- private ConnectionMultiplexer _redis ;
14+ private readonly ConnectionMultiplexer _redis ;
15+ private readonly IDatabase _database ;
1716
18- public RedisBasketRepository ( IOptionsSnapshot < BasketSettings > options , ILoggerFactory loggerFactory )
17+ public RedisBasketRepository ( ILoggerFactory loggerFactory , ConnectionMultiplexer redis )
1918 {
20- _settings = options . Value ;
2119 _logger = loggerFactory . CreateLogger < RedisBasketRepository > ( ) ;
20+ _redis = redis ;
21+ _database = redis . GetDatabase ( ) ;
2222 }
2323
2424 public async Task < bool > DeleteBasketAsync ( string id )
2525 {
26- var database = await GetDatabase ( ) ;
27- return await database . KeyDeleteAsync ( id . ToString ( ) ) ;
26+ return await _database . KeyDeleteAsync ( id ) ;
2827 }
2928
30- public async Task < IEnumerable < string > > GetUsersAsync ( )
29+ public IEnumerable < string > GetUsers ( )
3130 {
32- var server = await GetServer ( ) ;
33-
34- IEnumerable < RedisKey > data = server . Keys ( ) ;
35- if ( data == null )
36- {
37- return null ;
38- }
39- return data . Select ( k => k . ToString ( ) ) ;
31+ var server = GetServer ( ) ;
32+ var data = server . Keys ( ) ;
33+ return data ? . Select ( k => k . ToString ( ) ) ;
4034 }
4135
4236 public async Task < CustomerBasket > GetBasketAsync ( string customerId )
4337 {
44- var database = await GetDatabase ( ) ;
45-
46- var data = await database . StringGetAsync ( customerId . ToString ( ) ) ;
38+ var data = await _database . StringGetAsync ( customerId ) ;
4739 if ( data . IsNullOrEmpty )
4840 {
4941 return null ;
@@ -54,9 +46,7 @@ public async Task<CustomerBasket> GetBasketAsync(string customerId)
5446
5547 public async Task < CustomerBasket > UpdateBasketAsync ( CustomerBasket basket )
5648 {
57- var database = await GetDatabase ( ) ;
58-
59- var created = await database . StringSetAsync ( basket . BuyerId , JsonConvert . SerializeObject ( basket ) ) ;
49+ var created = await _database . StringSetAsync ( basket . BuyerId , JsonConvert . SerializeObject ( basket ) ) ;
6050 if ( ! created )
6151 {
6252 _logger . LogInformation ( "Problem occur persisting the item." ) ;
@@ -68,34 +58,10 @@ public async Task<CustomerBasket> UpdateBasketAsync(CustomerBasket basket)
6858 return await GetBasketAsync ( basket . BuyerId ) ;
6959 }
7060
71- private async Task < IDatabase > GetDatabase ( )
72- {
73- if ( _redis == null )
74- {
75- await ConnectToRedisAsync ( ) ;
76- }
77-
78- return _redis . GetDatabase ( ) ;
79- }
80-
81- private async Task < IServer > GetServer ( )
61+ private IServer GetServer ( )
8262 {
83- if ( _redis == null )
84- {
85- await ConnectToRedisAsync ( ) ;
86- }
8763 var endpoint = _redis . GetEndPoints ( ) ;
88-
8964 return _redis . GetServer ( endpoint . First ( ) ) ;
9065 }
91-
92- private async Task ConnectToRedisAsync ( )
93- {
94- var configuration = ConfigurationOptions . Parse ( _settings . ConnectionString , true ) ;
95- configuration . ResolveDns = true ;
96-
97- _logger . LogInformation ( $ "Connecting to database { configuration . SslHost } .") ;
98- _redis = await ConnectionMultiplexer . ConnectAsync ( configuration ) ;
99- }
10066 }
10167}
0 commit comments