Added `AnnotationDto` to represent signature annotation positions, including properties for ID, page, and coordinates, with detailed documentation on coordinate systems. Implemented `AnnotationService` to fetch annotation data from an API endpoint, using `HttpClient` and supporting cancellation tokens. Registered `AnnotationService` in the DI container to enable its use across the application. Provided development setup details for working with fake data via YARP-proxied routes.
33 lines
1.3 KiB
C#
33 lines
1.3 KiB
C#
using System.Net.Http.Json;
|
|
using System.Text.Json;
|
|
using EnvelopeGenerator.ReceiverUI.Models;
|
|
using EnvelopeGenerator.ReceiverUI.Options;
|
|
using Microsoft.Extensions.Options;
|
|
|
|
namespace EnvelopeGenerator.ReceiverUI.Services;
|
|
|
|
/// <summary>
|
|
/// Retrieves annotation positions from the API.
|
|
/// The URL is composed as <c>{BaseUrl}/api/Annotation/{envelopeKey}</c>.
|
|
/// During development, <c>BaseUrl</c> is empty so the request resolves to the
|
|
/// YARP-proxied route on the same origin, which currently serves
|
|
/// <c>fake-data/annotations.json</c>. To switch to real data, update the
|
|
/// YARP route in <c>yarp.json</c> — no code change required.
|
|
/// </summary>
|
|
public class AnnotationService(HttpClient http, IOptions<ApiOptions> apiOptions)
|
|
{
|
|
private static readonly JsonSerializerOptions _jsonOptions = new(JsonSerializerDefaults.Web);
|
|
|
|
public async Task<IReadOnlyList<AnnotationDto>> GetAnnotationsAsync(string envelopeKey, CancellationToken cancel = default)
|
|
{
|
|
var url = $"{apiOptions.Value.BaseUrl}/api/Annotation/{Uri.EscapeDataString(envelopeKey)}";
|
|
var response = await http.GetAsync(url, cancel);
|
|
|
|
if (!response.IsSuccessStatusCode)
|
|
return [];
|
|
|
|
var result = await response.Content.ReadFromJsonAsync<List<AnnotationDto>>(_jsonOptions, cancel);
|
|
return result ?? [];
|
|
}
|
|
}
|