会社でGraphQLを検証することになったので、一旦どのようなものか理解するため軽く触ります。
DBの構造と発行するクエリに差分があった方が、GraphQLのテストとして良いなと思ったので木構造を触ることにしました。 閉包テーブル(closure table)を扱うgemであるclosure_tree を利用しました。 以下のような組織図を表すデータをseedに入れています。(closure_treeから書き出しもできて便利でした。)
app/graphql/types/query_type.rb
飛んできたクエリをハンドリングしてるところです。
apimodeで作ったため、GraphQLのエディタを出すために、application.rb をいじっています。
bin/bundle install
bin/rails db:create
bin/rails db:migrate
bin/rails db:seed
bin/rails server
open http://127.0.0.1:3000/graphide # ここで色々とqueryが書けて便利
Query
{
rootOrganizations {
id
name
}
}
{
"data": {
"rootOrganizations": [
{
"id": "1",
"name": "経営会議"
},
{
"id": "14",
"name": "z_club_スノボ"
}
]
}
}
{
children(parentId: 2) {
id
name
parent {
id
name
parent {
id
name
children{
id
name
}
}
}
}
}
{
"data": {
"children": [
{
"id": "3",
"name": "マッチング領域",
"parent": {
"id": "2",
"name": "プロダクト部",
"parent": {
"id": "1",
"name": "経営会議",
"children": [
{
"id": "2",
"name": "プロダクト部"
},
{
"id": "11",
"name": "カスタマーサポート"
}
]
}
}
},
{
"id": "7",
"name": "スポットワークシステム領域",
"parent": {
"id": "2",
"name": "プロダクト部",
"parent": {
"id": "1",
"name": "経営会議",
"children": [
{
"id": "2",
"name": "プロダクト部"
},
{
"id": "11",
"name": "カスタマーサポート"
}
]
}
}
},
{
"id": "10",
"name": "コーポレートIT",
"parent": {
"id": "2",
"name": "プロダクト部",
"parent": {
"id": "1",
"name": "経営会議",
"children": [
{
"id": "2",
"name": "プロダクト部"
},
{
"id": "11",
"name": "カスタマーサポート"
}
]
}
}
}
]
}
}