Inhalt
Aktueller Ordner:
duesseldorfer-schuelerinventar-csharp-client/Duesk/ApiApiClient.cs
using System.Text;
using Newtonsoft.Json;
using Duesk.Api.Models;
namespace Duesk.Api;
public static class ApiClient
{
private const string BaseUrl = "https://paul-koop.org/api/";
private static readonly HttpClient _httpClient = new HttpClient();
static ApiClient()
{
_httpClient.Timeout = TimeSpan.FromSeconds(30);
}
public static async Task<LoginResponse?> LoginAsync(string username, string password)
{
try
{
var data = new { username, password };
var json = JsonConvert.SerializeObject(data);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var response = await _httpClient.PostAsync(BaseUrl + "api_login.php", content);
var responseBody = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<LoginResponse>(responseBody);
}
catch (Exception ex)
{
return new LoginResponse { Success = false, Error = ex.Message };
}
}
public static async Task<List<Profile>?> GetProfilesAsync()
{
if (!SessionManager.Instance.IsLoggedIn) return null;
try
{
var request = new HttpRequestMessage(HttpMethod.Get, BaseUrl + "api_profiles.php");
request.Headers.Add("X-User-ID", SessionManager.Instance.UserId);
request.Headers.Add("X-Session", SessionManager.Instance.Session);
var response = await _httpClient.SendAsync(request);
var responseBody = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<List<Profile>>(responseBody);
}
catch
{
return null;
}
}
public static async Task<Profile?> GetProfileAsync(string profileId)
{
if (!SessionManager.Instance.IsLoggedIn) return null;
try
{
var request = new HttpRequestMessage(HttpMethod.Get, BaseUrl + $"api_profiles.php?id={profileId}");
request.Headers.Add("X-User-ID", SessionManager.Instance.UserId);
request.Headers.Add("X-Session", SessionManager.Instance.Session);
var response = await _httpClient.SendAsync(request);
var responseBody = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<Profile>(responseBody);
}
catch
{
return null;
}
}
public static async Task<bool> CreateProfileAsync(Profile profile)
{
if (!SessionManager.Instance.IsLoggedIn) return false;
try
{
var json = JsonConvert.SerializeObject(profile);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var request = new HttpRequestMessage(HttpMethod.Post, BaseUrl + "api_profiles.php");
request.Headers.Add("X-User-ID", SessionManager.Instance.UserId);
request.Headers.Add("X-Session", SessionManager.Instance.Session);
request.Content = content;
var response = await _httpClient.SendAsync(request);
return response.IsSuccessStatusCode;
}
catch
{
return false;
}
}
public static async Task<bool> UpdateProfileAsync(Profile profile)
{
if (!SessionManager.Instance.IsLoggedIn) return false;
try
{
var json = JsonConvert.SerializeObject(profile);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var request = new HttpRequestMessage(HttpMethod.Put, BaseUrl + "api_profiles.php");
request.Headers.Add("X-User-ID", SessionManager.Instance.UserId);
request.Headers.Add("X-Session", SessionManager.Instance.Session);
request.Content = content;
var response = await _httpClient.SendAsync(request);
return response.IsSuccessStatusCode;
}
catch
{
return false;
}
}
public static async Task<bool> DeleteProfileAsync(string profileId)
{
if (!SessionManager.Instance.IsLoggedIn) return false;
try
{
var request = new HttpRequestMessage(HttpMethod.Delete, BaseUrl + $"api_profiles.php?id={profileId}");
request.Headers.Add("X-User-ID", SessionManager.Instance.UserId);
request.Headers.Add("X-Session", SessionManager.Instance.Session);
var response = await _httpClient.SendAsync(request);
return response.IsSuccessStatusCode;
}
catch
{
return false;
}
}
public static async Task<List<Group>?> GetGroupsAsync()
{
if (!SessionManager.Instance.IsLoggedIn) return null;
try
{
var request = new HttpRequestMessage(HttpMethod.Get, BaseUrl + "api_groups.php");
request.Headers.Add("X-User-ID", SessionManager.Instance.UserId);
request.Headers.Add("X-Session", SessionManager.Instance.Session);
var response = await _httpClient.SendAsync(request);
var responseBody = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<List<Group>>(responseBody);
}
catch
{
return null;
}
}
public static async Task<bool> CreateGroupAsync(string groupName)
{
if (!SessionManager.Instance.IsLoggedIn) return false;
try
{
var data = new { name = groupName };
var json = JsonConvert.SerializeObject(data);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var request = new HttpRequestMessage(HttpMethod.Post, BaseUrl + "api_groups.php");
request.Headers.Add("X-User-ID", SessionManager.Instance.UserId);
request.Headers.Add("X-Session", SessionManager.Instance.Session);
request.Content = content;
var response = await _httpClient.SendAsync(request);
return response.IsSuccessStatusCode;
}
catch
{
return false;
}
}
public static async Task<bool> DeleteGroupAsync(int groupId)
{
if (!SessionManager.Instance.IsLoggedIn) return false;
try
{
var request = new HttpRequestMessage(HttpMethod.Delete, BaseUrl + $"api_groups.php?id={groupId}");
request.Headers.Add("X-User-ID", SessionManager.Instance.UserId);
request.Headers.Add("X-Session", SessionManager.Instance.Session);
var response = await _httpClient.SendAsync(request);
return response.IsSuccessStatusCode;
}
catch
{
return false;
}
}
}