using Jugenddienst_Stunden.Interfaces; using Jugenddienst_Stunden.Types; using Jugenddienst_Stunden.Validators; namespace Jugenddienst_Stunden.Services; internal class HoursService : IHoursService { private readonly IHoursRepository _repo; private readonly IHoursValidator _validator; public HoursService(IHoursRepository repo, IHoursValidator validator) { _repo = repo; _validator = validator; } public async Task<(Hours hours, Settings settings)> GetMonthSummaryAsync(DateTime monthDate) { string q = $"hours=&year={monthDate:yyyy}&month={monthDate:MM}"; var baseRes = await _repo.LoadBase(q); // Fallbacks, da einige Endpoints 'settings' nicht mitsenden bzw. 'hour' auslassen können var settings = baseRes.settings ?? await _repo.LoadSettings(); var hours = baseRes.hour ?? new Hours { daytime = new List(), Nominal_day_api = new List(), Nominal_week_api = new List(), zeit_total_daily_api = new List(), Projekte = new System.Collections.ObjectModel.Collection(), Gemeinden = new System.Collections.ObjectModel.Collection(), Freistellungen = new System.Collections.ObjectModel.Collection() }; return (hours, settings); } public async Task<(List dayTimes, Settings settings)> GetDayWithSettingsAsync(DateTime date) { string q = $"date={date:yyyy-MM-dd}"; var baseRes = await _repo.LoadBase(q); return (baseRes.daytimes ?? new List(), baseRes.settings); } public async Task> GetDayRangeAsync(DateTime from, DateTime to) { string q = $"date={from:yyyy-MM-dd}&tilldate={to:yyyy-MM-dd}"; var baseRes = await _repo.LoadBase(q); return baseRes.daytimes ?? new List(); } public async Task GetSettingsAsync() => await _repo.LoadSettings(); public async Task GetEntryAsync(int id) => await _repo.LoadEntry(id); public async Task SaveEntryAsync(DayTime stunde) { var settings = await _repo.LoadSettings(); _validator.Validate(stunde, settings); return await _repo.SaveEntry(stunde); } public async Task DeleteEntryAsync(DayTime stunde) => await _repo.DeleteEntry(stunde); }