using OnProfNext.Shared.Models.DTOs; using System.Net.Http.Json; namespace OnProfNext.Client.Services { public class ProjectApiService { private readonly HttpClient _httpClient; public ProjectApiService(HttpClient httpClient) { _httpClient = httpClient; } // GET: Alle Projekte abrufen public async Task<(bool Success, List? Data, string? Error)> GetProjectsAsync() { try { var projects = await _httpClient.GetFromJsonAsync>("api/project"); return (true, projects ?? new(), null); } catch (HttpRequestException) { return (false, null, "Keine Verbindung zum Server. Bitte später erneut versuchen."); } catch (Exception ex) { return (false, null, $"Unerwarteter Fehler: {ex.Message}"); } } //GET: Ein einzelnes Projekt abrufen public async Task<(bool Success, ProjectDto? Data, string? Error)> GetProjectAsync(int id) { try { var project = await _httpClient.GetFromJsonAsync($"api/project/{id}"); if (project == null) return (false, null, "Projekt nicht gefunden."); return (true, project, null); } catch (HttpRequestException) { return (false, null, "Keine Verbindung zum Server. Bitte später erneut versuchen."); } catch (Exception ex) { return (false, null, $"Unerwarteter Fehler: {ex.Message}"); } } // POST: Neues Projekt erstellen public async Task<(bool Success, string? Error)> CreateProjectAsync(ProjectCreateDto dto) { try { var response = await _httpClient.PostAsJsonAsync("api/project", dto); if (!response.IsSuccessStatusCode) { return (false, $"Fehler beim Anlegen: {response.ReasonPhrase}"); } return (true, null); } catch (HttpRequestException) { return (false, "Server nicht erreichbar."); } catch (Exception ex) { return (false, ex.Message); } } // PUT: Bestehendes Projekt aktualisieren public async Task<(bool Success, string? Error)> UpdateProjectAsync(int id, ProjectCreateDto dto) { try { var response = await _httpClient.PutAsJsonAsync($"api/project/{id}", dto); if (!response.IsSuccessStatusCode) { return (false, $"Fehler beim Aktualisieren: {response.ReasonPhrase}"); } return (true, null); } catch (HttpRequestException) { return (false, "Server nicht erreichbar."); } catch (Exception ex) { return (false, ex.Message); } } // DELETE: Projekt löschen public async Task<(bool Success, string? Error)> DeleteProjectAsync(int id) { try { var response = await _httpClient.DeleteAsync($"api/project/{id}"); if (!response.IsSuccessStatusCode) { return (false, $"Fehler beim Löschen: {response.ReasonPhrase}"); } return (true, null); } catch (HttpRequestException) { return (false, "Server nicht erreichbar."); } catch (Exception ex) { return (false, ex.Message); } } } }