defmodule ExIsbndb.Author do
@moduledoc """
The `ExIsbndb.Author` module contains all the available endpoints for Authors.
All functions need to receive a map with params, but only those
needed for the endpoint will be taken.
"""
alias ExIsbndb.Client
@doc """
Returns an Author and a list of its Books.
Params required:
* name (string) - name of the Author
Params available:
* page (integer) - page number of the Books to be retrieved
* page_size(integer) - number of Books to be retrieved per page
Any other parameters will be ignored.
## Examples
iex> ExIsbndb.Author.get(%{name: "Stephen King", page: 1, page_size: 5})
{:ok, %Finch.Response{body: "...", headers: [...], status: 200}}
"""
@spec get(map()) :: {:ok, Finch.Response.t()} | {:error, Exception.t()}
def get(%{name: name} = params) when is_binary(name) do
params = %{page: params[:page], pageSize: params[:page_size]}
Client.request(:get, "author/#{URI.encode(name)}", params)
end
@doc """
Returns all the Authors that match the given query.
Params required:
* query (string) - string used to search
Params available:
* page (integer) - page number of the Authors to be searched
* page_size (integer) - number of Authors to be searched per page
Any other parameters will be ignored.
## Examples
iex> ExIsbndb.Author.search(%{query: "sanderson", page: 1, page_size: 5})
{:ok, %Finch.Response{body: "...", headers: [...], status: 200}}
"""
@spec search(map()) :: {:ok, Finch.Response.t()} | {:error, Exception.t()}
def search(%{query: query} = params) when is_binary(query) do
params = %{page: params[:page], pageSize: params[:page_size]}
Client.request(:get, "authors/#{URI.encode(query)}", params)
end
end