Move serialization and deserialization out of AccessQueueRepo
This commit is contained in:
parent
f72eb323ec
commit
ce9d0cdb25
|
@ -179,19 +179,18 @@ namespace AccessQueueService.Data
|
|||
_nextUnusedTicket = newIndex;
|
||||
}
|
||||
|
||||
public string ToState()
|
||||
public TakeANumberAccessQueueRepoState ToState()
|
||||
{
|
||||
var state = new TakeANumberAccessQueueRepoState
|
||||
{
|
||||
AccessTickets = new Dictionary<string, AccessTicket>(_accessTickets),
|
||||
AccessQueue = new Dictionary<ulong, AccessTicket>(_accessQueue),
|
||||
};
|
||||
return JsonSerializer.Serialize(state);
|
||||
return state;
|
||||
}
|
||||
|
||||
public static AccessQueueRepository FromState(string stateJson)
|
||||
public static AccessQueueRepository FromState(TakeANumberAccessQueueRepoState state)
|
||||
{
|
||||
var state = JsonSerializer.Deserialize<TakeANumberAccessQueueRepoState?>(stateJson);
|
||||
if (state?.AccessTickets == null || state?.AccessQueue == null)
|
||||
{
|
||||
return new();
|
||||
|
|
|
@ -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<AccessQueueRepository>(sp =>
|
|||
{
|
||||
try
|
||||
{
|
||||
var json = File.ReadAllText(filePath);
|
||||
return AccessQueueRepository.FromState(json);
|
||||
string json = File.ReadAllText(filePath);
|
||||
var state = JsonSerializer.Deserialize<TakeANumberAccessQueueRepoState>(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)
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -287,8 +287,7 @@ namespace AccessQueueServiceTests
|
|||
_repo.UpsertTicket(ticketWithAccess);
|
||||
_repo.Enqueue(ticketWithoutAccess);
|
||||
|
||||
string stateJson = _repo.ToState();
|
||||
var state = JsonSerializer.Deserialize<TakeANumberAccessQueueRepoState>(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());
|
||||
|
|
Loading…
Reference in New Issue