using System.Net; using System.Net.Http.Json; using System.Text.Json; using EnvelopeGenerator.ReceiverUI.Models; using EnvelopeGenerator.ReceiverUI.Options; using Microsoft.Extensions.Options; namespace EnvelopeGenerator.ReceiverUI.Services; /// /// Retrieves the for the authenticated receiver /// from GET api/EnvelopeReceiver/{envelopeKey}. /// public class EnvelopeReceiverService(HttpClient http, IOptions apiOptions) { private static readonly JsonSerializerOptions _jsonOptions = new(JsonSerializerDefaults.Web); /// /// Fetches the envelope receiver data for the given envelope key from the API. /// Throws HttpRequestException on failure with appropriate status code. /// /// Thrown when the API request fails. public async Task GetAsync(string envelopeKey, CancellationToken cancel = default) { var url = $"{apiOptions.Value.BaseUrl}/api/EnvelopeReceiver/{Uri.EscapeDataString(envelopeKey)}"; var response = await http.GetAsync(url, cancel); if (!response.IsSuccessStatusCode) { var statusCode = (int)response.StatusCode; var reasonPhrase = response.ReasonPhrase ?? "Unknown error"; throw new HttpRequestException( $"Failed to load envelope receiver data. Status: {statusCode} ({reasonPhrase})", null, response.StatusCode); } return await response.Content.ReadFromJsonAsync(_jsonOptions, cancel); } }