Merge pull request #2123 from eerhardt/FixRedisBasketRepository
Cache JsonSerializerOptions
This commit is contained in:
		
						commit
						c7c2d1ca2f
					
				| @ -23,9 +23,6 @@ public class OrderApiClient : IOrderApiClient | ||||
| 
 | ||||
|         var ordersDraftResponse = await response.Content.ReadAsStringAsync(); | ||||
| 
 | ||||
|         return JsonSerializer.Deserialize<OrderData>(ordersDraftResponse, new JsonSerializerOptions | ||||
|         { | ||||
|             PropertyNameCaseInsensitive = true | ||||
|         }); | ||||
|         return JsonSerializer.Deserialize<OrderData>(ordersDraftResponse, JsonDefaults.CaseInsensitiveOptions); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -23,9 +23,6 @@ public class OrderApiClient : IOrderApiClient | ||||
| 
 | ||||
|         var ordersDraftResponse = await response.Content.ReadAsStringAsync(); | ||||
| 
 | ||||
|         return JsonSerializer.Deserialize<OrderData>(ordersDraftResponse, new JsonSerializerOptions | ||||
|         { | ||||
|             PropertyNameCaseInsensitive = true | ||||
|         }); | ||||
|         return JsonSerializer.Deserialize<OrderData>(ordersDraftResponse, JsonDefaults.CaseInsensitiveOptions); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -5,6 +5,9 @@ public class EventBusRabbitMQ : IEventBus, IDisposable | ||||
| { | ||||
|     const string BROKER_NAME = "eshop_event_bus"; | ||||
| 
 | ||||
|     private static readonly JsonSerializerOptions s_indentedOptions = new() { WriteIndented = true }; | ||||
|     private static readonly JsonSerializerOptions s_caseInsensitiveOptions = new() { PropertyNameCaseInsensitive = true }; | ||||
| 
 | ||||
|     private readonly IRabbitMQPersistentConnection _persistentConnection; | ||||
|     private readonly ILogger<EventBusRabbitMQ> _logger; | ||||
|     private readonly IEventBusSubscriptionsManager _subsManager; | ||||
| @ -69,10 +72,7 @@ public class EventBusRabbitMQ : IEventBus, IDisposable | ||||
| 
 | ||||
|         channel.ExchangeDeclare(exchange: BROKER_NAME, type: "direct"); | ||||
| 
 | ||||
|         var body = JsonSerializer.SerializeToUtf8Bytes(@event, @event.GetType(), new JsonSerializerOptions | ||||
|         { | ||||
|             WriteIndented = true | ||||
|         }); | ||||
|         var body = JsonSerializer.SerializeToUtf8Bytes(@event, @event.GetType(), s_indentedOptions); | ||||
| 
 | ||||
|         policy.Execute(() => | ||||
|         { | ||||
| @ -256,7 +256,7 @@ public class EventBusRabbitMQ : IEventBus, IDisposable | ||||
|                     var handler = scope.ServiceProvider.GetService(subscription.HandlerType); | ||||
|                     if (handler == null) continue; | ||||
|                     var eventType = _subsManager.GetEventTypeByName(eventName); | ||||
|                     var integrationEvent = JsonSerializer.Deserialize(message, eventType, new JsonSerializerOptions() { PropertyNameCaseInsensitive = true }); | ||||
|                     var integrationEvent = JsonSerializer.Deserialize(message, eventType, s_caseInsensitiveOptions); | ||||
|                     var concreteType = typeof(IIntegrationEventHandler<>).MakeGenericType(eventType); | ||||
| 
 | ||||
|                     await Task.Yield(); | ||||
|  | ||||
| @ -2,16 +2,16 @@ | ||||
| 
 | ||||
| public class IntegrationEventLogEntry | ||||
| { | ||||
|     private static readonly JsonSerializerOptions s_indentedOptions = new() { WriteIndented = true }; | ||||
|     private static readonly JsonSerializerOptions s_caseInsensitiveOptions = new() { PropertyNameCaseInsensitive = true }; | ||||
| 
 | ||||
|     private IntegrationEventLogEntry() { } | ||||
|     public IntegrationEventLogEntry(IntegrationEvent @event, Guid transactionId) | ||||
|     { | ||||
|         EventId = @event.Id; | ||||
|         CreationTime = @event.CreationDate; | ||||
|         EventTypeName = @event.GetType().FullName; | ||||
|         Content = JsonSerializer.Serialize(@event, @event.GetType(), new JsonSerializerOptions | ||||
|         { | ||||
|             WriteIndented = true | ||||
|         }); | ||||
|         Content = JsonSerializer.Serialize(@event, @event.GetType(), s_indentedOptions); | ||||
|         State = EventStateEnum.NotPublished; | ||||
|         TimesSent = 0; | ||||
|         TransactionId = transactionId.ToString(); | ||||
| @ -30,7 +30,7 @@ public class IntegrationEventLogEntry | ||||
| 
 | ||||
|     public IntegrationEventLogEntry DeserializeJsonContent(Type type) | ||||
|     { | ||||
|         IntegrationEvent = JsonSerializer.Deserialize(Content, type, new JsonSerializerOptions() { PropertyNameCaseInsensitive = true }) as IntegrationEvent; | ||||
|         IntegrationEvent = JsonSerializer.Deserialize(Content, type, s_caseInsensitiveOptions) as IntegrationEvent; | ||||
|         return this; | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -35,15 +35,12 @@ public class RedisBasketRepository : IBasketRepository | ||||
|             return null; | ||||
|         } | ||||
| 
 | ||||
|         return JsonSerializer.Deserialize<CustomerBasket>(data, new JsonSerializerOptions | ||||
|         { | ||||
|             PropertyNameCaseInsensitive = true | ||||
|         }); | ||||
|         return JsonSerializer.Deserialize<CustomerBasket>(data, JsonDefaults.CaseInsensitiveOptions); | ||||
|     } | ||||
| 
 | ||||
|     public async Task<CustomerBasket> UpdateBasketAsync(CustomerBasket basket) | ||||
|     { | ||||
|         var created = await _database.StringSetAsync(basket.BuyerId, JsonSerializer.Serialize(basket)); | ||||
|         var created = await _database.StringSetAsync(basket.BuyerId, JsonSerializer.Serialize(basket, JsonDefaults.CaseInsensitiveOptions)); | ||||
| 
 | ||||
|         if (!created) | ||||
|         { | ||||
| @ -51,7 +48,7 @@ public class RedisBasketRepository : IBasketRepository | ||||
|             return null; | ||||
|         } | ||||
| 
 | ||||
|         _logger.LogInformation("Basket item persisted succesfully."); | ||||
|         _logger.LogInformation("Basket item persisted successfully."); | ||||
| 
 | ||||
|         return await GetBasketAsync(basket.BuyerId); | ||||
|     } | ||||
|  | ||||
							
								
								
									
										11
									
								
								src/Services/Services.Common/JsonDefaults.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/Services/Services.Common/JsonDefaults.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | ||||
| using System.Text.Json; | ||||
| 
 | ||||
| namespace Services.Common; | ||||
| 
 | ||||
| public static class JsonDefaults | ||||
| { | ||||
|     public static readonly JsonSerializerOptions CaseInsensitiveOptions = new() | ||||
|     { | ||||
|         PropertyNameCaseInsensitive = true | ||||
|     }; | ||||
| } | ||||
| @ -29,10 +29,7 @@ public class BasketService : IBasketService | ||||
|         var responseString = await response.Content.ReadAsStringAsync(); | ||||
|         return string.IsNullOrEmpty(responseString) ? | ||||
|             new Basket() { BuyerId = user.Id } : | ||||
|             JsonSerializer.Deserialize<Basket>(responseString, new JsonSerializerOptions | ||||
|             { | ||||
|                 PropertyNameCaseInsensitive = true | ||||
|             }); | ||||
|             JsonSerializer.Deserialize<Basket>(responseString, JsonDefaults.CaseInsensitiveOptions); | ||||
|     } | ||||
| 
 | ||||
|     public async Task<Basket> UpdateBasket(Basket basket) | ||||
| @ -82,10 +79,7 @@ public class BasketService : IBasketService | ||||
| 
 | ||||
|         var jsonResponse = await response.Content.ReadAsStringAsync(); | ||||
| 
 | ||||
|         return JsonSerializer.Deserialize<Basket>(jsonResponse, new JsonSerializerOptions | ||||
|         { | ||||
|             PropertyNameCaseInsensitive = true | ||||
|         }); | ||||
|         return JsonSerializer.Deserialize<Basket>(jsonResponse, JsonDefaults.CaseInsensitiveOptions); | ||||
|     } | ||||
| 
 | ||||
|     public async Task<Order> GetOrderDraft(string basketId) | ||||
| @ -94,10 +88,7 @@ public class BasketService : IBasketService | ||||
| 
 | ||||
|         var responseString = await _apiClient.GetStringAsync(uri); | ||||
| 
 | ||||
|         var response = JsonSerializer.Deserialize<Order>(responseString, new JsonSerializerOptions | ||||
|         { | ||||
|             PropertyNameCaseInsensitive = true | ||||
|         }); | ||||
|         var response = JsonSerializer.Deserialize<Order>(responseString, JsonDefaults.CaseInsensitiveOptions); | ||||
| 
 | ||||
|         return response; | ||||
|     } | ||||
|  | ||||
| @ -23,10 +23,7 @@ public class CatalogService : ICatalogService | ||||
| 
 | ||||
|         var responseString = await _httpClient.GetStringAsync(uri); | ||||
| 
 | ||||
|         var catalog = JsonSerializer.Deserialize<Catalog>(responseString, new JsonSerializerOptions | ||||
|         { | ||||
|             PropertyNameCaseInsensitive = true | ||||
|         }); | ||||
|         var catalog = JsonSerializer.Deserialize<Catalog>(responseString, JsonDefaults.CaseInsensitiveOptions); | ||||
| 
 | ||||
|         return catalog; | ||||
|     } | ||||
|  | ||||
| @ -23,10 +23,7 @@ public class OrderingService : IOrderingService | ||||
| 
 | ||||
