Storage behaviour for job persistence.
Configure the implementation via config :kathikon, storage_backend: module.
Phase 1 ships Kathikon.Backend.Storage.Mnesia.
Summary
Callbacks
@callback all() :: [Kathikon.Job.t()]
@callback claim(atom(), DateTime.t()) :: {:ok, Kathikon.Job.t()} | :not_found | {:error, term()}
@callback clear_jobs!() :: :ok
@callback delete(String.t()) :: :ok
@callback fetch(String.t()) :: {:ok, Kathikon.Job.t()} | {:error, term()}
@callback insert(Kathikon.Job.t()) :: {:ok, Kathikon.Job.t()} | {:error, term()}
@callback promote_scheduled(DateTime.t()) :: non_neg_integer()
@callback prunable_jobs(DateTime.t()) :: [Kathikon.Job.t()]
@callback reset!() :: :ok
@callback setup() :: :ok
@callback update(Kathikon.Job.t()) :: {:ok, Kathikon.Job.t()} | {:error, term()}