Add ResultApi for HTTP access to output result endpoints

Introduced the ResultApi class in the ReC.Client.Api namespace to provide asynchronous methods for retrieving, creating, updating, and deleting output results via HTTP. The class uses an injected HttpClient, supports cancellation tokens, and leverages helper methods for query construction and JSON serialization.
This commit is contained in:
2026-01-16 11:33:51 +01:00
parent 0fddf5669f
commit b639df0a39

View File

@@ -0,0 +1,74 @@
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
namespace ReC.Client.Api
{
/// <summary>
/// Provides access to output result endpoints.
/// </summary>
public class ResultApi
{
private readonly HttpClient _http;
/// <summary>
/// Initializes a new instance of the <see cref="ResultApi"/> class.
/// </summary>
/// <param name="http">The HTTP client used for requests.</param>
public ResultApi(HttpClient http)
{
_http = http;
}
/// <summary>
/// Retrieves results with optional filters.
/// </summary>
/// <param name="id">Optional result identifier.</param>
/// <param name="actionId">Optional action identifier.</param>
/// <param name="profileId">Optional profile identifier.</param>
/// <param name="cancel">A token to cancel the operation.</param>
/// <returns>The HTTP response message.</returns>
public Task<HttpResponseMessage> GetResultsAsync(long? id = null, long? actionId = null, long? profileId = null, CancellationToken cancel = default)
{
var query = ReCClientHelpers.BuildQuery(("Id", id), ("ActionId", actionId), ("ProfileId", profileId));
return _http.GetAsync($"api/OutRes{query}", cancel);
}
/// <summary>
/// Creates a result.
/// </summary>
/// <typeparam name="T">The payload type.</typeparam>
/// <param name="procedure">The payload to send.</param>
/// <param name="cancel">A token to cancel the operation.</param>
/// <returns>The HTTP response message.</returns>
public Task<HttpResponseMessage> CreateResultAsync<T>(T procedure, CancellationToken cancel = default)
=> _http.PostAsync("api/OutRes", ReCClientHelpers.ToJsonContent(procedure), cancel);
/// <summary>
/// Updates a result.
/// </summary>
/// <typeparam name="T">The payload type.</typeparam>
/// <param name="id">The result identifier.</param>
/// <param name="procedure">The payload to send.</param>
/// <param name="cancel">A token to cancel the operation.</param>
/// <returns>The HTTP response message.</returns>
public Task<HttpResponseMessage> UpdateResultAsync<T>(long id, T procedure, CancellationToken cancel = default)
=> _http.PutAsync($"api/OutRes/{id}", ReCClientHelpers.ToJsonContent(procedure), cancel);
/// <summary>
/// Deletes results.
/// </summary>
/// <typeparam name="T">The payload type containing identifiers.</typeparam>
/// <param name="procedure">The payload to send.</param>
/// <param name="cancel">A token to cancel the operation.</param>
/// <returns>The HTTP response message.</returns>
public Task<HttpResponseMessage> DeleteResultsAsync<T>(T procedure, CancellationToken cancel = default)
{
var request = new HttpRequestMessage(HttpMethod.Delete, "api/OutRes")
{
Content = ReCClientHelpers.ToJsonContent(procedure)
};
return _http.SendAsync(request, cancel);
}
}
}