diff --git a/AccessQueueService/Data/AccessQueueRepository.cs b/AccessQueueService/Data/AccessQueueRepository.cs index 117c03e..6edef9f 100644 --- a/AccessQueueService/Data/AccessQueueRepository.cs +++ b/AccessQueueService/Data/AccessQueueRepository.cs @@ -179,19 +179,18 @@ namespace AccessQueueService.Data _nextUnusedTicket = newIndex; } - public string ToState() + public TakeANumberAccessQueueRepoState ToState() { var state = new TakeANumberAccessQueueRepoState { AccessTickets = new Dictionary(_accessTickets), AccessQueue = new Dictionary(_accessQueue), }; - return JsonSerializer.Serialize(state); + return state; } - public static AccessQueueRepository FromState(string stateJson) + public static AccessQueueRepository FromState(TakeANumberAccessQueueRepoState state) { - var state = JsonSerializer.Deserialize(stateJson); if (state?.AccessTickets == null || state?.AccessQueue == null) { return new(); diff --git a/AccessQueueService/Program.cs b/AccessQueueService/Program.cs index aaf86ba..1c6ba7b 100644 --- a/AccessQueueService/Program.cs +++ b/AccessQueueService/Program.cs @@ -1,4 +1,6 @@ +using System.Text.Json; using AccessQueueService.Data; +using AccessQueueService.Models; using AccessQueueService.Services; using Serilog; @@ -24,8 +26,14 @@ builder.Services.AddSingleton(sp => { try { - var json = File.ReadAllText(filePath); - return AccessQueueRepository.FromState(json); + string json = File.ReadAllText(filePath); + var state = JsonSerializer.Deserialize(json); + if (state == null) + { + Console.WriteLine($"Failed to load state from {filePath}. Deserialized object was null."); + return new AccessQueueRepository(); + } + return AccessQueueRepository.FromState(state); } catch (Exception ex) { diff --git a/AccessQueueService/Services/AccessQueueSerializerService.cs b/AccessQueueService/Services/AccessQueueSerializerService.cs index c24a023..20aab6d 100644 --- a/AccessQueueService/Services/AccessQueueSerializerService.cs +++ b/AccessQueueService/Services/AccessQueueSerializerService.cs @@ -30,7 +30,7 @@ namespace AccessQueueService.Services { _logger.LogInformation($"Writing backup to {backupPath}"); var stateJson = _accessRepo.ToState(); - File.WriteAllText(backupPath, stateJson); + File.WriteAllText(backupPath, JsonSerializer.Serialize(stateJson)); } catch (Exception ex) { diff --git a/AccessQueueServiceTests/AccessQueueRepoTests.cs b/AccessQueueServiceTests/AccessQueueRepoTests.cs index c9efb60..ba56994 100644 --- a/AccessQueueServiceTests/AccessQueueRepoTests.cs +++ b/AccessQueueServiceTests/AccessQueueRepoTests.cs @@ -287,8 +287,7 @@ namespace AccessQueueServiceTests _repo.UpsertTicket(ticketWithAccess); _repo.Enqueue(ticketWithoutAccess); - string stateJson = _repo.ToState(); - var state = JsonSerializer.Deserialize(stateJson); + var state = _repo.ToState(); Assert.NotNull(state?.AccessQueue); Assert.NotNull(state?.AccessTickets); @@ -312,8 +311,8 @@ namespace AccessQueueServiceTests _repo.UpsertTicket(ticketWithAccess); _repo.Enqueue(ticketWithoutAccess); - string stateJson = _repo.ToState(); - var deserializedRepo = AccessQueueRepository.FromState(stateJson); + var state = _repo.ToState(); + var deserializedRepo = AccessQueueRepository.FromState(state); Assert.Equal(1, deserializedRepo.GetUnexpiredTicketsCount()); Assert.Equal(1, deserializedRepo.GetQueueCount());