Pagination metadata in AshJsonApi

Index route with pagination (not in a relationship route) did not include pagination metada (limit and offset). Even if I set countable to true, it only include total metadata. Am I missing something?

This is the example resource.

# The resource
defmodule Project do
  json_api do
    type "project"

    routes do
      base "/projects"
      index :read, primary?: true
    end
  end

  actions do
    defaults [:destroy, create: :*, update: :*]

    read :read do
      primary? true

      pagination do
        offset? true
        default_limit 10
        countable true
        max_page_size 100
        paginate_by_default? true
      end
    end
  end

  attributes do
    uuid_primary_key :id
    attribute :name, :string, public?: true, allow_nil?: false
    attribute :description, :string, public?: true, allow_nil?: false
    timestamps()
  end
end

Can you show me the full request you made and the response you got?

I’m doing the request from test, the code below

describe "list projects" do
    setup do
      projects = generate_many(project(), 3)
      [projects: projects]
    end

    test "returns projects with pagination", c do
      assert length(c.projects) == 3
      conn = Test.get(Projects, "/projects?page[count]=true&page[limit]=2", status: 200)
      assert conn.resp_body["meta"]["page"]["total"] == 3
      assert conn.resp_body["meta"]["page"]["limit"] == 2
    end
  end

And the response

%{
  "data" => [
    %{
      "attributes" => %{"description" => "䇗", "name" => "ņ˜«•"},
      "id" => "22e25bfa-ab85-4716-85f3-3d4b4217d6fc",
      "links" => %{},
      "meta" => %{},
      "relationships" => %{},
      "type" => "project"
    },
    %{
      "attributes" => %{"description" => "󗭦󻐃", "name" => "ń”¦…"},
      "id" => "3b6baa15-6df3-4274-8f4f-d8c403603682",
      "links" => %{},
      "meta" => %{},
      "relationships" => %{},
      "type" => "project"
    }
  ],
  "jsonapi" => %{"version" => "1.0"},
  "links" => %{
    "first" => "http://www.example.com/projects?page[count]=true&page[limit]=2",
    "last" => "http://www.example.com/projects?page[count]=true&page[offset]=1&page[limit]=2",
    "next" => "http://www.example.com/projects?page[count]=true&page[offset]=2&page[limit]=2",
    "prev" => nil,
    "self" => "http://www.example.com/projects?page[count]=true&page[limit]=2"
  },
  "meta" => %{"page" => %{"total" => 3}}
}

Ah, yeah the total and limit aren’t passed back as metadata, they are only present in the links.

Should I open an issue?

I don’t think it’s really necessary to have that metadata. It was just sent to us by the person making the request, and appears in the links to fetch the next page etc.

I’ve read the docs although it is for paginated relationships. In the response format it says the metadata is included. Maybe it should be clear that it is not for non-relationships pagination?

FYI, I’m currently trying out Ash for use in my organization. And I want to make sure my co-workers are interested in using it. They’re beginners, and I think if they encounter any obstacles, they’ll refuse to use it.

However, I’m confident that using Ash will make long-term maintenance easier for them. I just need to get them interested in using it.

Ah, yeah so we must be including it for paginated relationships. We might as well include them in the parent pagination metadata as well if we are there. Please open an issue :person_bowing:

:grinning_face: Thanks, I’ll open an issue

Woww, that was fast… thank you very much