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
|