Files
2025-09-19 12:18:45 +10:00

66 lines
2.3 KiB
C#

using Disco.Data.Repository;
using Disco.Services.Tasks;
using Quartz;
using System;
using System.Data.Entity;
using System.Linq;
namespace Disco.Services.Devices.DeviceFlags
{
public class FlagRemovalTask : ScheduledTask
{
public override string TaskName { get; } = "Flags - Scheduled Removal";
public override bool SingleInstanceTask { get; } = false;
public override bool CancelInitiallySupported { get; } = false;
public override bool LogExceptionsOnly { get; } = true;
public override void InitalizeScheduledTask(DiscoDataContext Database)
{
// Schedule in 1mins
var trigger = TriggerBuilder.Create()
.StartAt(DateTimeOffset.Now.AddMinutes(1));
ScheduleTask(trigger);
// Schedule every day at midnight
trigger = TriggerBuilder.Create()
.WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(0, 0));
ScheduleTask(trigger);
}
protected override void ExecuteTask()
{
using (DiscoDataContext database = new DiscoDataContext())
{
var assignments = database.DeviceFlagAssignments
.Include(a => a.RemoveUser)
.Include(a => a.AddedUser)
.Where(a => a.RemovedDate == null && a.RemoveDate <= DateTime.Today)
.ToList();
foreach (var assignment in assignments)
{
assignment.OnRemoveUnsafe(database, assignment.RemoveUser ?? assignment.AddedUser, isScheduled: true);
}
database.SaveChanges();
}
using (DiscoDataContext database = new DiscoDataContext())
{
var assignments = database.UserFlagAssignments
.Include(a => a.RemoveUser)
.Include(a => a.AddedUser)
.Where(a => a.RemovedDate == null && a.RemoveDate <= DateTime.Today)
.ToList();
foreach (var assignment in assignments)
{
assignment.OnRemoveUnsafe(database, assignment.RemoveUser ?? assignment.AddedUser, isScheduled: true);
}
database.SaveChanges();
}
}
}
}