using System.Net.Http.Json; using timetracker.Shared; namespace timetracker.Client.Services; public class ClientTimetrackerService : ITimetrackerService { private readonly HttpClient _http; public ClientTimetrackerService(HttpClient http) { _http = http; } public async Task> GetWeekAsync(int userId, DateOnly monday) { return await _http.GetFromJsonAsync>($"api/tracker/week?userId={userId}&monday={monday:yyyy-MM-dd}") ?? []; } public async Task UpsertWorkDayAsync(WorkDay workDay) { await _http.PostAsJsonAsync("api/tracker/workday", workDay); } public async Task GetSettingsAsync(int userId) { return await _http.GetFromJsonAsync($"api/tracker/settings/{userId}") ?? new AppSettings { UserId = userId }; } public async Task SaveSettingsAsync(AppSettings settings) { await _http.PostAsJsonAsync("api/tracker/settings", settings); } public async Task> GetVacationDaysAsync(int userId, int year) { return await _http.GetFromJsonAsync>($"api/tracker/vacation/{userId}/{year}") ?? []; } public async Task AddVacationDayAsync(VacationDay vacationDay) { await _http.PostAsJsonAsync("api/tracker/vacation", vacationDay); } public async Task RemoveVacationDayAsync(int userId, int id) { await _http.DeleteAsync($"api/tracker/vacation/{userId}/{id}"); } public async Task GetTotalOvertimeAsync(int userId, AppSettings settings) { var response = await _http.PostAsJsonAsync($"api/tracker/overtime/{userId}", settings); if (response.IsSuccessStatusCode) { var hours = await response.Content.ReadFromJsonAsync(); return TimeSpan.FromHours(hours); } return TimeSpan.Zero; } public async Task> GetMonthAsync(int userId, int year, int month) { return await _http.GetFromJsonAsync>($"api/tracker/month?userId={userId}&year={year}&month={month}") ?? []; } }