fixed delete ScheduledActivity

This commit is contained in:
Maksim Pechnikov 2020-01-23 17:18:23 +03:00
parent 5fc2fa8908
commit 8589632d09
2 changed files with 22 additions and 31 deletions

View File

@ -121,13 +121,7 @@ def create(%User{} = user, attrs) do
|> Multi.insert(:scheduled_activity, new(user, attrs)) |> Multi.insert(:scheduled_activity, new(user, attrs))
|> maybe_add_jobs(Config.get([ScheduledActivity, :enabled])) |> maybe_add_jobs(Config.get([ScheduledActivity, :enabled]))
|> Repo.transaction() |> Repo.transaction()
|> case do |> transaction_response
{:ok, %{scheduled_activity: scheduled_activity}} ->
{:ok, scheduled_activity}
{:error, _, changeset, _} ->
{:error, changeset}
end
end end
defp maybe_add_jobs(multi, true) do defp maybe_add_jobs(multi, true) do
@ -159,34 +153,32 @@ def update(%ScheduledActivity{id: id} = scheduled_activity, attrs) do
set: [scheduled_at: get_field(changeset, :scheduled_at)] set: [scheduled_at: get_field(changeset, :scheduled_at)]
) )
|> Repo.transaction() |> Repo.transaction()
|> case do |> transaction_response
{:ok, %{scheduled_activity: scheduled_activity}} ->
{:ok, scheduled_activity}
{:error, _, changeset, _} ->
{:error, changeset}
end
end end
end end
def delete_job(%ScheduledActivity{id: id} = _scheduled_activity) do @doc "Deletes a ScheduledActivity and linked jobs."
id @spec delete(ScheduledActivity.t() | binary() | integer) ::
|> job_query {:ok, ScheduledActivity.t()} | {:error, Ecto.Changeset.t()}
|> Repo.delete_all() def delete(%ScheduledActivity{id: id} = scheduled_activity) do
end Multi.new()
|> Multi.delete(:scheduled_activity, scheduled_activity, stale_error_field: :id)
def delete(%ScheduledActivity{} = scheduled_activity) do |> Multi.delete_all(:jobs, job_query(id))
Repo.delete(scheduled_activity) |> Repo.transaction()
|> transaction_response
end end
def delete(id) when is_binary(id) or is_integer(id) do def delete(id) when is_binary(id) or is_integer(id) do
ScheduledActivity delete(%__MODULE__{id: id})
|> where(id: ^id) end
|> select([sa], sa)
|> Repo.delete_all() defp transaction_response(result) do
|> case do case result do
{1, [scheduled_activity]} -> {:ok, scheduled_activity} {:ok, %{scheduled_activity: scheduled_activity}} ->
_ -> :error {:ok, scheduled_activity}
{:error, _, changeset, _} ->
{:error, changeset}
end end
end end

View File

@ -45,8 +45,7 @@ def update(%{assigns: %{scheduled_activity: scheduled_activity}} = conn, params)
@doc "DELETE /api/v1/scheduled_statuses/:id" @doc "DELETE /api/v1/scheduled_statuses/:id"
def delete(%{assigns: %{scheduled_activity: scheduled_activity}} = conn, _params) do def delete(%{assigns: %{scheduled_activity: scheduled_activity}} = conn, _params) do
with {:ok, scheduled_activity} <- ScheduledActivity.delete(scheduled_activity), with {:ok, scheduled_activity} <- ScheduledActivity.delete(scheduled_activity) do
_ <- ScheduledActivity.delete_job(scheduled_activity) do
render(conn, "show.json", scheduled_activity: scheduled_activity) render(conn, "show.json", scheduled_activity: scheduled_activity)
end end
end end