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);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddSingleton<IAccessService, AccessService>();
builder.Services.AddSingleton<IAccessQueueRepo, TakeANumberAccessQueueRepo>();
builder.Services.AddHostedService<AccessCleanupBackgroundService>();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();

View File

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

View File

@ -1,4 +1,5 @@
using AccessQueueService.Data;
using System.Threading.Tasks;
using AccessQueueService.Data;
using AccessQueueService.Models;
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<bool> RevokeAccess(string userId);
public int DeleteExpiredTickets();
public Task<int> DeleteExpiredTickets();
}
}