Current section
Files
Jump to
Current section
Files
lib/snowhite/scheduler/schedule.ex
defmodule Snowhite.Scheduler.Schedule do
alias __MODULE__
defstruct name: nil, time: nil, message: nil, last_execution: nil
@type t :: %Schedule{
name: schedule_id(),
time: time_def(),
message: message_def(),
last_execution: NaiveDateTime.t() | nil
}
@type schedule_id :: String.t() | atom()
@type time_def :: {:at, Time.t()}
@type message_def :: {pid(), any()}
@spec new(schedule_id(), time_def(), message_def()) :: t()
def new(name, time, message) do
%Schedule{name: name, time: time, message: message}
end
@spec should_run?(t(), Time.t()) :: boolean()
def should_run?(%Schedule{time: {:at, time}}, current_time),
do: Time.diff(time, current_time) == 0
def put_last_execution(%Schedule{} = schedule, date) do
%Schedule{schedule | last_execution: date}
end
end