lib/notion/page.ex

defmodule Notion.Page do
  @moduledoc """
  Page
  """

  use Tesla

  def create_page(client, page), do: post(client, "/pages", page)

  def retrieve_page(client, id, query \\ []), do: get(client, "/pages/" <> id, query: query)

  def update_page_properties(client, id, query), do: patch(client, "/pages/" <> id, query)

  alias Notion.{Property}

  @derive Jason.Encoder

  @enforce_keys [:object]
  defstruct object: "page",
            id: nil,
            created_time: nil,
            last_edited_time: nil,
            parent: %{},
            properties: %{},
            database: nil,
            archived: nil

  @type t() :: %__MODULE__{
          object: String.t(),
          id: String.t(),
          created_time: String.t(),
          last_edited_time: String.t(),
          parent: map(),
          properties: %{String.t() => Property.t()},
          database: String.t() | nil,
          archived: boolean()
        }
end