using System.Net; using System.Net.Http; using Microsoft.Extensions.Options; using EnvelopeGenerator.Server.Client.Options; namespace EnvelopeGenerator.Server.Client.Services; public class DocumentService(IHttpClientFactory httpClientFactory, 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) { using var http = httpClientFactory.CreateClient("EnvelopeGenerator.Server"); var response = await http.GetAsync($"/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; } }