Compare commits

..

2 Commits

Author SHA1 Message Date
henry 3dc21bc54d remove comments 2025-05-16 20:43:25 -04:00
henry a6980252c0 thread safety for background service 2025-05-16 20:36:53 -04:00
4 changed files with 16 additions and 9 deletions

View File

@ -3,20 +3,15 @@ using AccessQueueService.Services;
var builder = WebApplication.CreateBuilder(args); var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers(); builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer(); builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(); builder.Services.AddSwaggerGen();
builder.Services.AddSingleton<IAccessService, AccessService>(); builder.Services.AddSingleton<IAccessService, AccessService>();
builder.Services.AddSingleton<IAccessQueueRepo, TakeANumberAccessQueueRepo>(); builder.Services.AddSingleton<IAccessQueueRepo, TakeANumberAccessQueueRepo>();
builder.Services.AddHostedService<AccessCleanupBackgroundService>(); builder.Services.AddHostedService<AccessCleanupBackgroundService>();
var app = builder.Build(); var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment()) if (app.Environment.IsDevelopment())
{ {
app.UseSwagger(); app.UseSwagger();

View File

@ -17,7 +17,7 @@ namespace AccessQueueService.Services
var cleanupIntervalMillis = _config.GetValue<int>("AccessQueue:CleanupIntervalSeconds") * 1000; var cleanupIntervalMillis = _config.GetValue<int>("AccessQueue:CleanupIntervalSeconds") * 1000;
while (!stoppingToken.IsCancellationRequested) while (!stoppingToken.IsCancellationRequested)
{ {
_accessService.DeleteExpiredTickets(); await _accessService.DeleteExpiredTickets();
await Task.Delay(cleanupIntervalMillis, stoppingToken); await Task.Delay(cleanupIntervalMillis, stoppingToken);
} }
} }

View File

@ -1,4 +1,5 @@
using AccessQueueService.Data; using System.Threading.Tasks;
using AccessQueueService.Data;
using AccessQueueService.Models; using AccessQueueService.Models;
namespace AccessQueueService.Services namespace AccessQueueService.Services
@ -106,6 +107,17 @@ namespace AccessQueueService.Services
} }
} }
public int DeleteExpiredTickets() => _accessQueueRepo.DeleteExpiredTickets(); public async Task<int> DeleteExpiredTickets()
{
await _queueLock.WaitAsync();
try
{
return _accessQueueRepo.DeleteExpiredTickets();
}
finally
{
_queueLock.Release();
}
}
} }
} }

View File

@ -6,6 +6,6 @@ namespace AccessQueueService.Services
{ {
public Task<AccessResponse> RequestAccess(string userId); public Task<AccessResponse> RequestAccess(string userId);
public Task<bool> RevokeAccess(string userId); public Task<bool> RevokeAccess(string userId);
public int DeleteExpiredTickets(); public Task<int> DeleteExpiredTickets();
} }
} }