using Newtonsoft.Json; using System; using System.Net.Http; using System.Text; using System.Threading.Tasks; namespace Chtn.CSharp.SDK.Core { public class ApiClient { private readonly HttpClient _httpClient; private readonly string _baseUrl; public ApiClient(string baseUrl) { _baseUrl = baseUrl.EndsWith("/") ? baseUrl : baseUrl + "/"; _httpClient = new HttpClient(); } public async Task PostAsync(string endpoint, TRequest data) { var json = JsonConvert.SerializeObject(data); var content = new StringContent(json, Encoding.UTF8, "application/json"); var response = await _httpClient.PostAsync(_baseUrl + endpoint, content); var responseJson = await response.Content.ReadAsStringAsync(); if (!response.IsSuccessStatusCode) { throw new Exception($"API Hiba ({response.StatusCode}): {responseJson}"); } return JsonConvert.DeserializeObject(responseJson); } public async Task GetAsync(string endpoint) { var response = await _httpClient.GetAsync(endpoint); response.EnsureSuccessStatusCode(); var content = await response.Content.ReadAsStringAsync(); return JsonConvert.DeserializeObject(content); } public async Task PatchAsync(string endpoint, TRequest data) { var json = JsonConvert.SerializeObject(data); var content = new StringContent(json, Encoding.UTF8, "application/json"); var request = new HttpRequestMessage(new HttpMethod("PATCH"), endpoint) { Content = content }; var response = await _httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); var responseContent = await response.Content.ReadAsStringAsync(); return JsonConvert.DeserializeObject(responseContent); } public async Task DeleteAsync(string endpoint) { var response = await _httpClient.DeleteAsync(endpoint); response.EnsureSuccessStatusCode(); var content = await response.Content.ReadAsStringAsync(); return JsonConvert.DeserializeObject(content); } } }