feat: Enhance network membership and withdrawal processing with user tracking and logging
This commit is contained in:
@@ -10,6 +10,8 @@ using Serilog;
|
||||
using System.Reflection;
|
||||
using Microsoft.OpenApi.Models;
|
||||
using CMSMicroservice.WebApi.Common.Behaviours;
|
||||
using Hangfire;
|
||||
using Hangfire.SqlServer;
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
var levelSwitch = new LoggingLevelSwitch();
|
||||
@@ -50,6 +52,23 @@ builder.Services.AddInfrastructureServices(builder.Configuration);
|
||||
builder.Services.AddPresentationServices(builder.Configuration);
|
||||
builder.Services.AddProtobufServices();
|
||||
|
||||
#region Configure Hangfire
|
||||
builder.Services.AddHangfire(config => config
|
||||
.SetDataCompatibilityLevel(CompatibilityLevel.Version_180)
|
||||
.UseSimpleAssemblyNameTypeSerializer()
|
||||
.UseRecommendedSerializerSettings()
|
||||
.UseSqlServerStorage(builder.Configuration["ConnectionStrings:DefaultConnection"]));
|
||||
builder.Services.AddHangfireServer();
|
||||
#endregion
|
||||
|
||||
#region Configure Health Checks
|
||||
builder.Services.AddHealthChecks()
|
||||
.AddDbContextCheck<ApplicationDbContext>("database");
|
||||
#endregion
|
||||
|
||||
// Add Controllers for REST APIs
|
||||
builder.Services.AddControllers();
|
||||
|
||||
#region Configure Cors
|
||||
|
||||
builder.Services.AddCors(options =>
|
||||
@@ -120,6 +139,18 @@ app.UseRouting();
|
||||
app.UseCors("AllowAll");
|
||||
app.UseAuthentication();
|
||||
app.UseAuthorization();
|
||||
|
||||
// Map Health Check endpoints
|
||||
app.MapHealthChecks("/health");
|
||||
app.MapHealthChecks("/health/ready", new Microsoft.AspNetCore.Diagnostics.HealthChecks.HealthCheckOptions
|
||||
{
|
||||
Predicate = check => check.Tags.Contains("ready")
|
||||
});
|
||||
app.MapHealthChecks("/health/live", new Microsoft.AspNetCore.Diagnostics.HealthChecks.HealthCheckOptions
|
||||
{
|
||||
Predicate = _ => false
|
||||
});
|
||||
app.MapControllers();
|
||||
app.UseGrpcWeb(new GrpcWebOptions { DefaultEnabled = true }); // Configure the HTTP request pipeline.
|
||||
app.ConfigureGrpcEndpoints(Assembly.GetExecutingAssembly(), endpoints =>
|
||||
{
|
||||
@@ -132,4 +163,30 @@ app.UseSwaggerUI(c =>
|
||||
{
|
||||
c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
|
||||
});
|
||||
|
||||
// Configure Hangfire Dashboard
|
||||
app.UseHangfireDashboard("/hangfire", new Hangfire.DashboardOptions
|
||||
{
|
||||
// TODO: برای production از Authorization filter استفاده کنید
|
||||
Authorization = Array.Empty<Hangfire.Dashboard.IDashboardAuthorizationFilter>()
|
||||
});
|
||||
|
||||
// Configure Recurring Jobs
|
||||
using (var scope = app.Services.CreateScope())
|
||||
{
|
||||
var recurringJobManager = scope.ServiceProvider.GetRequiredService<IRecurringJobManager>();
|
||||
|
||||
// Weekly Commission Calculation: Every Sunday at 00:05 (UTC)
|
||||
recurringJobManager.AddOrUpdate<CMSMicroservice.Infrastructure.BackgroundJobs.WeeklyCommissionJob>(
|
||||
recurringJobId: "weekly-commission-calculation",
|
||||
methodCall: job => job.ExecuteAsync(CancellationToken.None),
|
||||
cronExpression: "5 0 * * 0", // Sunday at 00:05
|
||||
options: new RecurringJobOptions
|
||||
{
|
||||
TimeZone = TimeZoneInfo.Utc
|
||||
});
|
||||
|
||||
app.Logger.LogInformation("✅ Hangfire recurring job 'weekly-commission-calculation' registered (Cron: 5 0 * * 0 - Sunday 00:05 UTC)");
|
||||
}
|
||||
|
||||
app.Run();
|
||||
|
||||
Reference in New Issue
Block a user