From 2034f459d416afdead72e590f870567452b2c62a Mon Sep 17 00:00:00 2001 From: Rory& Date: Tue, 3 Jun 2025 22:15:43 +0200 Subject: Prepare for budgeting, move to native createdAt --- testFrontend/SafeNSound.FakeUser/MonitorService.cs | 13 +++--- testFrontend/SafeNSound.Sdk/SafeNSoundClient.cs | 47 ++++++++++++++++++++++ 2 files changed, 55 insertions(+), 5 deletions(-) (limited to 'testFrontend') diff --git a/testFrontend/SafeNSound.FakeUser/MonitorService.cs b/testFrontend/SafeNSound.FakeUser/MonitorService.cs index fa2022a..b1da7e6 100644 --- a/testFrontend/SafeNSound.FakeUser/MonitorService.cs +++ b/testFrontend/SafeNSound.FakeUser/MonitorService.cs @@ -87,11 +87,14 @@ public class MonitorService(ILogger logger, UserStore userStore) while (!cancellationToken.IsCancellationRequested) { try { var user = userStore.GetRandomMonitor(); - // var alarms = await user.Client!.GetAllAlarms(); - // if(alarms.Count > 0) - // logger.LogInformation("Monitor {UserId} has outstanding alarms: {Alarm}", user.Auth.Username, alarms.ToJson(indent: false)); - // else - // logger.LogInformation("Monitor {UserId} found no alarms to query", user.Auth.Username); + var monitoredUsers = (await user.Client!.GetAssignedUsers()).ToArray(); + if (monitoredUsers.Length == 0) { + logger.LogInformation("Monitor {UserId} has no assigned users", user.Auth.Username); + continue; + } + var userId = Random.Shared.GetItems(monitoredUsers, 1).First(); + var budget = Random.Shared.NextDouble(); + await user.Client!.AddBudget(userId, budget); await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken); } catch (Exception ex) { diff --git a/testFrontend/SafeNSound.Sdk/SafeNSoundClient.cs b/testFrontend/SafeNSound.Sdk/SafeNSoundClient.cs index 8b06c30..4376d3f 100644 --- a/testFrontend/SafeNSound.Sdk/SafeNSoundClient.cs +++ b/testFrontend/SafeNSound.Sdk/SafeNSoundClient.cs @@ -118,6 +118,21 @@ public class SafeNSoundClient(SafeNSoundConfiguration config, string accessToken var res = await HttpClient.PostAsync("/auth/logout", null); res.EnsureSuccessStatusCode(); } + + public async Task AddBudget(string userId, BudgetWithReason budget) { + var res = await HttpClient.PatchAsJsonAsync($"/user/{userId}/budget", budget); + res.EnsureSuccessStatusCode(); + } + + public async Task GetBudget(string userId = "@me") { + var res = await HttpClient.GetAsync( + userId == "@me" + ? $"/budget" + : $"/user/{userId}/budget" + ); + res.EnsureSuccessStatusCode(); + return (await res.Content.ReadFromJsonAsync())!; + } } public class AlarmDto { @@ -140,4 +155,36 @@ public class DeviceDto { [JsonPropertyName("lastSeen")] public DateTime LastSeen { get; set; } +} + +public class Budget { + [JsonPropertyName("budget")] + public double Amount { get; set; } +} + +public class BudgetWithReason : Budget { + [JsonPropertyName("reason")] + public string? Reason { get; set; } +} + +public class BudgetWithHistory { + [JsonPropertyName("budget")] + public double Amount { get; set; } + + [JsonPropertyName("history")] + public List 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 -- cgit 1.5.1