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