diff --git a/AccessQueuePlayground/Components/Pages/Config.razor b/AccessQueuePlayground/Components/Pages/Config.razor index e8bac12..829651a 100644 --- a/AccessQueuePlayground/Components/Pages/Config.razor +++ b/AccessQueuePlayground/Components/Pages/Config.razor @@ -1,5 +1,5 @@ @page "/config" -@inject AccessQueuePlayground.Services.IAccessQueueManager QueueManager +@inject AccessQueuePlayground.Services.AccessQueueManager QueueManager @using BlazorBootstrap

Access Queue Configuration

diff --git a/AccessQueuePlayground/Components/Pages/Home.razor b/AccessQueuePlayground/Components/Pages/Home.razor index a077ce3..0dea6b0 100644 --- a/AccessQueuePlayground/Components/Pages/Home.razor +++ b/AccessQueuePlayground/Components/Pages/Home.razor @@ -4,7 +4,7 @@ @using AccessQueueService.Models; @using BlazorBootstrap -@inject IAccessQueueManager Manager +@inject AccessQueueManager Manager AccessQueue Playground @if (Config != null) diff --git a/AccessQueuePlayground/Program.cs b/AccessQueuePlayground/Program.cs index 349e337..fe51c89 100644 --- a/AccessQueuePlayground/Program.cs +++ b/AccessQueuePlayground/Program.cs @@ -28,8 +28,8 @@ else builder.Services.AddHttpClient(); builder.Services.AddSingleton(); } -builder.Services.AddSingleton(); -builder.Services.AddSingleton(); +builder.Services.AddSingleton(); +builder.Services.AddSingleton(); builder.Services.AddHostedService(); var app = builder.Build(); diff --git a/AccessQueuePlayground/Services/AccessQueueBackgroundService.cs b/AccessQueuePlayground/Services/AccessQueueBackgroundService.cs index 1211271..1dd9cc1 100644 --- a/AccessQueuePlayground/Services/AccessQueueBackgroundService.cs +++ b/AccessQueuePlayground/Services/AccessQueueBackgroundService.cs @@ -6,10 +6,10 @@ namespace AccessQueuePlayground.Services { public class AccessQueueBackgroundService : BackgroundService { - private readonly IAccessQueueManager _accessQueueManager; + private readonly AccessQueueManager _accessQueueManager; private readonly IConfiguration _config; - public AccessQueueBackgroundService(IAccessQueueManager accessQueueManager, IConfiguration config) + public AccessQueueBackgroundService(AccessQueueManager accessQueueManager, IConfiguration config) { _accessQueueManager = accessQueueManager; _config = config; diff --git a/AccessQueuePlayground/Services/AccessQueueManager.cs b/AccessQueuePlayground/Services/AccessQueueManager.cs index dfb3e10..6cb4f05 100644 --- a/AccessQueuePlayground/Services/AccessQueueManager.cs +++ b/AccessQueuePlayground/Services/AccessQueueManager.cs @@ -6,7 +6,7 @@ using Microsoft.Extensions.Configuration; namespace AccessQueuePlayground.Services { - public class AccessQueueManager : IAccessQueueManager + public class AccessQueueManager { private readonly IAccessService _accessService; private readonly IConfiguration _config; diff --git a/AccessQueuePlayground/Services/IAccessQueueManager.cs b/AccessQueuePlayground/Services/IAccessQueueManager.cs deleted file mode 100644 index df071ba..0000000 --- a/AccessQueuePlayground/Services/IAccessQueueManager.cs +++ /dev/null @@ -1,20 +0,0 @@ -using AccessQueuePlayground.Models; -using AccessQueueService.Models; - -namespace AccessQueuePlayground.Services -{ - public interface IAccessQueueManager - { - public event Action? StatusUpdated; - public AccessQueueConfig GetConfig(); - public void UpdateConfig(AccessQueueConfig config); - public Task RecalculateStatus(); - public AccessQueueManagerStatus GetStatus(); - public Guid AddUser(bool isActive); - public void SetUserActive(Guid userId, bool isActive); - public void RevokeAccess(Guid userId); - public void RevokeAllAccess(); - public void Reset(); - - } -} diff --git a/AccessQueueService/Data/TakeANumberAccessQueueRepo.cs b/AccessQueueService/Data/AccessQueueRepository.cs similarity index 98% rename from AccessQueueService/Data/TakeANumberAccessQueueRepo.cs rename to AccessQueueService/Data/AccessQueueRepository.cs index e7dbafa..117c03e 100644 --- a/AccessQueueService/Data/TakeANumberAccessQueueRepo.cs +++ b/AccessQueueService/Data/AccessQueueRepository.cs @@ -6,7 +6,7 @@ using Microsoft.Extensions.Configuration; namespace AccessQueueService.Data { - public class TakeANumberAccessQueueRepo : IAccessQueueRepo + public class AccessQueueRepository { private ConcurrentDictionary _accessTickets = new(); private ConcurrentDictionary _queueNumbers = new(); @@ -189,7 +189,7 @@ namespace AccessQueueService.Data return JsonSerializer.Serialize(state); } - public static TakeANumberAccessQueueRepo FromState(string stateJson) + public static AccessQueueRepository FromState(string stateJson) { var state = JsonSerializer.Deserialize(stateJson); if (state?.AccessTickets == null || state?.AccessQueue == null) diff --git a/AccessQueueService/Data/IAccessQueueRepo.cs b/AccessQueueService/Data/IAccessQueueRepo.cs deleted file mode 100644 index cb74bc1..0000000 --- a/AccessQueueService/Data/IAccessQueueRepo.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.Runtime.Serialization; -using AccessQueueService.Models; -using Microsoft.Extensions.Configuration; - -namespace AccessQueueService.Data -{ - public interface IAccessQueueRepo - { - public string ToState(); - public int GetUnexpiredTicketsCount(); - public int GetActiveTicketsCount(DateTime activeCutoff); - public int GetQueueCount(); - public AccessTicket? GetTicket(string userId); - public void UpsertTicket(AccessTicket ticket); - public int GetRequestsAhead(string userId); - public void Enqueue(AccessTicket ticket); - public int DeleteExpiredTickets(); - public bool RemoveUser(string userId); - public bool DidDequeueUntilFull(AccessQueueConfig config); - } -} diff --git a/AccessQueueService/Program.cs b/AccessQueueService/Program.cs index 9dd670d..aaf86ba 100644 --- a/AccessQueueService/Program.cs +++ b/AccessQueueService/Program.cs @@ -17,7 +17,7 @@ builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddSingleton(); -builder.Services.AddSingleton(sp => +builder.Services.AddSingleton(sp => { string? filePath = builder.Configuration.GetValue("AccessQueue:BackupFilePath"); if (!string.IsNullOrWhiteSpace(filePath) && File.Exists(filePath)) @@ -25,14 +25,14 @@ builder.Services.AddSingleton(sp => try { var json = File.ReadAllText(filePath); - return TakeANumberAccessQueueRepo.FromState(json); + return AccessQueueRepository.FromState(json); } catch (Exception ex) { Console.WriteLine($"Failed to load state from {filePath}. Error message: {ex.Message}"); } } - return new TakeANumberAccessQueueRepo(); + return new AccessQueueRepository(); }); builder.Services.AddHostedService(); builder.Services.AddHostedService(); diff --git a/AccessQueueService/Services/AccessQueueSerializerService.cs b/AccessQueueService/Services/AccessQueueSerializerService.cs index c308330..c24a023 100644 --- a/AccessQueueService/Services/AccessQueueSerializerService.cs +++ b/AccessQueueService/Services/AccessQueueSerializerService.cs @@ -5,11 +5,11 @@ namespace AccessQueueService.Services { public class AccessQueueSerializerService : BackgroundService { - private readonly IAccessQueueRepo _accessRepo; + private readonly AccessQueueRepository _accessRepo; private readonly IConfiguration _config; private readonly ILogger _logger; - public AccessQueueSerializerService(IAccessQueueRepo accessRepo, IConfiguration config, ILogger logger) + public AccessQueueSerializerService(AccessQueueRepository accessRepo, IConfiguration config, ILogger logger) { _accessRepo = accessRepo; _config = config; diff --git a/AccessQueueService/Services/AccessService.cs b/AccessQueueService/Services/AccessService.cs index d28410e..5c8ccf8 100644 --- a/AccessQueueService/Services/AccessService.cs +++ b/AccessQueueService/Services/AccessService.cs @@ -8,12 +8,12 @@ namespace AccessQueueService.Services public class AccessService : IAccessService { private readonly IConfiguration _configuration; - private readonly IAccessQueueRepo _accessQueueRepo; + private readonly AccessQueueRepository _accessQueueRepo; private readonly ILogger _logger; private readonly SemaphoreSlim _queueLock = new(1, 1); private AccessQueueConfig _config; - public AccessService(IConfiguration configuration, IAccessQueueRepo accessQueueRepo, ILogger logger) + public AccessService(IConfiguration configuration, AccessQueueRepository accessQueueRepo, ILogger logger) { _configuration = configuration; _accessQueueRepo = accessQueueRepo; diff --git a/AccessQueueServiceTests/AccessQueueRepoTests.cs b/AccessQueueServiceTests/AccessQueueRepoTests.cs index 97830f5..c9efb60 100644 --- a/AccessQueueServiceTests/AccessQueueRepoTests.cs +++ b/AccessQueueServiceTests/AccessQueueRepoTests.cs @@ -14,7 +14,7 @@ namespace AccessQueueServiceTests { public class AccessQueueRepoTests { - private readonly TakeANumberAccessQueueRepo _repo; + private readonly AccessQueueRepository _repo; private readonly AccessQueueConfig _simpleConfig = new() { ExpirationSeconds = 60, @@ -42,7 +42,7 @@ namespace AccessQueueServiceTests public AccessQueueRepoTests() { - _repo = new TakeANumberAccessQueueRepo(); + _repo = new AccessQueueRepository(); } private List GetSimpleTicketList() => new() @@ -313,7 +313,7 @@ namespace AccessQueueServiceTests _repo.Enqueue(ticketWithoutAccess); string stateJson = _repo.ToState(); - var deserializedRepo = TakeANumberAccessQueueRepo.FromState(stateJson); + var deserializedRepo = AccessQueueRepository.FromState(stateJson); Assert.Equal(1, deserializedRepo.GetUnexpiredTicketsCount()); Assert.Equal(1, deserializedRepo.GetQueueCount()); diff --git a/AccessQueueServiceTests/AccessServiceTests.cs b/AccessQueueServiceTests/AccessServiceTests.cs index b277ba5..7c8978b 100644 --- a/AccessQueueServiceTests/AccessServiceTests.cs +++ b/AccessQueueServiceTests/AccessServiceTests.cs @@ -16,7 +16,6 @@ namespace AccessQueueServiceTests const int ACT_MILLIS = 1000 * ACT_SECONDS; const int CAP_LIMIT = 5; const int BULK_COUNT = 10000; - const int CACHE_MILLIS = 1000; private readonly AccessService _accessService; public AccessServiceTests() @@ -26,14 +25,13 @@ namespace AccessQueueServiceTests { "AccessQueue:ExpirationSeconds", $"{EXP_SECONDS}" }, { "AccessQueue:ActivitySeconds", $"{ACT_SECONDS}" }, { "AccessQueue:CapacityLimit", $"{CAP_LIMIT}" }, - { "AccessQueue:RollingExpiration", "true" }, - { "AccessQueue:CacheMilliseconds", $"{CACHE_MILLIS}" } + { "AccessQueue:RollingExpiration", "true" } }; var configuration = new ConfigurationBuilder() .AddInMemoryCollection(inMemorySettings) .Build(); - var accessQueueRepo = new TakeANumberAccessQueueRepo(); + var accessQueueRepo = new AccessQueueRepository(); var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole()); var logger = loggerFactory.CreateLogger(); _accessService = new AccessService(configuration, accessQueueRepo, logger); @@ -89,9 +87,9 @@ namespace AccessQueueServiceTests Assert.NotNull(response); Assert.Null(response.ExpiresOn); Assert.True(response.RequestsAhead == CAP_LIMIT); - Assert.Equal(CAP_LIMIT, _accessService.UnexpiredTicketsCount); - Assert.Equal(CAP_LIMIT, _accessService.ActiveTicketsCount); - Assert.Equal(CAP_LIMIT + 1, _accessService.QueueCount); + Assert.Equal(5, _accessService.UnexpiredTicketsCount); + Assert.Equal(5, _accessService.ActiveTicketsCount); + Assert.Equal(6, _accessService.QueueCount); }