|> String.trim()
end
- def get_by_name(name) do
- Repo.get_by(Hashtag, name: normalize_name(name))
- end
-
- def get_or_create_by_name(name) when is_bitstring(name) do
- with %Hashtag{} = hashtag <- get_by_name(name) do
- {:ok, hashtag}
- else
- _ ->
- %Hashtag{}
- |> changeset(%{name: name})
- |> Repo.insert()
- end
+ def get_or_create_by_name(name) do
+ changeset = changeset(%Hashtag{}, %{name: name})
+
+ Repo.insert(
+ changeset,
+ on_conflict: [set: [name: get_field(changeset, :name)]],
+ conflict_target: :name,
+ returning: true
+ )
end
def get_or_create_by_names(names) when is_list(names) do
{:ok, Repo.all(from(ht in Hashtag, where: ht.name in ^names))}
end)
|> Repo.transaction() do
+ Pleroma.Elasticsearch.bulk_post(hashtags, :hashtags)
{:ok, hashtags}
else
{:error, _name, value, _changes_so_far} -> {:error, value}