Files
dashcaddy/desktop/Services/ApiClient.cs
T
Hermes 86e4c9fc81 wip: Windows desktop app scaffold (WinUI 3/.NET 8) + NSIS installer + docs
Owner decision pending (STATE.md DC-100 tick): adopt/ship/park.
Preserved from fragile git stash to named branch 2026-08-23.
NOTE: requires a Windows build machine (WinUI XAML compiler + MSIX do not
cross-build on Linux) — see WINDOWS_APP_BUILD.md in this tree.
Secret-scanned clean 2026-08-23 (no keys/tokens/PEM in tree).
2026-08-22 23:50:34 -07:00

88 lines
3.0 KiB
C#

using System.Net.Http.Json;
using System.Text.Json;
using DashCaddy.Desktop.Models;
namespace DashCaddy.Desktop.Services;
public class ApiClient
{
private readonly HttpClient _httpClient;
private readonly string _baseUrl;
public ApiClient(string baseUrl)
{
_baseUrl = baseUrl.TrimEnd('/');
_httpClient = new HttpClient
{
BaseAddress = new Uri(_baseUrl),
Timeout = TimeSpan.FromSeconds(30)
};
}
public async Task<List<ServiceModel>> GetServicesAsync()
{
var response = await _httpClient.GetAsync("/api/v1/services");
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadFromJsonAsync<ApiResponse<List<ServiceModel>>>();
return result?.Data ?? new List<ServiceModel>();
}
public async Task<ServiceModel> GetServiceAsync(string id)
{
var response = await _httpClient.GetAsync($"/api/v1/services/{id}");
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadFromJsonAsync<ApiResponse<ServiceModel>>();
return result?.Data;
}
public async Task<ServiceModel> CreateServiceAsync(ServiceModel service)
{
var response = await _httpClient.PostAsJsonAsync("/api/v1/services", service);
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadFromJsonAsync<ApiResponse<ServiceModel>>();
return result?.Data;
}
public async Task<ServiceModel> UpdateServiceAsync(string id, ServiceModel service)
{
var response = await _httpClient.PutAsJsonAsync($"/api/v1/services/{id}", service);
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadFromJsonAsync<ApiResponse<ServiceModel>>();
return result?.Data;
}
public async Task RemoveServiceAsync(string id)
{
var response = await _httpClient.DeleteAsync($"/api/v1/services/{id}");
response.EnsureSuccessStatusCode();
}
public async Task<HealthResponse> GetHealthAsync()
{
var response = await _httpClient.GetAsync("/api/v1/health");
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadFromJsonAsync<ApiResponse<HealthResponse>>();
return result?.Data ?? new HealthResponse();
}
public async Task<Dictionary<string, string>> GetConfigAsync()
{
var response = await _httpClient.GetAsync("/api/v1/config");
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadFromJsonAsync<ApiResponse<Dictionary<string, string>>>();
return result?.Data ?? new Dictionary<string, string>();
}
public async Task UpdateConfigAsync(Dictionary<string, string> config)
{
var response = await _httpClient.PutAsJsonAsync("/api/v1/config", config);
response.EnsureSuccessStatusCode();
}
private class ApiResponse<T>
{
public bool Success { get; set; }
public T Data { get; set; }
public string Error { get; set; }
}
}