aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorIvan Tashkinov <ivantashkinov@gmail.com>2018-12-07 12:27:32 +0300
committerIvan Tashkinov <ivantashkinov@gmail.com>2018-12-07 12:27:32 +0300
commit1cea97df646566bfd6e31d9696047ba87f1e82c1 (patch)
treeac2d482cdd137784d87959908408a77b5925cadc /lib
parent6ed5044c4e1889a51a1dc6015b602759b83fc3b7 (diff)
downloadpleroma-1cea97df646566bfd6e31d9696047ba87f1e82c1.tar.gz
[#394] Refactoring of User.tag and User.untag (removed User.tag_or_untag etc.)
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/user.ex53
1 files changed, 27 insertions, 26 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index 511e6956e..198f05f8a 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -822,39 +822,40 @@ defmodule Pleroma.User do
CommonUtils.format_input(bio, mentions, tags, "text/plain") |> Formatter.emojify(emoji)
end
- def tag(user_identifiers, tags), do: tag_or_untag(user_identifiers, tags, :tag)
+ def tag(user_identifiers, tags) when is_list(user_identifiers) do
+ Repo.transaction(fn ->
+ for user_identifier <- user_identifiers, do: tag(user_identifier, tags)
+ end)
+ end
- def untag(user_identifiers, tags), do: tag_or_untag(user_identifiers, tags, :untag)
+ def untag(user_identifiers, tags) when is_list(user_identifiers) do
+ Repo.transaction(fn ->
+ for user_identifier <- user_identifiers, do: untag(user_identifier, tags)
+ end)
+ end
- defp tag_or_untag(user_identifier, tags, action) when not is_list(user_identifier),
- do: tag_or_untag([user_identifier], tags, action)
+ def tag(nickname, tags) when is_binary(nickname), do: tag(User.get_by_nickname(nickname), tags)
- defp tag_or_untag([hd | _] = nicknames, tags, action) when is_binary(hd) do
- users = Repo.all(from(u in User, where: u.nickname in ^nicknames))
+ def untag(nickname, tags) when is_binary(nickname),
+ do: untag(User.get_by_nickname(nickname), tags)
- if length(users) == length(nicknames) do
- tag_or_untag(users, tags, action)
- else
- {:error, :not_found}
- end
- end
+ def tag(%User{} = user, tags),
+ do: update_tags(user, Enum.uniq(user.tags ++ normalize_tags(tags)))
- defp tag_or_untag([hd | _] = users, tags, action) when is_map(hd) do
- tags =
- [tags]
- |> List.flatten()
- |> Enum.map(&String.downcase(&1))
+ def untag(%User{} = user, tags), do: update_tags(user, user.tags -- normalize_tags(tags))
- multi =
- Enum.reduce(users, Multi.new(), fn user, multi ->
- new_tags = mutate_tags(user, tags, action)
- Multi.update(multi, {:user, user.id}, change(user, %{tags: new_tags}))
- end)
+ defp update_tags(%User{} = user, new_tags) do
+ {:ok, updated_user} =
+ user
+ |> change(%{tags: new_tags})
+ |> Repo.update()
- Repo.transaction(multi)
+ updated_user
end
- defp mutate_tags(user, tags, :tag), do: Enum.uniq(user.tags ++ tags)
-
- defp mutate_tags(user, tags, :untag), do: user.tags -- tags
+ defp normalize_tags(tags) do
+ [tags]
+ |> List.flatten()
+ |> Enum.map(&String.downcase(&1))
+ end
end