Inhalt

Aktueller Ordner: duesseldorfer-schuelerinventar-csharp-client/Duesk/Api
⬅ Übergeordnet

ApiClient.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;
        }
    }
}