Skip to content

Commit b6ecc86

Browse files
committed
Add GraphQL query & type
1 parent efca09f commit b6ecc86

File tree

4 files changed

+44
-0
lines changed

4 files changed

+44
-0
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# frozen_string_literal: true
2+
3+
module Sources
4+
class PostsByUser < GraphQL::Dataloader::Source
5+
def fetch(user_ids)
6+
posts = Post.where(user_id: user_ids).group_by(&:user_id)
7+
user_ids.map { |uid| posts[uid] || [] }
8+
end
9+
end
10+
end

app/graphql/types/post_type.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# frozen_string_literal: true
2+
3+
module Types
4+
class PostType < Types::BaseObject
5+
field :id, ID, null: false
6+
field :title, String
7+
end
8+
end

app/graphql/types/query_type.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,10 @@ def nodes(ids:)
2727
def test_field
2828
"Hello World!"
2929
end
30+
31+
field :users, [Types::UserType], null: false
32+
def users
33+
User.all
34+
end
3035
end
3136
end

app/graphql/types/user_type.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# frozen_string_literal: true
2+
3+
module Types
4+
class UserType < Types::BaseObject
5+
field :id, ID, null: false
6+
field :name, String
7+
8+
field :posts, [ Types::PostType ], null: false do
9+
argument :use_cache, Boolean, required: true
10+
end
11+
def posts(use_cache:)
12+
if use_cache
13+
cache_fragment(expires_in: 1.minute) do
14+
dataloader.with(Sources::PostsByUser).load(object.id)
15+
end
16+
else
17+
dataloader.with(Sources::PostsByUser).load(object.id)
18+
end
19+
end
20+
end
21+
end

0 commit comments

Comments
 (0)