public Task Handle(InvestmentsRequest request, Exception exception, RequestExceptionHandlerState <Response <InvestmentsResponse> > state, CancellationToken cancellationToken) { var response = new Response <InvestmentsResponse>("Error getting Portfolio", new Notification(exception.Source, $"{Error().Message}: {exception.Message}"), Error().StatusCode); state.SetHandled(response); _tracer.ActiveSpan.SetTag("error", true); _tracer.ActiveSpan.SetTag("statusCode", (int)Error().StatusCode); return(Task.CompletedTask); (string Message, HttpStatusCode StatusCode) Error() => exception.Source == "Refit" ? ("Error on External API", state.Response?.StatusCode ?? HttpStatusCode.BadRequest) : (exception.GetType().Name, HttpStatusCode.InternalServerError); }
public async Task <Response <InvestmentsResponse> > Handle(InvestmentsRequest request, CancellationToken cancellationToken) { var responseCache = await _cache.GetAsync(CacheKeys.Portfolio, cancellationToken); if (responseCache is null) { _tracer.ActiveSpan.SetTag("cache", false); var investmentResponse = await _portfolio.GetAsync(); _ = _cache.SetAsync(CacheKeys.Portfolio, JsonSerializer.SerializeToUtf8Bytes(investmentResponse), DateTime.Now.UntilMidnight(), cancellationToken); return(new Response <InvestmentsResponse>(investmentResponse)); } else { _tracer.ActiveSpan.SetTag("cache", true); var investmentResponse = JsonSerializer.Deserialize <InvestmentsResponse>(new ReadOnlySpan <byte>(responseCache)); return(new Response <InvestmentsResponse>(investmentResponse)); } }