using System.Net; using System.Net.Http; using Microsoft.Extensions.Options; using EnvelopeGenerator.ReceiverUI.Options; namespace EnvelopeGenerator.ReceiverUI.Services; public class DocumentService(HttpClient http, IOptions apiOptions) { private readonly ApiOptions _api = apiOptions.Value; /// /// Fetches the PDF bytes 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 GetDocumentAsync(string envelopeKey, CancellationToken cancel = default) { var response = await http.GetAsync($"{_api.BaseUrl}/api/Document/{Uri.EscapeDataString(envelopeKey)}", cancel); if (!response.IsSuccessStatusCode) { var statusCode = (int)response.StatusCode; var reasonPhrase = response.ReasonPhrase ?? "Unknown error"; throw new HttpRequestException( $"Failed to load document. Status: {statusCode} ({reasonPhrase})", null, response.StatusCode); } var bytes = await response.Content.ReadAsByteArrayAsync(cancel); return bytes; } }