defmodule ExIsbndb.Subject do @moduledoc """ The `ExIsbndb.Subject` module contains all the available endpoints for Subjects. """ alias ExIsbndb.Client @doc """ Returns details of a Subject and a list of Books that belong to it. Params required: * name (string) - name of the Subject ## Examples iex> ExIsbndb.Subject.get("drama") {:ok, %Finch.Response{body: "...", headers: [...], status: 200}} """ @spec get(binary()) :: {:ok, Finch.Response.t()} | {:error, Exception.t()} def get(name) when is_binary(name), do: Client.request(:get, "subject/#{URI.encode(name)}") @doc """ Returns all the Subjects that match the given query. Params required: * query (string) - string used to search Params available: * page (integer) - page number of the Subjects to be searched * page_size (integer) - number of Subjects to be searched per page Any other parameters will be ignored. ## Examples iex> ExIsbndb.Subject.search(%{query: "epic", 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, "subjects/#{URI.encode(query)}", params) end end