alias Pleroma.Emoji
alias Pleroma.FollowingRelationship
alias Pleroma.Formatter
- alias Pleroma.Hashtag
- alias Pleroma.User.HashtagFollow
alias Pleroma.HTML
alias Pleroma.Keys
alias Pleroma.MFA
has_many(:frontend_profiles, Pleroma.Akkoma.FrontendSettingsProfile)
- many_to_many(:followed_hashtags, Hashtag,
- on_replace: :delete,
- on_delete: :delete_all,
- join_through: HashtagFollow
- )
-
for {relationship_type,
[
{outgoing_relation, outgoing_relation_target},
_ -> {:error, user}
end
end
-
- defp maybe_load_followed_hashtags(%User{followed_hashtags: follows} = user)
- when is_list(follows),
- do: user
-
- defp maybe_load_followed_hashtags(%User{} = user) do
- followed_hashtags = HashtagFollow.get_by_user(user)
- %{user | followed_hashtags: followed_hashtags}
- end
-
- def followed_hashtags(%User{followed_hashtags: follows})
- when is_list(follows),
- do: follows
-
- def followed_hashtags(%User{} = user) do
- {:ok, user} =
- user
- |> maybe_load_followed_hashtags()
- |> set_cache()
-
- user.followed_hashtags
- end
-
- def follow_hashtag(%User{} = user, %Hashtag{} = hashtag) do
- Logger.debug("Follow hashtag #{hashtag.name} for user #{user.nickname}")
- user = maybe_load_followed_hashtags(user)
-
- with {:ok, _} <- HashtagFollow.new(user, hashtag),
- follows <- HashtagFollow.get_by_user(user),
- %User{} = user <- user |> Map.put(:followed_hashtags, follows) do
- user
- |> set_cache()
- end
- end
-
- def unfollow_hashtag(%User{} = user, %Hashtag{} = hashtag) do
- Logger.debug("Unfollow hashtag #{hashtag.name} for user #{user.nickname}")
- user = maybe_load_followed_hashtags(user)
-
- with {:ok, _} <- HashtagFollow.delete(user, hashtag),
- follows <- HashtagFollow.get_by_user(user),
- %User{} = user <- user |> Map.put(:followed_hashtags, follows) do
- user
- |> set_cache()
- end
- end
-
- def following_hashtag?(%User{} = user, %Hashtag{} = hashtag) do
- not is_nil(HashtagFollow.get(user, hashtag))
- end
end