2024-04-18 01:44:37 +02:00
using System ;
2025-05-18 14:06:25 +02:00
using System.Diagnostics.CodeAnalysis ;
2024-04-18 01:44:37 +02:00
using System.Net.Http ;
2024-08-11 23:58:54 +02:00
using System.Text.Json ;
2024-04-18 01:44:37 +02:00
using System.Threading ;
using System.Threading.Tasks ;
using Wino.Core.Domain.Interfaces ;
2025-02-16 11:54:23 +01:00
namespace Wino.Core.Requests.Bundles ;
public record HttpRequestBundle < TRequest > ( TRequest NativeRequest , IUIChangeRequest UIChangeRequest , IRequestBase Request = null ) : IRequestBundle < TRequest >
2024-04-18 01:44:37 +02:00
{
2025-02-16 11:54:23 +01:00
public string BundleId { get ; set ; } = string . Empty ;
}
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
/// <summary>
/// Bundle that encapsulates batch request and native request with response.
/// </summary>
/// <typeparam name="TRequest">Http type for each integrator. eg. ClientServiceRequest for Gmail and RequestInformation for Microsoft Graph.</typeparam>
/// <param name="NativeRequest">Native type to send via http.</param>
/// <param name="BatchRequest">Batch request that is generated by base synchronizer.</param>
public record HttpRequestBundle < TRequest , TResponse > ( TRequest NativeRequest , IRequestBase Request ) : HttpRequestBundle < TRequest > ( NativeRequest , Request )
{
2025-05-18 14:06:25 +02:00
[RequiresDynamicCode("AOT")]
[RequiresUnreferencedCode("AOT")]
2025-02-16 11:54:23 +01:00
public async Task < TResponse > DeserializeBundleAsync ( HttpResponseMessage httpResponse , CancellationToken cancellationToken = default )
2024-04-18 01:44:37 +02:00
{
2025-02-16 11:54:23 +01:00
var content = await httpResponse . Content . ReadAsStringAsync ( ) . ConfigureAwait ( false ) ;
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
return JsonSerializer . Deserialize < TResponse > ( content ) ? ? throw new InvalidOperationException ( "Invalid Http Response Deserialization" ) ;
2024-04-18 01:44:37 +02:00
}
}