using System; using System.Net.Http; using System.Text.Json; using System.Threading; using System.Threading.Tasks; using Wino.Core.Domain.Interfaces; namespace Wino.Core.Requests.Bundles { public record HttpRequestBundle(TRequest NativeRequest, IUIChangeRequest UIChangeRequest, IRequestBase Request = null) : IRequestBundle { public string BundleId { get; set; } = string.Empty; } /// /// Bundle that encapsulates batch request and native request with response. /// /// Http type for each integrator. eg. ClientServiceRequest for Gmail and RequestInformation for Microsoft Graph. /// Native type to send via http. /// Batch request that is generated by base synchronizer. public record HttpRequestBundle(TRequest NativeRequest, IRequestBase Request) : HttpRequestBundle(NativeRequest, Request) { public async Task DeserializeBundleAsync(HttpResponseMessage httpResponse, CancellationToken cancellationToken = default) { var content = await httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); return JsonSerializer.Deserialize(content) ?? throw new InvalidOperationException("Invalid Http Response Deserialization"); } } }