Hasuraでの「Error: field "XXX" not found in type: 'XXX'」エラー


Hasuraにおける「Error: field "XXX" not found in type: 'XXX'」というエラーについて
開発する中でHasura APIに対してリクエストを投げる際に何度か出てきたので
被疑箇所をメモとして残しておきます。
データフェッチにはApolloを使用しています。

エラー発生状況

以下のようなqueryを実行しました。

gql`
  query GetRecentPost {
    posts(limit: 10, order_by: { id: asc }) {
      id
      image
      gender
      content
      created_at
      user {
        id
        display_id
        image
        name
      }
      comments_aggregate {
        aggregate {
          count(columns: id)
        }
      }
      likes_aggregate {
        aggregate {
          count(columns: id)
        }
      }
    }
  }
`

GraphQLに関しても使い始めて日が浅い為、query内容に冗長なところが
あるかもしれませんが何卒ご了承ください。

ユーザの最近の投稿10件を取得し、それを投稿したユーザと
その投稿についているコメントといいねの件数を取得するものです。

このqueryを投げたところ以下のエラーが出ました。
Error: field "comments_aggregate" not found in type: 'posts'
postsフィールドの中にcomments_aggregateが存在していないようです。

解決方法

Hasuraで定義したテーブルに対するPermissionの設定が原因でした。
今回のエラー文にあるcomments_aggregate
postsテーブルに紐づくcommentsテーブルの件数を集計するqueryで
テーブルを作成した時点でHasura側が勝手に用意してくれるものです。

しかしこの集計queryにはデフォルトでPermissionがadmin以外disableになっていました。
以下はpostsテーブルとusersテーブルの中間テーブルで投稿へのコメントを表す
post_commentsテーブルのPermissionsタブの中身です。
(Hasura Console→DATA→テーブル の中にあります)

こちらのAggregation queries permissionsの Allow role [role] to make aggregation queries
というチェックボックスにチェックを入れることでエラーが解消されました。
(ユースケースによって適切なRoleに対して設定してください)
(likesのテーブルに関しても同様に設定しました。)

さいごに

Hasuraにおいてこのようなエラーが出た場合、今回の内容でなくとも
自分の場合は適切な権限がRequestのRoleに付与されていなかったというケースがほとんどでした。
同じようなエラーが出た方で、ここら辺の確認が漏れている場合は
確認してみると良いのでは無いでしょうか。