aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMaksim Pechnikov <parallel588@gmail.com>2020-01-23 17:18:23 +0300
committerMaksim Pechnikov <parallel588@gmail.com>2020-01-23 17:18:23 +0300
commit8589632d0905c5d028ed7f01f63a1103788d3571 (patch)
treeb31a4ac898d90e14a4d14c80777fb06cbef737b0 /lib
parent5fc2fa89086e820352a9fec571f07f29a55c4f06 (diff)
downloadpleroma-8589632d0905c5d028ed7f01f63a1103788d3571.tar.gz
fixed delete ScheduledActivity
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/scheduled_activity.ex48
-rw-r--r--lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex3
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