app/mutations/farm_events/clean_expired.rb
module FarmEvents
class CleanExpired < Mutations::Command
include FarmEvents::ExecutableHelpers
required do
model :device, class: Device
end
def execute
if device.timezone
clean_regular_events
clean_regimen_events
end
end
private
def clean_regular_events
device
.farm_events
.where
.not(executable_type: "Regimen")
.where("end_time < ?", DateTime.now)
.map(&:destroy!)
end
def timezone
@timezone ||= device.timezone or raise "Set Timezone Please"
end
def now
@now ||= DateTime.now.in_time_zone(timezone)
end
Info = Struct.new(:fe, :reg, :should_destroy?)
def clean_regimen_events
device
.farm_events
.where(executable_type: "Regimen")
.map do |x|
reg_items = x.executable.regimen_items || RegimenItem.none
max_offset = (reg_items.pluck(:time_offset).max || 0) / 1000
local_start = x.start_time.in_time_zone(timezone)
a = local_start < now
b = (local_start.midnight + max_offset) < now
should_destroy = a && b
Info.new(x, x.executable, should_destroy)
end
.select { |x| x.should_destroy? }
.map { |x| x.fe.destroy! }
end
end
end