using DysonNetwork.Pass.Account; using DysonNetwork.Pass.Account.Presences; using DysonNetwork.Pass.Credit; using DysonNetwork.Pass.Handlers; using DysonNetwork.Pass.Wallet; using Quartz; namespace DysonNetwork.Pass.Startup; public static class ScheduledJobsConfiguration { public static IServiceCollection AddAppScheduledJobs(this IServiceCollection services) { services.AddQuartz(q => { q.AddJob(opts => opts.WithIdentity("AppDatabaseRecycling")); q.AddTrigger(opts => opts .ForJob("AppDatabaseRecycling") .WithIdentity("AppDatabaseRecyclingTrigger") .WithCronSchedule("0 0 0 * * ?")); q.AddJob(opts => opts.WithIdentity("ActionLogFlush")); q.AddTrigger(opts => opts .ForJob("ActionLogFlush") .WithIdentity("ActionLogFlushTrigger") .WithSimpleSchedule(o => o .WithIntervalInMinutes(5) .RepeatForever()) ); q.AddJob(opts => opts.WithIdentity("LastActiveFlush")); q.AddTrigger(opts => opts .ForJob("LastActiveFlush") .WithIdentity("LastActiveFlushTrigger") .WithSimpleSchedule(o => o .WithIntervalInMinutes(5) .RepeatForever()) ); q.AddJob(opts => opts.WithIdentity("SubscriptionRenewal")); q.AddTrigger(opts => opts .ForJob("SubscriptionRenewal") .WithIdentity("SubscriptionRenewalTrigger") .WithSimpleSchedule(o => o .WithIntervalInMinutes(30) .RepeatForever()) ); q.AddJob(opts => opts.WithIdentity("GiftCleanup")); q.AddTrigger(opts => opts .ForJob("GiftCleanup") .WithIdentity("GiftCleanupTrigger") .WithSimpleSchedule(o => o .WithIntervalInHours(1) .RepeatForever()) ); q.AddJob(opts => opts.WithIdentity("FundExpiration")); q.AddTrigger(opts => opts .ForJob("FundExpiration") .WithIdentity("FundExpirationTrigger") .WithSimpleSchedule(o => o .WithIntervalInHours(1) .RepeatForever()) ); q.AddJob(opts => opts.WithIdentity("LotteryDraw")); q.AddTrigger(opts => opts .ForJob("LotteryDraw") .WithIdentity("LotteryDrawTrigger") .WithCronSchedule("0 0 0 * * ?")); q.AddJob(opts => opts.WithIdentity("SocialCreditValidation")); q.AddTrigger(opts => opts .ForJob("SocialCreditValidation") .WithIdentity("SocialCreditValidationTrigger") .WithCronSchedule("0 0 0 * * ?")); // Presence update jobs for different user stages q.AddJob(opts => opts.WithIdentity("ActivePresenceUpdate")); q.AddTrigger(opts => opts .ForJob("ActivePresenceUpdate") .WithIdentity("ActivePresenceUpdateTrigger") .WithSimpleSchedule(o => o .WithIntervalInMinutes(1) .RepeatForever()) .UsingJobData("stage", nameof(PresenceUpdateStage.Active)) ); q.AddJob(opts => opts.WithIdentity("MaybePresenceUpdate")); q.AddTrigger(opts => opts .ForJob("MaybePresenceUpdate") .WithIdentity("MaybePresenceUpdateTrigger") .WithSimpleSchedule(o => o .WithIntervalInMinutes(5) .RepeatForever()) .UsingJobData("stage", nameof(PresenceUpdateStage.Maybe)) ); q.AddJob(opts => opts.WithIdentity("ColdPresenceUpdate")); q.AddTrigger(opts => opts .ForJob("ColdPresenceUpdate") .WithIdentity("ColdPresenceUpdateTrigger") .WithSimpleSchedule(o => o .WithIntervalInMinutes(10) .RepeatForever()) .UsingJobData("stage", nameof(PresenceUpdateStage.Cold)) ); }); services.AddQuartzHostedService(q => q.WaitForJobsToComplete = true); return services; } }