diff --git a/src/Server/Program.cs b/src/Server/Program.cs index 62bb7ac..c6d917f 100755 --- a/src/Server/Program.cs +++ b/src/Server/Program.cs @@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.IdentityModel.Tokens; using System.IdentityModel.Tokens.Jwt; using System.Security.Cryptography; +using BoredCareers.Services.TimerService; var builder = WebApplication.CreateBuilder(args); @@ -35,8 +36,15 @@ string? _dbpass = Environment.GetEnvironmentVariable("MySQLPass"); string dbPass = !string.IsNullOrEmpty(_dbpass) ? _dbpass : "oasv34$8gpv023dd"; // Create the database serivice -DatabaseService databaseService = new DatabaseService(connectionString: "server=" + dbserver + ";user=" + dbUser + ";database=" + dbdatabase + ";password=" + dbPass + ";port=3306;"); -builder.Services.Add( new ServiceDescriptor( typeof( DatabaseService ), databaseService ) ); +builder.Services.AddSingleton(sp => + new DatabaseService("server=" + dbserver + ";user=" + dbUser + ";database=" + dbdatabase + ";password=" + dbPass + ";port=3306;") +); + +//////////////////////////////// +/////// Timer Service /////// +//////////////////////////////// + +builder.Services.AddHostedService(); //////////////////////////////// ///////// Email Service //////// diff --git a/src/Server/Services/TimerServcie/JobCleanupService.cs b/src/Server/Services/TimerServcie/JobCleanupService.cs new file mode 100644 index 0000000..5d492b6 --- /dev/null +++ b/src/Server/Services/TimerServcie/JobCleanupService.cs @@ -0,0 +1,29 @@ +using BoredCareers.Entities; + +namespace BoredCareers.Services.TimerService { + public class JobCleanupService : BackgroundService { + + private readonly DatabaseService.DatabaseService _db; + + public JobCleanupService(DatabaseService.DatabaseService db) { + _db = db; + } + + protected override async Task ExecuteAsync(CancellationToken stoppingToken) { + while (!stoppingToken.IsCancellationRequested) { + try { + JobListing[] deletedJobListings = await _db.GetJobListingsPastExipre(); + await _db.DeleteJobListingsPastExipre(); + foreach (JobListing listing in deletedJobListings) { + // Get applicants for each closed listing + // Notify applicants of the listing closing + // Mark company for auto-closed job -> ghost listing + } + } catch (Exception e) { + Console.WriteLine($"Error: {e.Message}"); + } + await Task.Delay(TimeSpan.FromHours(24), stoppingToken); + } + } + } +}