|         var responseString = await _httpClient.GetStringAsync(uri); | ||||
| 
 | ||||
|         var response = JsonSerializer.Deserialize<Order>(responseString, new JsonSerializerOptions | ||||
|         { | ||||
|             PropertyNameCaseInsensitive = true | ||||
|         }); | ||||
|         var response = JsonSerializer.Deserialize<Order>(responseString, JsonDefaults.CaseInsensitiveOptions); | ||||
| 
 | ||||
|         return response; | ||||
|     } | ||||
| @ -37,10 +34,7 @@ public class OrderingService : IOrderingService | ||||
| 
 | ||||
|         var responseString = await _httpClient.GetStringAsync(uri); | ||||
| 
 | ||||
|         var response = JsonSerializer.Deserialize<List<Order>>(responseString, new JsonSerializerOptions | ||||
|         { | ||||
|             PropertyNameCaseInsensitive = true | ||||
|         }); | ||||
|         var response = JsonSerializer.Deserialize<List<Order>>(responseString, JsonDefaults.CaseInsensitiveOptions); | ||||
| 
 | ||||
|         return response; | ||||
|     } | ||||
|  | ||||
| @ -14,10 +14,7 @@ public class WebhooksClient : IWebhooksClient | ||||
|         var client = _httpClientFactory.CreateClient("GrantClient"); | ||||
|         var response = await client.GetAsync(_options.WebhooksUrl + "/api/v1/webhooks"); | ||||
|         var json = await response.Content.ReadAsStringAsync(); | ||||
|         var subscriptions = JsonSerializer.Deserialize<IEnumerable<WebhookResponse>>(json, new JsonSerializerOptions | ||||
|         { | ||||
|             PropertyNameCaseInsensitive = true | ||||
|         }); | ||||
|         var subscriptions = JsonSerializer.Deserialize<IEnumerable<WebhookResponse>>(json, JsonDefaults.CaseInsensitiveOptions); | ||||
|         return subscriptions; | ||||
|     } | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user