OnProfNext/OnProfNext.Client/Services/ProjectApiService.cs
2025-10-15 13:29:50 +02:00

121 lines
4.0 KiB
C#

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<ProjectDto>? Data, string? Error)> GetProjectsAsync()
{
try
{
var projects = await _httpClient.GetFromJsonAsync<List<ProjectDto>>("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<ProjectDto>($"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);
}
}
}
}