From 4e432c8a5be8917c0719283d141a0bc5632f88a3 Mon Sep 17 00:00:00 2001 From: Vzart Date: Tue, 6 Jun 2023 15:56:55 +0700 Subject: [PATCH 1/3] feat: add worker service for handling overdue borrow request --- src/Api/ConfigureServices.cs | 2 +- src/Api/Services/BorrowRequestService.cs | 44 ++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 src/Api/Services/BorrowRequestService.cs diff --git a/src/Api/ConfigureServices.cs b/src/Api/ConfigureServices.cs index 4c4f747f..1eae72fe 100644 --- a/src/Api/ConfigureServices.cs +++ b/src/Api/ConfigureServices.cs @@ -14,7 +14,7 @@ public static IServiceCollection AddApiServices(this IServiceCollection services { // Register services services.AddServices(); - + services.AddHostedService(); services.AddControllers(opt => opt.Conventions.Add(new RouteTokenTransformerConvention(new SlugifyParameterTransformer()))); diff --git a/src/Api/Services/BorrowRequestService.cs b/src/Api/Services/BorrowRequestService.cs new file mode 100644 index 00000000..84e0c90f --- /dev/null +++ b/src/Api/Services/BorrowRequestService.cs @@ -0,0 +1,44 @@ +using Application.Common.Interfaces; +using Domain.Statuses; +using Infrastructure.Persistence; +using NodaTime; + +namespace Api.Services; + +public class BorrowRequestService : BackgroundService +{ + private readonly IServiceProvider _serviceProvider; + + public BorrowRequestService(IServiceProvider serviceProvider) + { + _serviceProvider = serviceProvider; + } + + protected override async Task ExecuteAsync(CancellationToken stoppingToken) + { + + while (!stoppingToken.IsCancellationRequested) + { + using (var scope = _serviceProvider.CreateScope()) + { + var localDateTimeNow = LocalDateTime.FromDateTime(DateTime.Now); + 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.Update(request); + } + + await context.SaveChangesAsync(stoppingToken); + Console.WriteLine("fuck you chien ngu"); + await Task.Delay(TimeSpan.FromMinutes(20), stoppingToken); + } + } + } +} \ No newline at end of file From 75f39d996127d45b2bdc6f464b914a665ac6448a Mon Sep 17 00:00:00 2001 From: Vzart Date: Tue, 6 Jun 2023 22:49:31 +0700 Subject: [PATCH 2/3] fix: sorry chien san --- src/Api/Services/BorrowRequestService.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Api/Services/BorrowRequestService.cs b/src/Api/Services/BorrowRequestService.cs index 84e0c90f..556d7d86 100644 --- a/src/Api/Services/BorrowRequestService.cs +++ b/src/Api/Services/BorrowRequestService.cs @@ -36,7 +36,6 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken) } await context.SaveChangesAsync(stoppingToken); - Console.WriteLine("fuck you chien ngu"); await Task.Delay(TimeSpan.FromMinutes(20), stoppingToken); } } From d588b45fed9687009e83fa5fa3b9fbcb7f3771cf Mon Sep 17 00:00:00 2001 From: Vzart Date: Sat, 10 Jun 2023 09:51:20 +0700 Subject: [PATCH 3/3] fix: resolve problems --- src/Api/ConfigureServices.cs | 9 ++++++++- src/Api/Services/BorrowRequestService.cs | 6 +++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/Api/ConfigureServices.cs b/src/Api/ConfigureServices.cs index 1eae72fe..632e6ef5 100644 --- a/src/Api/ConfigureServices.cs +++ b/src/Api/ConfigureServices.cs @@ -14,7 +14,7 @@ public static IServiceCollection AddApiServices(this IServiceCollection services { // Register services services.AddServices(); - services.AddHostedService(); + services.AddBackgroundServices(); services.AddControllers(opt => opt.Conventions.Add(new RouteTokenTransformerConvention(new SlugifyParameterTransformer()))); @@ -59,4 +59,11 @@ private static IServiceCollection AddServices(this IServiceCollection services) return services; } + + private static IServiceCollection AddBackgroundServices(this IServiceCollection services) + { + services.AddHostedService(); + + return services; + } } \ No newline at end of file diff --git a/src/Api/Services/BorrowRequestService.cs b/src/Api/Services/BorrowRequestService.cs index 556d7d86..fc436b12 100644 --- a/src/Api/Services/BorrowRequestService.cs +++ b/src/Api/Services/BorrowRequestService.cs @@ -32,11 +32,11 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken) foreach (var request in overdueRequests) { request.Status = BorrowRequestStatus.Overdue; - context.Borrows.Update(request); } - + context.UpdateRange(overdueRequests); + await context.SaveChangesAsync(stoppingToken); - await Task.Delay(TimeSpan.FromMinutes(20), stoppingToken); + await Task.Delay(TimeSpan.FromMinutes(2), stoppingToken); } } }