diff --git a/ProjectLighthouse/Maintenance/MaintenanceJobs/CleanupUnusedLocationsMaintenanceJob.cs b/ProjectLighthouse/Maintenance/MaintenanceJobs/CleanupUnusedLocationsMaintenanceJob.cs new file mode 100644 index 00000000..9bce8028 --- /dev/null +++ b/ProjectLighthouse/Maintenance/MaintenanceJobs/CleanupUnusedLocationsMaintenanceJob.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace LBPUnion.ProjectLighthouse.Maintenance.MaintenanceJobs +{ + public class CleanupUnusedLocationsMaintenanceJob : IMaintenanceJob + { + private readonly Database database = new(); + public string Name() => "Cleanup Unused Locations"; + public string Description() => "Cleanup unused locations in the database."; + + public Task Run() + { + List usedLocationIds = new(); + + usedLocationIds.AddRange(this.database.Slots.Select(slot => slot.LocationId)); + usedLocationIds.AddRange(this.database.Users.Select(user => user.LocationId)); + + this.database.RemoveRange(this.database.Locations.Where(l => !usedLocationIds.Contains(l.Id))); + return Task.CompletedTask; + } + } +} \ No newline at end of file