-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathindex.js
72 lines (61 loc) · 1.48 KB
/
index.js
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
const express = require('express');
const graphqlHTTP = require('express-graphql');
const requireText = require('require-text');
const { makeExecutableSchema } = require('graphql-tools');
const { ServiceBroker } = require('moleculer');
const players = require('./players');
const items = require('./items');
const broker = new ServiceBroker({ logger: console });
broker.createService({
name: 'player',
actions: {
get: {
params: {
id: { type: 'number' }
},
handler: ctx => players[ctx.params.id],
},
getAll: () => Object.values(players),
},
});
broker.createService({
name: 'item',
actions: {
get: {
params: {
id: { type: 'number' }
},
handler: ctx => items[ctx.params.id],
},
getAll: () => Object.values(items),
},
});
broker.start();
const typeDefs = requireText('./schema.graphql', require);
const resolvers = {
Query: {
players: () => broker.call('player.getAll'),
player: (root, { id }) => broker.call('player.get', { id }),
items: () => broker.call('item.getAll'),
item: (root, { id }) => broker.call('item.get', { id }),
},
Player: {
items({ items }) {
return broker.mcall(items.map((item) => ({
action: 'item.get',
params: { id: item },
})));
}
},
};
const schema = makeExecutableSchema({
typeDefs,
resolvers,
});
const app = express();
app.use('/graphql', graphqlHTTP({
schema,
rootValue: resolvers,
graphiql: true,
}));
app.listen(5000);