using System.Net.Http; using System.Net.Http.Json; using System.Text.Json; using EnvelopeGenerator.Application.Common.Dto; using EnvelopeGenerator.Server.Client.Models; namespace EnvelopeGenerator.Server.Client.Services; public class SignatureService(IHttpClientFactory httpClientFactory) { private static readonly JsonSerializerOptions _jsonOptions = new(JsonSerializerDefaults.Web); public async Task> GetAsync(string envelopeKey, CancellationToken cancel = default) { using var http = httpClientFactory.CreateClient("EnvelopeGenerator.Server"); var url = $"/api/Signature/{Uri.EscapeDataString(envelopeKey)}"; var response = await http.GetAsync(url, cancel); if (!response.IsSuccessStatusCode) throw new HttpRequestException($"Failed to retrieve signatures for envelope {envelopeKey}: {response.StatusCode} {response.ReasonPhrase}"); var result = await response.Content.ReadFromJsonAsync>(_jsonOptions, cancel); return result ?? []; } public async Task SubmitAsync(string envelopeKey, IEnumerable signatures, CancellationToken cancel = default) { using var http = httpClientFactory.CreateClient("EnvelopeGenerator.Server"); var payload = signatures .Select(signature => new Signature { Id = signature.Id, DataUrl = signature.DataUrl, FullName = signature.FullName, Position = signature.Position, Place = signature.Place }) .ToList(); var response = await http.PostAsJsonAsync( $"/api/Signature/submit/{Uri.EscapeDataString(envelopeKey)}", payload, cancel); if (!response.IsSuccessStatusCode) { var body = await response.Content.ReadAsStringAsync(cancel); throw new HttpRequestException( $"Failed to submit signature for envelope {envelopeKey}: {(int)response.StatusCode} {response.StatusCode} - {body}"); } } }