I gave been following the tutorial made by EQuimper the Instagram clone. I have been trying to extend the application further via the backend as the front end isn't of concern at the moment. I am trying to implement a delete photo feature but it doesn't seem to work and I can't figure out why.
mutation do
@doc """
deletes a photo in the database
"""
field :photo_delete, list_of(:photo) do
arg :id, non_null(:id)
resolve &Resolvers.Posts.photo_delete/3
end
end
My schema.ex contains this code under the mutations section.
def photos(_,_,_) do
{:ok, Instagram.Posts.list_photos}
end
def photo(_, %{id: id}, _) do
{:ok, Instagram.Posts.get_photo!(id)}
end
def photo_delete(_, %{id: id}, _) do
photo_from_db = {:ok, Instagram.Posts.get_photo!(id)}
{:ok, Instagram.Posts.delete_photo(photo_from_db)}
end
This is the code in the resolver.posts file which for returning a list or a single photo works.
def delete_photo(%Photo{} = photo) do
Repo.delete(photo)
end
This is the code that executes the mutation to delete the photo from the database, which takes in a photo struct and deletes it.
object :photo do
field :id, non_null(:id)
field :image_url, non_null(:string)
field :caption, :string
field :inserted_at, non_null(:string)
field :update_at, non_null(:string)
end
This is the code that defines the photo schema.
schema "photos" do
field :caption, :string
field :image_url, :string
timestamps()
end
@doc false def changeset(%Photo{} = photo, attrs) do photo |> cast(attrs, [:image_url, :caption]) |> validate_required([:image_url]) end
this code is in the photo.ex file that handles the schema (I think)
mutation {
photo_delete(id: 1){
id
}
}
this is the mutation that I run to delete the query from the database. It returns an error saying
"no function clause matching in Instagram.Posts.delete_photo/1"
returned from the terminal. What have I done wrong? and what do I not understand about the flow of functions in this example. Link to the video series: https://www.youtube.com/watch?v=AVQQF_J3Az0&list=PLzQWIQOqeUSOu74jGJMRH06gneM3wL82Z for further clarification.