Compare commits
No commits in common. "return-users-in-status" and "main" have entirely different histories.
return-use
...
main
|
@ -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();
|
||||||
|
|
|
@ -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; }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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());
|
||||||
|
|
Loading…
Reference in New Issue