Skip to content

Commit 8a372ba

Browse files
authored
Merge pull request #48 from skni-kod/feature/#47-hangfire-implementation
Hangfire implementation
2 parents ded8675 + bca07de commit 8a372ba

File tree

8 files changed

+58
-22
lines changed

8 files changed

+58
-22
lines changed

skit.API/Program.cs

+3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using FluentValidation.AspNetCore;
2+
using Hangfire;
23
using skit.API.Extensions;
34
using skit.API.Filters;
45
using skit.Application;
@@ -50,6 +51,8 @@
5051
app.UseAuthentication();
5152
app.UseAuthorization();
5253

54+
app.UseHangfireDashboard();
55+
5356
app.MapControllers();
5457

5558
app.Run();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using System.Linq.Expressions;
2+
3+
namespace skit.Core.BackgroundProcessing.Services;
4+
5+
public interface IHangfireService
6+
{
7+
void ScheduleEveryMinute(string jobId, Expression<Action> methodCall);
8+
void ScheduleEveryDay(string jobId, Expression<Action> methodCall);
9+
void RemoveIfExists(string jobId);
10+
}

skit.Infrastructure/Common/Extension.cs

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
using Microsoft.Extensions.Configuration;
2-
using Microsoft.Extensions.DependencyInjection;
1+
using Microsoft.Extensions.DependencyInjection;
2+
using skit.Core.BackgroundProcessing.Services;
33
using skit.Core.Common.Services;
44
using skit.Infrastructure.Common.Services;
55

@@ -11,6 +11,7 @@ public static IServiceCollection AddCommonInfrastructure(this IServiceCollection
1111
{
1212
services.AddScoped<IDateService, DateService>();
1313
services.AddScoped<ICurrentUserService, CurrentUserService>();
14+
services.AddScoped<IHangfireService, HangfireService>();
1415

1516
return services;
1617
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using System.Linq.Expressions;
2+
using Hangfire;
3+
using Hangfire.Common;
4+
using skit.Core.BackgroundProcessing.Services;
5+
6+
namespace skit.Infrastructure.Common.Services;
7+
8+
public sealed class HangfireService : IHangfireService
9+
{
10+
private const string RecurringEveryMinute = "* * * * *";
11+
private const string RecurringEveryDay = "0 0 * * *";
12+
13+
public void ScheduleEveryMinute(string jobId, Expression<Action> methodCall)
14+
{
15+
var manager = new RecurringJobManager();
16+
manager.AddOrUpdate(jobId, Job.FromExpression(methodCall), RecurringEveryMinute);
17+
}
18+
19+
public void ScheduleEveryDay(string jobId, Expression<Action> methodCall)
20+
{
21+
var manager = new RecurringJobManager();
22+
manager.AddOrUpdate(jobId, Job.FromExpression(methodCall), RecurringEveryDay);
23+
}
24+
25+
public void RemoveIfExists(string jobId)
26+
{
27+
var manager = new RecurringJobManager();
28+
manager.RemoveIfExists(jobId);
29+
}
30+
}

skit.Infrastructure/DAL/Extension.cs

+1-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
using System.Reflection;
2-
using FluentValidation;
3-
using Microsoft.Extensions.Configuration;
1+
using Microsoft.Extensions.Configuration;
42
using Microsoft.Extensions.DependencyInjection;
53
using Microsoft.Extensions.Logging;
64
using skit.Core.Addresses.Repositories;
@@ -16,7 +14,6 @@
1614
using skit.Infrastructure.DAL.Identity.Services;
1715
using skit.Infrastructure.DAL.Offers.Repositories;
1816
using skit.Infrastructure.DAL.Technologies.Repositories;
19-
using skit.Infrastructure.Integrations.Emails.Configuration;
2017

2118
namespace skit.Infrastructure.DAL;
2219

skit.Infrastructure/Extensions.cs

+8-13
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,12 @@
11
using System.Reflection;
22
using FluentValidation;
3-
using MediatR;
4-
using Microsoft.EntityFrameworkCore;
3+
using Hangfire;
4+
using Hangfire.PostgreSql;
55
using Microsoft.Extensions.Configuration;
66
using Microsoft.Extensions.DependencyInjection;
7-
using Microsoft.Extensions.Logging;
8-
using skit.Core.Addresses.Repositories;
9-
using skit.Core.Common.Services;
10-
using skit.Core.Companies.Repositories;
11-
using skit.Core.Identity.Services;
127
using skit.Infrastructure.Common;
13-
using skit.Infrastructure.Common.Services;
148
using skit.Infrastructure.DAL;
15-
using skit.Infrastructure.DAL.Companies;
16-
using skit.Infrastructure.DAL.Companies.Repositories;
17-
using skit.Infrastructure.DAL.EF.Context;
18-
using skit.Infrastructure.DAL.Identity.Services;
199
using skit.Infrastructure.Integrations;
20-
using skit.Infrastructure.Integrations.Emails.Configuration;
2110

2211
namespace skit.Infrastructure;
2312

@@ -27,6 +16,12 @@ public static IServiceCollection AddInfrastructure(this IServiceCollection servi
2716
{
2817
services.AddMediatR(cfg=>cfg.RegisterServicesFromAssemblies(Assembly.GetExecutingAssembly()));
2918
services.AddValidatorsFromAssembly(Assembly.GetExecutingAssembly());
19+
services.AddHangfire(config => config
20+
.SetDataCompatibilityLevel(CompatibilityLevel.Version_180)
21+
.UseSimpleAssemblyNameTypeSerializer()
22+
.UseRecommendedSerializerSettings()
23+
.UsePostgreSqlStorage(configuration.GetConnectionString("DatabaseConnection")));
24+
services.AddHangfireServer();
3025

3126
services.AddCommonInfrastructure();
3227
services.AddDal(configuration);

skit.Infrastructure/Integrations/Extension.cs

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
using System.Reflection;
2-
using FluentValidation;
3-
using Microsoft.Extensions.Configuration;
1+
using Microsoft.Extensions.Configuration;
42
using Microsoft.Extensions.DependencyInjection;
53
using skit.Core.Emails.Services;
64
using skit.Core.Files.Services;

skit.Infrastructure/skit.Infrastructure.csproj

+2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
<ItemGroup>
1010
<PackageReference Include="AWSSDK.S3" Version="3.7.304.7" />
1111
<PackageReference Include="FluentValidation.DependencyInjectionExtensions" Version="11.5.1" />
12+
<PackageReference Include="Hangfire" Version="1.8.6" />
13+
<PackageReference Include="Hangfire.PostgreSql" Version="1.20.4" />
1214
<PackageReference Include="MailKit" Version="4.3.0" />
1315
<PackageReference Include="MediatR" Version="12.1.1" />
1416
<PackageReference Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="11.1.0" />

0 commit comments

Comments
 (0)