OSDN Git Service

spinnerを追加
[ngware/todo_client.git] / apollo-server / resolvers.js
1 import GraphQLJSON from 'graphql-type-json'
2 import shortid from 'shortid'
3
4
5 export default {
6   JSON: GraphQLJSON,
7
8   Counter: {
9     countStr: counter => `Current count: ${counter.count}`,
10   },
11
12
13   Query: {
14     hello: (root, { name }) => `Hello ${name || 'World'}!`,
15     messages: (root, args, { db }) => db.get('messages').value(),
16     uploads: (root, args, { db }) => db.get('uploads').value(),
17
18   },
19
20   Mutation: {
21     myMutation: (root, args, context) => {
22       const message = 'My mutation completed!'
23       context.pubsub.publish('hey', { mySub: message })
24       return message
25     },
26     addMessage: (root, { input }, { pubsub, db }) => {
27       const message = {
28         id: shortid.generate(),
29         text: input.text,
30       }
31
32       db
33         .get('messages')
34         .push(message)
35         .last()
36         .write()
37
38       pubsub.publish('messages', { messageAdded: message })
39
40       return message
41     },
42
43     singleUpload: (root, { file }, { processUpload }) => processUpload(file),
44     multipleUpload: (root, { files }, { processUpload }) => Promise.all(files.map(processUpload)),
45
46   },
47
48   Subscription: {
49     mySub: {
50       subscribe: (parent, args, { pubsub }) => pubsub.asyncIterator('hey'),
51     },
52     counter: {
53       subscribe: (parent, args, { pubsub }) => {
54         const channel = Math.random().toString(36).substring(2, 15) // random channel name
55         let count = 0
56         setInterval(() => pubsub.publish(
57           channel,
58           {
59             // eslint-disable-next-line no-plusplus
60             counter: { count: count++ },
61           }
62         ), 2000)
63         return pubsub.asyncIterator(channel)
64       },
65     },
66
67     messageAdded: {
68       subscribe: (parent, args, { pubsub }) => pubsub.asyncIterator('messages'),
69     },
70
71   },
72 }