using Jugenddienst_Stunden.Interfaces; using Jugenddienst_Stunden.Infrastructure; using Jugenddienst_Stunden.Models; using Jugenddienst_Stunden.Types; namespace Jugenddienst_Stunden.Repositories; /// /// Standard-Repository, das die bestehende API-/Model-Logik kapselt. /// internal class HoursRepository : IHoursRepository { private readonly IApiClient _api; public HoursRepository(IApiClient api) { _api = api; } public async Task LoadBase(string query) { // Der bestehende Code übergab eine Query ohne führendes '?' var dict = QueryToDictionary(query); var res= await _api.GetAsync("", dict).ConfigureAwait(false); return res; } public async Task LoadSettings() { var res = await _api.GetAsync("", new Dictionary { ["settings"] = "1" }) .ConfigureAwait(false); return res.settings; } public async Task LoadData() { var res = await _api.GetAsync("", new Dictionary { ["hours"] = "1" }) .ConfigureAwait(false); return res.hour; } public Task LoadUser(string apiKey) { // Für die erste Iteration bleibt das Token global; der Endpoint ohne Query liefert user return _api.GetAsync("", null).ContinueWith(t => t.Result.user); } public async Task> LoadDay(DateTime date) { var res = await _api .GetAsync("", new Dictionary { ["date"] = date.ToString("yyyy-MM-dd") }) .ConfigureAwait(false); return res.daytimes ?? new List(); } public async Task LoadEntry(int id) { var res = await _api.GetAsync("", new Dictionary { ["id"] = id.ToString() }) .ConfigureAwait(false); res.daytime.TimeSpanVon = res.daytime.Begin.ToTimeSpan(); res.daytime.TimeSpanBis = res.daytime.End.ToTimeSpan(); return res.daytime; } public async Task SaveEntry(DayTime stunde) { bool isNew = stunde.Id is null; var method = isNew ? HttpMethod.Post : HttpMethod.Put; await _api.SendAsync(method, "", stunde).ConfigureAwait(false); return stunde; } public Task DeleteEntry(DayTime stunde) => _api.DeleteAsync($"/entry/{stunde.Id}"); private static Dictionary QueryToDictionary(string query) { var dict = new Dictionary(); if (string.IsNullOrWhiteSpace(query)) return dict; var q = query.TrimStart('?'); foreach (var part in q.Split('&', StringSplitOptions.RemoveEmptyEntries)) { var kv = part.Split('=', 2); var key = Uri.UnescapeDataString(kv[0]); var val = kv.Length > 1 ? Uri.UnescapeDataString(kv[1]) : null; dict[key] = val; } return dict; } }