From 8589632d0905c5d028ed7f01f63a1103788d3571 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Thu, 23 Jan 2020 17:18:23 +0300 Subject: [PATCH] fixed delete ScheduledActivity --- lib/pleroma/scheduled_activity.ex | 48 ++++++++----------- .../scheduled_activity_controller.ex | 3 +- 2 files changed, 21 insertions(+), 30 deletions(-) diff --git a/lib/pleroma/scheduled_activity.ex b/lib/pleroma/scheduled_activity.ex index 68da0550c..e81bfcd7d 100644 --- a/lib/pleroma/scheduled_activity.ex +++ b/lib/pleroma/scheduled_activity.ex @@ -121,13 +121,7 @@ defmodule Pleroma.ScheduledActivity do |> Multi.insert(:scheduled_activity, new(user, attrs)) |> maybe_add_jobs(Config.get([ScheduledActivity, :enabled])) |> Repo.transaction() - |> case do - {:ok, %{scheduled_activity: scheduled_activity}} -> - {:ok, scheduled_activity} - - {:error, _, changeset, _} -> - {:error, changeset} - end + |> transaction_response end defp maybe_add_jobs(multi, true) do @@ -159,34 +153,32 @@ defmodule Pleroma.ScheduledActivity do set: [scheduled_at: get_field(changeset, :scheduled_at)] ) |> Repo.transaction() - |> case do - {:ok, %{scheduled_activity: scheduled_activity}} -> - {:ok, scheduled_activity} - - {:error, _, changeset, _} -> - {:error, changeset} - end + |> transaction_response end end - def delete_job(%ScheduledActivity{id: id} = _scheduled_activity) do - id - |> job_query - |> Repo.delete_all() + @doc "Deletes a ScheduledActivity and linked jobs." + @spec delete(ScheduledActivity.t() | binary() | integer) :: + {:ok, ScheduledActivity.t()} | {:error, Ecto.Changeset.t()} + def delete(%ScheduledActivity{id: id} = scheduled_activity) do + Multi.new() + |> Multi.delete(:scheduled_activity, scheduled_activity, stale_error_field: :id) + |> Multi.delete_all(:jobs, job_query(id)) + |> Repo.transaction() + |> transaction_response end - def delete(%ScheduledActivity{} = scheduled_activity) do - Repo.delete(scheduled_activity) + def delete(id) when is_binary(id) or is_integer(id) do + delete(%__MODULE__{id: id}) end - def delete(id) when is_binary(id) or is_integer(id) do - ScheduledActivity - |> where(id: ^id) - |> select([sa], sa) - |> Repo.delete_all() - |> case do - {1, [scheduled_activity]} -> {:ok, scheduled_activity} - _ -> :error + defp transaction_response(result) do + case result do + {:ok, %{scheduled_activity: scheduled_activity}} -> + {:ok, scheduled_activity} + + {:error, _, changeset, _} -> + {:error, changeset} end end diff --git a/lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex b/lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex index 4f9a8bdbe..ff9276541 100644 --- a/lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex @@ -45,8 +45,7 @@ defmodule Pleroma.Web.MastodonAPI.ScheduledActivityController do @doc "DELETE /api/v1/scheduled_statuses/:id" def delete(%{assigns: %{scheduled_activity: scheduled_activity}} = conn, _params) do - with {:ok, scheduled_activity} <- ScheduledActivity.delete(scheduled_activity), - _ <- ScheduledActivity.delete_job(scheduled_activity) do + with {:ok, scheduled_activity} <- ScheduledActivity.delete(scheduled_activity) do render(conn, "show.json", scheduled_activity: scheduled_activity) end end -- 2.45.2