Test removed HTTP adapter
[akkoma] / lib / pleroma / scheduled_activity.ex
index d011007028857accf5eb1e4ad976c38f4ff6a97f..2b156341fcd5e2cc147f6cfd9dce4799c7a70323 100644 (file)
@@ -1,5 +1,5 @@
 # Pleroma: A lightweight social networking server
-# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
 # SPDX-License-Identifier: AGPL-3.0-only
 
 defmodule Pleroma.ScheduledActivity do
@@ -40,7 +40,7 @@ defmodule Pleroma.ScheduledActivity do
          %{changes: %{params: %{"media_ids" => media_ids} = params}} = changeset
        )
        when is_list(media_ids) do
-    media_attachments = Utils.attachments_from_ids(%{"media_ids" => media_ids})
+    media_attachments = Utils.attachments_from_ids(%{media_ids: media_ids})
 
     params =
       params
@@ -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
@@ -156,37 +150,35 @@ defmodule Pleroma.ScheduledActivity do
       Multi.new()
       |> Multi.update(:scheduled_activity, changeset)
       |> Multi.update_all(:scheduled_job, job_query(id),
-        set: [scheduled_at: changeset.changes[:scheduled_at]]
+        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