25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
# File 'app/services/collavre/tools/cron_update_service.rb', line 25
def call(key:, schedule: nil, message: nil, description: nil)
raise "Current.user is required" unless Current.user
task = SolidQueue::RecurringTask.find_by(key: key, static: false)
return { error: "Cron job not found", key: key } unless task
args = parse_arguments(task)
creative_id = args["creative_id"] || parse_creative_id_from_key(key)
creative = Creative.find_by(id: creative_id)
unless creative&.has_permission?(Current.user, :write)
return { error: "No write permission to update this cron job", key: key }
end
if schedule.present?
parsed = Fugit.parse(schedule)
unless parsed.is_a?(Fugit::Cron)
return { error: "Invalid cron schedule: #{schedule}. Use cron syntax like '0 9 * * *'." }
end
task.schedule = schedule
end
if message.present?
new_args = args.merge("message" => message)
task.arguments = [ new_args.symbolize_keys ]
end
task.description = description if description.present?
unless task.save
return { error: "Failed to update cron job", details: task.errors.full_messages }
end
{
success: true,
key: task.key,
schedule: task.schedule,
description: task.description,
next_run: task.next_time&.iso8601
}
end
|