Refactor API classes to use BaseCrudApi for CRUD ops

Introduce BaseCrudApi to encapsulate common CRUD logic for API resource classes. Refactor CommonApi, EndpointAuthApi, EndpointParamsApi, EndpointsApi, ProfileApi, RecActionApi, and ResultApi to inherit from BaseCrudApi, removing duplicated CRUD methods and constructors. This centralizes CRUD operations, reduces code duplication, and improves maintainability.
This commit is contained in:
2026-01-16 11:53:14 +01:00
parent b9a40bb12e
commit dbfb7e7e47
8 changed files with 89 additions and 297 deletions

View File

@@ -7,17 +7,14 @@ namespace ReC.Client.Api
/// <summary>
/// Provides access to profile endpoints.
/// </summary>
public class ProfileApi
public class ProfileApi : BaseCrudApi
{
private readonly HttpClient _http;
/// <summary>
/// Initializes a new instance of the <see cref="ProfileApi"/> class.
/// </summary>
/// <param name="http">The HTTP client used for requests.</param>
public ProfileApi(HttpClient http)
public ProfileApi(HttpClient http) : base(http, "api/Profile")
{
_http = http;
}
/// <summary>
@@ -30,44 +27,7 @@ namespace ReC.Client.Api
public Task<HttpResponseMessage> GetAsync(long id, bool includeActions = false, CancellationToken cancel = default)
{
var query = ReCClientHelpers.BuildQuery(("Id", id), ("IncludeActions", includeActions));
return _http.GetAsync($"api/Profile{query}", cancel);
}
/// <summary>
/// Creates a profile.
/// </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> CreateAsync<T>(T procedure, CancellationToken cancel = default)
=> _http.PostAsync("api/Profile", ReCClientHelpers.ToJsonContent(procedure), cancel);
/// <summary>
/// Updates a profile.
/// </summary>
/// <typeparam name="T">The payload type.</typeparam>
/// <param name="id">The profile 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> UpdateAsync<T>(long id, T procedure, CancellationToken cancel = default)
=> _http.PutAsync($"api/Profile/{id}", ReCClientHelpers.ToJsonContent(procedure), cancel);
/// <summary>
/// Deletes profiles.
/// </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> DeleteAsync<T>(T procedure, CancellationToken cancel = default)
{
var request = new HttpRequestMessage(HttpMethod.Delete, "api/Profile")
{
Content = ReCClientHelpers.ToJsonContent(procedure)
};
return _http.SendAsync(request, cancel);
return Http.GetAsync($"{ResourcePath}{query}", cancel);
}
}
}