graphql-rubyでtotalCountをクエリできるようにする

こんなQueryを投げれるようになりたい。

{
  users(first: 5) {
    totalCount
    edges {
      cursor
      node {
        id
      }
    }
  }
}

環境

方法

GraphQL::Types::Relay::BaseConnectionの継承クラスを作成し、total_countを追加する。

module Types
  class BaseConnection < GraphQL::Types::Relay::BaseConnection
    field :total_count, Int, null: false

    def total_count
      object.items&.size
    end
  end
end

Types::BaseObjectconnection_type_classに、上記クラスを指定する。

module Types
  class BaseObject < GraphQL::Schema::Object
    field_class Types::BaseField
    connection_type_class Types::BaseConnection
  end
end

結果例

{
  "data": {
    "users": {
      "totalCount": 100,
      "edges": [
...略...
      ]
    }
  }
}

参考