Merge pull request 'Fix #2 - RequestsAhead not recalculating correctly' (#3) from requests-ahead-bug into main

Reviewed-on: https://git.hobbs.zone/henry/AccessQueueService/pulls/3
This commit is contained in:
henry 2025-05-12 22:22:41 +00:00
commit 036168359b
4 changed files with 18 additions and 6 deletions

View File

@ -12,7 +12,7 @@ namespace AccessQueueService.Data
public int GetActiveTicketsCount(DateTime activeCutoff) => _accessTickets public int GetActiveTicketsCount(DateTime activeCutoff) => _accessTickets
.Count(t => t.Value.ExpiresOn > DateTime.UtcNow && t.Value.LastActive >activeCutoff); .Count(t => t.Value.ExpiresOn > DateTime.UtcNow && t.Value.LastActive >activeCutoff);
public int GetQueueCount() => _accessQueue.Count; public int GetQueueCount() => _accessQueue.Count;
public int IndexOfTicket(Guid userId) public int GetRequestsAhead(Guid userId)
{ {
var index = 0; var index = 0;
foreach (var ticket in _accessQueue) foreach (var ticket in _accessQueue)

View File

@ -10,7 +10,7 @@ namespace AccessQueueService.Data
public int GetQueueCount(); public int GetQueueCount();
public AccessTicket? GetTicket(Guid userId); public AccessTicket? GetTicket(Guid userId);
public void UpsertTicket(AccessTicket ticket); public void UpsertTicket(AccessTicket ticket);
public int IndexOfTicket(Guid userId); public int GetRequestsAhead(Guid userId);
public void Enqueue(AccessTicket ticket); public void Enqueue(AccessTicket ticket);
public int DeleteExpiredTickets(); public int DeleteExpiredTickets();
public bool RemoveUser(Guid userId); public bool RemoveUser(Guid userId);

View File

@ -68,9 +68,8 @@ namespace AccessQueueService.Services
} }
else else
{ {
var indexOfTicket = _accessQueueRepo.IndexOfTicket(userId); var requestsAhead = _accessQueueRepo.GetRequestsAhead(userId);
var requestsAhead = _accessQueueRepo.GetQueueCount() - indexOfTicket - 1; if (requestsAhead == -1)
if (indexOfTicket == -1)
{ {
_accessQueueRepo.Enqueue(new AccessTicket _accessQueueRepo.Enqueue(new AccessTicket
{ {
@ -82,7 +81,7 @@ namespace AccessQueueService.Services
return new AccessResponse return new AccessResponse
{ {
ExpiresOn = null, ExpiresOn = null,
RequestsAhead = requestsAhead RequestsAhead = _accessQueueRepo.GetQueueCount() - 1
}; };
} }
} }

View File

@ -245,6 +245,19 @@ namespace AccessQueueServiceTests
Assert.Equal(0, response.RequestsAhead); Assert.Equal(0, response.RequestsAhead);
} }
[Fact]
public async Task RequestAccess_ShouldShowCorrectRequestsAhead_WhenAccessRerequested()
{
for (int i = 0; i < CAP_LIMIT + 3; i++)
{
await _accessService.RequestAccess(Guid.NewGuid());
}
var id = Guid.NewGuid();
var response = await _accessService.RequestAccess(id);
Assert.Equal(3, response.RequestsAhead);
response = await _accessService.RequestAccess(id);
Assert.Equal(3, response?.RequestsAhead);
}
} }
} }
} }