Add RecActionApi client for RecAction endpoint operations

Introduced RecActionApi in ReC.Client.Api to provide a typed API client for RecAction endpoints. Includes methods for invoking, retrieving, creating, updating, and deleting Rec actions, with support for cancellation tokens and helper-based serialization. All methods are documented with XML comments.
This commit is contained in:
2026-01-16 11:33:36 +01:00
parent 9c46b9f2da
commit 0fddf5669f

View File

@@ -0,0 +1,85 @@
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
namespace ReC.Client.Api
{
/// <summary>
/// Provides access to RecAction endpoints.
/// </summary>
public class RecActionApi
{
private readonly HttpClient _http;
/// <summary>
/// Initializes a new instance of the <see cref="RecActionApi"/> class.
/// </summary>
/// <param name="http">The HTTP client used for requests.</param>
public RecActionApi(HttpClient http)
{
_http = http;
}
/// <summary>
/// Invokes a ReC action for the specified profile.
/// </summary>
/// <param name="profileId">The profile identifier.</param>
/// <param name="cancellationToken">A token to cancel the operation.</param>
/// <returns><see langword="true"/> if the request succeeds; otherwise, <see langword="false"/>.</returns>
public async Task<bool> InvokeRecActionAsync(int profileId, CancellationToken cancellationToken = default)
{
var resp = await _http.PostAsync($"api/RecAction/invoke/{profileId}", content: null, cancellationToken);
return resp.IsSuccessStatusCode;
}
/// <summary>
/// Retrieves Rec actions.
/// </summary>
/// <param name="profileId">Optional profile filter.</param>
/// <param name="invoked">Optional invoked filter.</param>
/// <param name="cancel">A token to cancel the operation.</param>
/// <returns>The HTTP response message.</returns>
public Task<HttpResponseMessage> GetRecActionsAsync(long? profileId = null, bool? invoked = null, CancellationToken cancel = default)
{
var query = ReCClientHelpers.BuildQuery(("ProfileId", profileId), ("Invoked", invoked));
return _http.GetAsync($"api/RecAction{query}", cancel);
}
/// <summary>
/// Creates a Rec action.
/// </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> CreateRecActionAsync<T>(T procedure, CancellationToken cancel = default)
=> _http.PostAsync("api/RecAction", ReCClientHelpers.ToJsonContent(procedure), cancel);
/// <summary>
/// Updates a Rec action.
/// </summary>
/// <typeparam name="T">The payload type.</typeparam>
/// <param name="id">The action 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> UpdateRecActionAsync<T>(long id, T procedure, CancellationToken cancel = default)
=> _http.PutAsync($"api/RecAction/{id}", ReCClientHelpers.ToJsonContent(procedure), cancel);
/// <summary>
/// Deletes Rec actions.
/// </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> DeleteRecActionsAsync<T>(T procedure, CancellationToken cancel = default)
{
var request = new HttpRequestMessage(HttpMethod.Delete, "api/RecAction")
{
Content = ReCClientHelpers.ToJsonContent(procedure)
};
return _http.SendAsync(request, cancel);
}
}
}