diff --git a/src/Api/Services/BackgroundWorkers.cs b/src/Api/Services/BackgroundWorkers.cs index 9ae66e23..baf37b11 100644 --- a/src/Api/Services/BackgroundWorkers.cs +++ b/src/Api/Services/BackgroundWorkers.cs @@ -1,4 +1,5 @@ using Application.Common.Interfaces; +using Domain.Statuses; using Microsoft.EntityFrameworkCore; using NodaTime; @@ -20,7 +21,8 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken) var workers = new List { DisposeExpiredEntries(TimeSpan.FromSeconds(10), stoppingToken), - DisposeExpiredPermissions(TimeSpan.FromSeconds(10), stoppingToken) + DisposeExpiredPermissions(TimeSpan.FromSeconds(10), stoppingToken), + HandleOverdueRequest(TimeSpan.FromMinutes(2),stoppingToken), }; await Task.WhenAll(workers.ToArray()); @@ -51,4 +53,25 @@ private async Task DisposeExpiredPermissions(TimeSpan delay, CancellationToken s await context.SaveChangesAsync(stoppingToken); await Task.Delay(delay, stoppingToken); } + + private async Task HandleOverdueRequest(TimeSpan delay, CancellationToken stoppingToken) + { + var localDateTimeNow = LocalDateTime.FromDateTime(DateTime.Now); + using var scope = _serviceProvider.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + var overdueRequests = context.Borrows + .Where(x => x.Status != BorrowRequestStatus.Overdue + && x.Status == BorrowRequestStatus.CheckedOut + && x.DueTime < localDateTimeNow) + .ToList(); + + foreach (var request in overdueRequests) + { + request.Status = BorrowRequestStatus.Overdue; + } + context.Borrows.UpdateRange(overdueRequests); + + await context.SaveChangesAsync(stoppingToken); + await Task.Delay(delay, stoppingToken); + } } \ No newline at end of file diff --git a/src/Application/Loggings/Queries/GetAllLogsPaginated.cs b/src/Application/Loggings/Queries/GetAllLogsPaginated.cs index caced59e..9ee82c0d 100644 --- a/src/Application/Loggings/Queries/GetAllLogsPaginated.cs +++ b/src/Application/Loggings/Queries/GetAllLogsPaginated.cs @@ -47,7 +47,7 @@ public async Task> Handle(Query request, CancellationToken if (!(request.SearchTerm is null || request.SearchTerm.Trim().Equals(string.Empty))) { - logs = logs.Where(x => x.Message!.Contains(request.SearchTerm.Trim().ToLower())); + logs = logs.Where(x => x.Message!.ToLower().Contains(request.SearchTerm.Trim().ToLower())); } var pageNumber = request.Page is null or <= 0 ? 1 : request.Page;