- with {:ok, %{query_op: hashtags}} <-
- Multi.new()
- |> Multi.insert_all(:insert_all_op, Hashtag, structs, on_conflict: :nothing)
- |> Multi.run(:query_op, fn _repo, _changes ->
- {:ok, Repo.all(from(ht in Hashtag, where: ht.name in ^names))}
- end)
- |> Repo.transaction() do
- {:ok, hashtags}
- else
- {:error, _name, value, _changes_so_far} -> {:error, value}
+ try do
+ with {:ok, %{query_op: hashtags}} <-
+ Multi.new()
+ |> Multi.insert_all(:insert_all_op, Hashtag, structs,
+ on_conflict: :nothing,
+ conflict_target: :name
+ )
+ |> Multi.run(:query_op, fn _repo, _changes ->
+ {:ok, Repo.all(from(ht in Hashtag, where: ht.name in ^names))}
+ end)
+ |> Repo.transaction() do
+ {:ok, hashtags}
+ else
+ {:error, _name, value, _changes_so_far} -> {:error, value}
+ end
+ rescue
+ e -> {:error, e}