Skip to content
This repository was archived by the owner on Sep 3, 2021. It is now read-only.

Commit 52fce96

Browse files
authoredApr 29, 2019
Merge pull request #223 from moxious/master
Create typedefs automatically by inferring GraphQL Schema from Neo4j
2 parents 09af841 + ab08904 commit 52fce96

16 files changed

+2105
-169
lines changed
 

‎example/apollo-server/movies.js

+7
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { augmentTypeDefs, augmentSchema } from '../../src/index';
22
import { ApolloServer, gql, makeExecutableSchema } from 'apollo-server';
33
import { v1 as neo4j } from 'neo4j-driver';
44
import { typeDefs, resolvers } from './movies-schema';
5+
import { inferSchema } from '../../src/inferSchema';
56

67
const schema = makeExecutableSchema({
78
typeDefs: augmentTypeDefs(typeDefs),
@@ -22,6 +23,12 @@ const driver = neo4j.driver(
2223
)
2324
);
2425

26+
inferSchema(driver)
27+
.then(result => {
28+
console.log(result);
29+
})
30+
.catch(err => console.error(err));
31+
2532
const server = new ApolloServer({
2633
schema: augmentedSchema,
2734
// inject the request object into the context to support middleware
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import { makeAugmentedSchema } from '../../src/index';
2+
import { ApolloServer } from 'apollo-server-express';
3+
import express from 'express';
4+
import bodyParser from 'body-parser';
5+
import { v1 as neo4j } from 'neo4j-driver';
6+
import { typeDefs, resolvers } from './movies-schema';
7+
8+
const schema = makeAugmentedSchema({
9+
typeDefs,
10+
resolvers,
11+
resolverValidationOptions: {
12+
requireResolversForResolveType: false
13+
}
14+
});
15+
16+
// Add auto-generated mutations
17+
//const augmentedSchema = augmentSchema(schema);
18+
19+
const driver = neo4j.driver(
20+
process.env.NEO4J_URI || 'bolt://localhost:7687',
21+
neo4j.auth.basic(
22+
process.env.NEO4J_USER || 'neo4j',
23+
process.env.NEO4J_PASSWORD || 'letmein'
24+
)
25+
);
26+
27+
const app = express();
28+
app.use(bodyParser.json());
29+
30+
const checkErrorHeaderMiddleware = async (req, res, next) => {
31+
req.error = req.headers['x-error'];
32+
next();
33+
};
34+
35+
app.use('*', checkErrorHeaderMiddleware);
36+
37+
const server = new ApolloServer({
38+
schema,
39+
// inject the request object into the context to support middleware
40+
// inject the Neo4j driver instance to handle database call
41+
context: ({ req }) => {
42+
return {
43+
driver,
44+
req
45+
};
46+
}
47+
});
48+
49+
server.applyMiddleware({ app, path: '/' });
50+
app.listen(3000, '0.0.0.0');

‎example/autogenerated/autogen.js

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import { makeAugmentedSchema } from '../../src/index';
2+
import { ApolloServer } from 'apollo-server';
3+
import { v1 as neo4j } from 'neo4j-driver';
4+
import { inferSchema } from '../../src/inferSchema';
5+
6+
const driver = neo4j.driver(
7+
process.env.NEO4J_URI || 'bolt://localhost:7687',
8+
neo4j.auth.basic(
9+
process.env.NEO4J_USER || 'neo4j',
10+
process.env.NEO4J_PASSWORD || 'letmein'
11+
)
12+
);
13+
14+
const schemaInferenceOptions = {
15+
alwaysIncludeRelationships: false
16+
};
17+
18+
const inferAugmentedSchema = driver => {
19+
return inferSchema(driver, schemaInferenceOptions).then(result => {
20+
console.log('TYPEDEFS:');
21+
console.log(result.typeDefs);
22+
23+
return makeAugmentedSchema({
24+
typeDefs: result.typeDefs
25+
});
26+
});
27+
};
28+
29+
const createServer = augmentedSchema =>
30+
new ApolloServer({
31+
schema: augmentedSchema,
32+
// inject the request object into the context to support middleware
33+
// inject the Neo4j driver instance to handle database call
34+
context: ({ req }) => {
35+
return {
36+
driver,
37+
req
38+
};
39+
}
40+
});
41+
42+
const port = process.env.GRAPHQL_LISTEN_PORT || 3000;
43+
44+
inferAugmentedSchema(driver)
45+
.then(createServer)
46+
.then(server => server.listen(port, '0.0.0.0'))
47+
.then(({ url }) => {
48+
console.log(`GraphQL API ready at ${url}`);
49+
})
50+
.catch(err => console.error(err));

0 commit comments

Comments
 (0)