defmodule ExIsbndb.Publisher do
@moduledoc """
The `ExIsbndb.Publisher` module contains all the available endpoints for Publishers.
All functions need to receive a map with params, but only those
needed for the endpoint will be taken.
"""
alias ExIsbndb.Client
@doc """
Returns the Publisher's details and a list of published Books.
Params required:
* name (string) - name of the Publisher
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.Publisher.get(%{name: "Pearson", 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, "publisher/#{URI.encode(name)}", params)
end
@doc """
Returns all the Publishers that match the given query.
Params required:
* query (string) - string used to search
Params available:
* page (integer) - page number of the Publishers to be searched
* page_size (integer) - number of Publishers to be searched per page
Any other parameters will be ignored.
## Examples
iex> ExIsbndb.Publisher.search(%{query: "oxford", 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, "publishers/#{URI.encode(query)}", params)
end
end