Introduced a new feature for submitting signatures, including backend and frontend changes. Added `SignatureSubmitDto` and `SubmitAsync` in `SignatureService` to handle signature data submission. Implemented a new `Submit` endpoint in `SignatureController` to validate and process signature payloads. Updated pipeline behaviors to include `SaveSignatureBehavior` and adjusted the execution order. Enhanced query logic in `EnvelopeReceiverResolutionBehavior` and `SaveSignatureBehavior` to align with the updated data model. Refactored `EGDbContext` to improve trigger handling and logging. Updated `ReceiverSignedPage.razor` to integrate `SignatureService` and handle submission errors gracefully. Adjusted application URLs in `launchSettings.json` and added new database triggers in `appsettings.json`.
54 lines
2.1 KiB
C#
54 lines
2.1 KiB
C#
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<IReadOnlyList<SignatureDto>> 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<List<SignatureDto>>(_jsonOptions, cancel);
|
|
return result ?? [];
|
|
}
|
|
|
|
public async Task SubmitAsync(string envelopeKey, IEnumerable<SignatureSubmitDto> 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}");
|
|
}
|
|
}
|
|
}
|