Used to set up context API.
@type changeset() :: map()
@type user() :: map()
@callback authenticate(map()) :: user() | nil
@callback create(map()) :: {:ok, user()} | {:error, changeset()}
@callback delete(user()) :: {:ok, user()} | {:error, changeset()}
@callback get_by(Keyword.t() | map()) :: user() | nil
@callback update(user(), map()) :: {:ok, user()} | {:error, changeset()}