-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathschema.graphql
More file actions
77 lines (69 loc) · 2.06 KB
/
Copy pathschema.graphql
File metadata and controls
77 lines (69 loc) · 2.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
scalar Time
"""
ユーザーに関する情報
"""
type User {
id: ID!
name: String!
# client から呼び出される時には、必要なフィールドを指定されて呼び出されるため、完全な形でスキーマを定義してしまって良い
# User が作成した ChatRoom や 投稿した Comment 一覧も見ることができるようになる
# 双方向グラフにしている
chatRooms: [ChatRoom]
comments: [Comment]
}
"""
チャットルームに関する情報
"""
type ChatRoom {
id: ID!
title: String!
# client から呼び出される時には、必要なフィールドを指定されて呼び出されるため、完全な形でスキーマを定義してしまって良い
# 例えば、チャットルームの一覧を表示する際に、comments はいらない場合には、client 側でそれ以外のフィールドを指定する形にする
comments: [Comment] # 関連は N に1の方の ID を持たせるのではなく、1に N を埋め込む
createdBy: User!
createdAt: Time!
}
"""
コメントに関する情報
"""
type Comment {
id: ID!
content: String!
postedBy: User!
createdAt: Time!
}
type Query {
users: [User]
user(userID: ID!): User
# chatRoom に紐づく comment はここから全部引くことができる
chatRooms(userID: ID): [ChatRoom]
chatRoom(chatRoomID: ID!): ChatRoom
# user 毎に comment を引きたい場合
commentsByUser(userID: ID!): [Comment]
}
"""
ユーザーを登録する際の引数です。
"""
input NewUser {
name: String! # 簡易化のためにパスワード等は設定しない
}
"""
チャットルームを登録する際の引数です。
"""
input NewChatRoom {
userID: String!
title: String!
}
"""
コメントを登録する際の引数です。
"""
input NewComment {
content: String!
chatRoomID: String!
userID: String!
}
type Mutation {
createUser(input: NewUser!): User!
createChatRoom(input: NewChatRoom!): ChatRoom!
createComment(input: NewComment!): Comment!
}