summary refs log tree commit diff
path: root/testFrontend/SafeNSound.Sdk/SafeNSoundClient.cs
diff options
context:
space:
mode:
Diffstat (limited to 'testFrontend/SafeNSound.Sdk/SafeNSoundClient.cs')
-rw-r--r--testFrontend/SafeNSound.Sdk/SafeNSoundClient.cs132
1 files changed, 108 insertions, 24 deletions
diff --git a/testFrontend/SafeNSound.Sdk/SafeNSoundClient.cs b/testFrontend/SafeNSound.Sdk/SafeNSoundClient.cs

index 8291178..e1564db 100644 --- a/testFrontend/SafeNSound.Sdk/SafeNSoundClient.cs +++ b/testFrontend/SafeNSound.Sdk/SafeNSoundClient.cs
@@ -4,50 +4,52 @@ using System.Text.Json.Serialization; namespace SafeNSound.Sdk; -public class SafeNSoundClient(SafeNSoundConfiguration config, string accessToken) -{ - public WrappedHttpClient HttpClient { get; } = new() - { +public class SafeNSoundClient(SafeNSoundConfiguration config, string accessToken) { + public WrappedHttpClient HttpClient { get; } = new() { BaseAddress = new Uri(config.BaseUri), - DefaultRequestHeaders = - { + DefaultRequestHeaders = { Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", accessToken) } }; - - public async Task<WhoAmI> WhoAmI() - { + + public async Task<WhoAmI> WhoAmI() { var res = await HttpClient.GetAsync("/auth/whoami"); res.EnsureSuccessStatusCode(); return (await res.Content.ReadFromJsonAsync<WhoAmI>())!; } - + #region Alarm - public async Task<AlarmDto> GetAlarm(string userId = "@me") { - var res = await HttpClient.GetAsync($"/alarm/{userId}"); + public async Task SetAlarm(AlarmDto alarm) { + var res = await HttpClient.PutAsJsonAsync("/alarm/@me", alarm); res.EnsureSuccessStatusCode(); - return (await res.Content.ReadFromJsonAsync<AlarmDto>())!; } - - public async Task SetAlarm(AlarmDto alarm, string userId = "@me") { - var res = await HttpClient.PutAsJsonAsync("/alarm/@me", alarm); + + public async Task<AlarmDto?> GetAlarm(string userId = "@me") { + var res = await HttpClient.GetAsync( + // required due to express routing not being closest-match + userId == "@me" + ? $"/alarm/@me" + : $"/user/{userId}/alarm" + ); res.EnsureSuccessStatusCode(); + return (await res.Content.ReadFromJsonAsync<AlarmDto?>()); } - + public async Task DeleteAlarm(string userId = "@me") { - var res = await HttpClient.DeleteAsync($"/alarm/{userId}"); + var res = await HttpClient.DeleteAsync( + // required due to express routing not being closest-match + userId == "@me" + ? $"/alarm/@me" + : $"/user/{userId}/alarm" + ); res.EnsureSuccessStatusCode(); } - - #endregion #region Budget - - #endregion public async Task<Dictionary<string, AlarmDto>> GetAllAlarms() { @@ -89,13 +91,95 @@ public class SafeNSoundClient(SafeNSoundConfiguration config, string accessToken var res = await HttpClient.PostAsync("/admin/monitorAllUsers", null); res.EnsureSuccessStatusCode(); } -} + public async Task<List<DeviceDto>> GetDevices() { + var res = await HttpClient.GetAsync("/auth/devices"); + res.EnsureSuccessStatusCode(); + return (await res.Content.ReadFromJsonAsync<List<DeviceDto>>())!; + } + + public async Task<DeviceDto> GetDevice(string deviceId) { + var res = await HttpClient.GetAsync($"/auth/devices/{deviceId}"); + res.EnsureSuccessStatusCode(); + return (await res.Content.ReadFromJsonAsync<DeviceDto>())!; + } + + public async Task DeleteDevice(string deviceId) { + var res = await HttpClient.DeleteAsync($"/auth/devices/{deviceId}"); + res.EnsureSuccessStatusCode(); + } + + public async Task UpdateDevice(string deviceId, DeviceDto device) { + var res = await HttpClient.PatchAsJsonAsync($"/auth/devices/{deviceId}", device); + res.EnsureSuccessStatusCode(); + } + + public async Task LogOut() { + var res = await HttpClient.PostAsync("/auth/logout", null); + res.EnsureSuccessStatusCode(); + } + + public async Task AddBudget(string userId, BudgetHistoryEntry budget) { + var res = await HttpClient.PatchAsJsonAsync($"/user/{userId}/budget", budget); + res.EnsureSuccessStatusCode(); + } + + public async Task SpendBudget(BudgetHistoryEntry budget) { + var res = await HttpClient.PatchAsJsonAsync($"/budget/@me", budget); + res.EnsureSuccessStatusCode(); + } + + public async Task<BudgetWithHistory> GetBudget(string userId = "@me") { + var res = await HttpClient.GetAsync( + userId == "@me" + ? $"/budget/@me" + : $"/user/{userId}/budget" + ); + res.EnsureSuccessStatusCode(); + return (await res.Content.ReadFromJsonAsync<BudgetWithHistory>())!; + } +} public class AlarmDto { [JsonPropertyName("reason")] public required string Reason { get; set; } - + + [JsonPropertyName("createdAt")] + public DateTime CreatedAt { get; set; } +} + +public class DeviceDto { + [JsonPropertyName("_id")] + public string? Id { get; set; } + + [JsonPropertyName("name")] + public string? Name { get; set; } + [JsonPropertyName("createdAt")] public DateTime CreatedAt { get; set; } + + [JsonPropertyName("lastSeen")] + public DateTime LastSeen { get; set; } +} + +public class BudgetWithHistory { + [JsonPropertyName("budget")] + public double Amount { get; set; } + + [JsonPropertyName("history")] + public List<BudgetHistoryEntry> History { get; set; } = new(); +} + +public class BudgetHistoryEntry { + [JsonPropertyName("venue")] + public string Venue { get; set; } + + [JsonPropertyName("amount")] + public double Amount { get; set; } + + [JsonPropertyName("reason")] + public string Reason { get; set; } + + [JsonPropertyName("createdAt")] + public DateTime? CreatedAt { get; set; } } \ No newline at end of file