defmodule StepFlow.Updates do @moduledoc """ The Updates context. """ import Ecto.Query, warn: false alias StepFlow.Jobs alias StepFlow.Jobs.Status alias StepFlow.Repo alias StepFlow.Updates.Update @doc """ Creates an update. ## Examples iex> create_update(%{field: value}) {:ok, %Update{}} iex> create_update(%{field: bad_value}) {:error, %Ecto.Changeset{}} """ def create_update(attrs \\ %{}) do %Update{} |> Update.changeset(attrs) |> Repo.insert() end def update_parameters(job, parameters) do job_parameters = job.parameters |> update_parameter(parameters) Jobs.update_job(job, %{parameters: job_parameters}) Status.set_job_status(job.id, :update, "Updating parameters") create_update(%{ job_id: job.id, datetime: NaiveDateTime.utc_now(), parameters: parameters }) end def update_parameter(job_parameters, [parameter | parameters]) do Enum.map(job_parameters, fn x -> if x["id"] == parameter.id do x |> Map.replace("value", parameter.value) else x end end) |> update_parameter(parameters) end def update_parameter(job_parameters, []), do: job_parameters end