aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/object.ex
diff options
context:
space:
mode:
authorIvan Tashkinov <ivantashkinov@gmail.com>2021-02-11 19:30:21 +0300
committerIvan Tashkinov <ivantashkinov@gmail.com>2021-02-11 19:30:21 +0300
commita996ab46a54acbfa7a19da3eae12c78ed6466a1a (patch)
tree75de001e1da0f5f8239be02f1a45e6c1d37e557a /lib/pleroma/object.ex
parentd1c6dd97aa503ca7c897d67d98fe8c924e113a61 (diff)
downloadpleroma-a996ab46a54acbfa7a19da3eae12c78ed6466a1a.tar.gz
[#3213] Reorganized hashtags cleanup. Transaction-wrapped Hashtag.get_or_create_by_names/1. Misc. improvements.
Diffstat (limited to 'lib/pleroma/object.ex')
-rw-r--r--lib/pleroma/object.ex27
1 files changed, 17 insertions, 10 deletions
diff --git a/lib/pleroma/object.ex b/lib/pleroma/object.ex
index 52b77e41c..3ba749d1a 100644
--- a/lib/pleroma/object.ex
+++ b/lib/pleroma/object.ex
@@ -62,27 +62,30 @@ defmodule Pleroma.Object do
|> cast(params, [:data])
|> validate_required([:data])
|> unique_constraint(:ap_id, name: :objects_unique_apid_index)
+ # Expecting `maybe_handle_hashtags_change/1` to run last:
|> maybe_handle_hashtags_change(struct)
end
- # Note: not checking activity type; HashtagsCleanupWorker should clean up unused records later
+ # Note: not checking activity type (assuming non-legacy objects are associated with Create act.)
defp maybe_handle_hashtags_change(changeset, struct) do
- with data_hashtags_change = get_change(changeset, :data),
- true <- hashtags_changed?(struct, data_hashtags_change),
+ with %Ecto.Changeset{valid?: true} <- changeset,
+ data_hashtags_change = get_change(changeset, :data),
+ {_, true} <- {:changed, hashtags_changed?(struct, data_hashtags_change)},
{:ok, hashtag_records} <-
data_hashtags_change
|> object_data_hashtags()
|> Hashtag.get_or_create_by_names() do
put_assoc(changeset, :hashtags, hashtag_records)
else
- false ->
+ %{valid?: false} ->
changeset
- {:error, hashtag_changeset} ->
- failed_hashtag = get_field(hashtag_changeset, :name)
+ {:changed, false} ->
+ changeset
+ {:error, _} ->
validate_change(changeset, :data, fn _, _ ->
- [data: "error referencing hashtag: #{failed_hashtag}"]
+ [data: "error referencing hashtags"]
end)
end
end
@@ -221,9 +224,13 @@ defmodule Pleroma.Object do
def swap_object_with_tombstone(object) do
tombstone = make_tombstone(object)
- object
- |> Object.change(%{data: tombstone})
- |> Repo.update()
+ with {:ok, object} <-
+ object
+ |> Object.change(%{data: tombstone})
+ |> Repo.update() do
+ Hashtag.unlink(object)
+ {:ok, object}
+ end
end
def delete(%Object{data: %{"id" => id}} = object) do