Compare commits

..

No commits in common. "return-users-in-status" and "main" have entirely different histories.

5 changed files with 13 additions and 25 deletions

View File

@ -179,21 +179,19 @@ namespace AccessQueueService.Data
_nextUnusedTicket = newIndex; _nextUnusedTicket = newIndex;
} }
public AccessQueueRepositoryState ToState() public string ToState()
{ {
var accessTickets = new Dictionary<string, AccessTicket>(_accessTickets); var state = new TakeANumberAccessQueueRepoState
var accessQueue = new Dictionary<ulong, AccessTicket>(_accessQueue);
var state = new AccessQueueRepositoryState
{ {
AccessTickets = new Dictionary<string, AccessTicket>(_accessTickets), AccessTickets = new Dictionary<string, AccessTicket>(_accessTickets),
AccessQueue = new Dictionary<ulong, AccessTicket>(_accessQueue), AccessQueue = new Dictionary<ulong, AccessTicket>(_accessQueue),
}; };
return state; return JsonSerializer.Serialize(state);
} }
public static AccessQueueRepository FromState(AccessQueueRepositoryState state) public static AccessQueueRepository FromState(string stateJson)
{ {
var state = JsonSerializer.Deserialize<TakeANumberAccessQueueRepoState?>(stateJson);
if (state?.AccessTickets == null || state?.AccessQueue == null) if (state?.AccessTickets == null || state?.AccessQueue == null)
{ {
return new(); return new();

View File

@ -1,11 +1,8 @@
namespace AccessQueueService.Models namespace AccessQueueService.Models
{ {
public class AccessQueueRepositoryState public class TakeANumberAccessQueueRepoState
{ {
public Dictionary<string, AccessTicket> AccessTickets { get; set; } = []; public Dictionary<string, AccessTicket> AccessTickets { get; set; } = [];
public Dictionary<ulong, AccessTicket> AccessQueue { get; set; } = []; public Dictionary<ulong, AccessTicket> AccessQueue { get; set; } = [];
public int UnexpiredTicketsCount { get; set; }
public int ActiveTicketsCount { get; set; }
public int QueueCount { get; set; }
} }
} }

View File

@ -1,6 +1,4 @@
using System.Text.Json;
using AccessQueueService.Data; using AccessQueueService.Data;
using AccessQueueService.Models;
using AccessQueueService.Services; using AccessQueueService.Services;
using Serilog; using Serilog;
@ -26,14 +24,8 @@ builder.Services.AddSingleton<AccessQueueRepository>(sp =>
{ {
try try
{ {
string json = File.ReadAllText(filePath); var json = File.ReadAllText(filePath);
var state = JsonSerializer.Deserialize<AccessQueueRepositoryState>(json); return AccessQueueRepository.FromState(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) catch (Exception ex)
{ {

View File

@ -30,7 +30,7 @@ namespace AccessQueueService.Services
{ {
_logger.LogInformation($"Writing backup to {backupPath}"); _logger.LogInformation($"Writing backup to {backupPath}");
var stateJson = _accessRepo.ToState(); var stateJson = _accessRepo.ToState();
File.WriteAllText(backupPath, JsonSerializer.Serialize(stateJson)); File.WriteAllText(backupPath, stateJson);
} }
catch (Exception ex) catch (Exception ex)
{ {

View File

@ -287,7 +287,8 @@ namespace AccessQueueServiceTests
_repo.UpsertTicket(ticketWithAccess); _repo.UpsertTicket(ticketWithAccess);
_repo.Enqueue(ticketWithoutAccess); _repo.Enqueue(ticketWithoutAccess);
var state = _repo.ToState(); string stateJson = _repo.ToState();
var state = JsonSerializer.Deserialize<TakeANumberAccessQueueRepoState>(stateJson);
Assert.NotNull(state?.AccessQueue); Assert.NotNull(state?.AccessQueue);
Assert.NotNull(state?.AccessTickets); Assert.NotNull(state?.AccessTickets);
@ -311,8 +312,8 @@ namespace AccessQueueServiceTests
_repo.UpsertTicket(ticketWithAccess); _repo.UpsertTicket(ticketWithAccess);
_repo.Enqueue(ticketWithoutAccess); _repo.Enqueue(ticketWithoutAccess);
var state = _repo.ToState(); string stateJson = _repo.ToState();
var deserializedRepo = AccessQueueRepository.FromState(state); var deserializedRepo = AccessQueueRepository.FromState(stateJson);
Assert.Equal(1, deserializedRepo.GetUnexpiredTicketsCount()); Assert.Equal(1, deserializedRepo.GetUnexpiredTicketsCount());
Assert.Equal(1, deserializedRepo.GetQueueCount()); Assert.Equal(1, deserializedRepo.GetQueueCount());