Skip to content

Instantly share code, notes, and snippets.

@krainboltgreene
Created December 26, 2019 06:40
Show Gist options
  • Save krainboltgreene/88f7da1d6530a2dc08eb5ad091f2734f to your computer and use it in GitHub Desktop.
Save krainboltgreene/88f7da1d6530a2dc08eb5ad091f2734f to your computer and use it in GitHub Desktop.
def create(_parent, arguments, _resolution) do
%{name: name, subject_id: subject_id} = arguments
tag = Repo.insert(Tag.changeset(%Tag{}, %{name: name}))
|> case do
{:ok, tag} -> tag
{:error, _} -> Repo.one(from(tag in Tag, where: tag.name == ^name))
end
subject_model = case arguments do
%{subject_type: :establishment} -> Poutineer.Models.Establishment
%{subject_type: :review} -> Poutineer.Models.Review
%{subject_type: :recipe} -> Poutineer.Models.Recipe
%{subject_type: :menu_item} -> Poutineer.Models.MenuItem
end
subject = Repo.get!(subject_model, subject_id) |> Repo.preload(:tags)
if tag && subject do
subject
|> Ecto.Changeset.change()
|> Ecto.Changeset.put_assoc(:tags, [tag | subject.tags])
|> Repo.update()
|> case do
{:ok, _} -> {:ok, tag}
{:error, _} = error -> error
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment