using System.Net; using System.Net.Http; namespace EnvelopeGenerator.Server.Client.Services; public class DocumentService(IHttpClientFactory httpClientFactory) { /// /// 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; } }