defmodule Uploadex.Resolver do @moduledoc """ Resolver functions to make it easier to use Uploadex with Absinthe. Note that all functions in this module require the Uploader as an argument. You are free to call them like that: ## Example In your Absinthe schema, assuming user only has one photo: object :user do field :photo_url, :string, resolve: Uploadex.Resolver.get_file_url(:photo, MyUploader) end If it has many photos: object :user do field :photos, list_of(:string), resolve: Uploadex.Resolver.get_files_url(:photos, MyUploader) end However, by doing `use Uploadex` in your uploader, you can call these functions directly through the uploader to avoid having to pass this extra argument around: ## Example In your Absinthe schema, assuming user only has one photo: object :user do field :photo_url, :string, resolve: MyUploader.get_file_url(:photo) end If it has many photos: object :user do field :photos, list_of(:string), resolve: MyUploader.get_files_url(:photos) end """ alias Uploadex.Uploader @spec get_file_url(atom, Uploader.t) :: (any, any, any -> {:ok, any}) def get_file_url(field, uploader) do fn record, _, _ -> {status, result} = uploader.get_files_url(record, field) {status, result |> List.wrap() |> List.first()} end end @spec get_files_url(atom, Uploader.t) :: (any, any, any -> {:ok, [any]}) def get_files_url(field, uploader) do fn record, _, _ -> uploader.get_files_url(record, field) end end end