Skip to content

Commit faeb8a9

Browse files
committed
merge recent changes from master
2 parents 53c4da4 + d39d381 commit faeb8a9

File tree

2 files changed

+61
-40
lines changed

2 files changed

+61
-40
lines changed

graphql-server/drivers/arangodb/driver.js

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
11
const graphql = require('graphql');
22
const arangojs = require("arangojs");
33
const aql = arangojs.aql;
4+
const { makeExecutableSchema } = require('graphql-tools');
45
const { ApolloError } = require('apollo-server');
56
const waitOn = require('wait-on');
67

78
let db;
89
let disableEdgeValidation;
9-
let diasableDiractivesChecking
10+
let disableDirectivesChecking;
1011

1112
module.exports = {
12-
init: async function(schema){
13-
let db_name = process.env.db ? process.env.db : 'dev-db';
14-
let url = process.env.URL ? process.env.URL : 'http://localhost:8529';
15-
let drop = process.env.DROP === 'true';
16-
diasableDiractivesChecking = process.env.DISABLE_DIRECTIVES_CHECKING === 'true';
17-
disableEdgeValidation = process.env.DISABLE_EDGE_VALIDATION === 'true';
13+
init: async function(args){
14+
let typeDefs = args.typeDefs;
15+
let db_name = args.db_name || 'dev-db';
16+
let url = args.url || 'http://localhost:8529';
17+
let drop = args.drop || false;
18+
disableDirectivesChecking = args.disableDirectivesChecking || false;
19+
disableEdgeValidation = args.disableEdgeValidation || false;
1820
db = new arangojs.Database({ url: url });
1921

2022
// wait for ArangoDB
@@ -35,6 +37,11 @@ module.exports = {
3537
() => console.log()
3638
);
3739
}
40+
const schema = makeExecutableSchema({
41+
'typeDefs': typeDefs,
42+
'resolvers': {}
43+
});
44+
3845
await createAndUseDatabase(db, db_name);
3946
await createTypeCollections(db, schema);
4047
await createEdgeCollections(db, schema);
@@ -75,14 +82,9 @@ module.exports = {
7582
},
7683
getEdgeCollectionName: function (type, field) {
7784
return getEdgeCollectionName(type, field);
78-
},
79-
hello: () => hello() // TODO: Remove after testing
85+
}
8086
};
8187

82-
async function hello(){
83-
return "This is the arangodb.tools saying hello!"
84-
}
85-
8688
async function createAndUseDatabase(db, db_name){
8789
await db.createDatabase(db_name).then(
8890
() => { console.info(`Database '${db_name}' created`); },
@@ -101,7 +103,7 @@ async function createTypeCollections(db, schema) {
101103
await collection.create().then(
102104
() => { console.info(`Collection '${collection_name}' created`) },
103105
err => {
104-
//console.warn(`Collection '${collection_name}' not created:` , err.response.body.errorMessage);
106+
console.warn(`Collection '${collection_name}' not created:` , err.response.body.errorMessage);
105107
}
106108
);
107109
}
@@ -384,7 +386,7 @@ async function create(isRoot, ctxt, data, returnType, info){
384386
}
385387

386388
// directives handling
387-
addfinalDirectiveChecksForType(ctxt, returnType, aql`${asAQLVar(resVar)}._id`, info.schema);
389+
addFinalDirectiveChecksForType(ctxt, returnType, aql`${asAQLVar(resVar)}._id`, info.schema);
388390

389391
// overwrite the current action
390392
if(isRoot) {
@@ -434,7 +436,7 @@ async function createEdge(isRoot, ctxt, source, sourceType, sourceField, target,
434436
ctxt.trans.params[docVar] = doc;
435437
ctxt.trans.code.push(`let ${resVar} = db._query(aql\`INSERT ${aqlDocVar} IN ${collection} RETURN NEW\`).next();`);
436438

437-
addfinalDirectiveChecksForType(ctxt, sourceType, source, info.schema);
439+
addFinalDirectiveChecksForType(ctxt, sourceType, source, info.schema);
438440

439441
// overwrite the current action
440442
if(isRoot) {
@@ -673,7 +675,7 @@ async function update(isRoot, ctxt, id, data, returnType, info){
673675
}
674676

675677
// directives handling
676-
addfinalDirectiveChecksForType(ctxt, returnType, aql`${asAQLVar(resVar)}._id`, info.schema);
678+
addFinalDirectiveChecksForType(ctxt, returnType, aql`${asAQLVar(resVar)}._id`, info.schema);
677679

678680
// overwrite the current action
679681
if(isRoot) {
@@ -1159,8 +1161,8 @@ function addPossibleEdgeTypes(query, schema, type_name, field_name, use_aql = tr
11591161
* @param resVar
11601162
* @param schema
11611163
*/
1162-
function addfinalDirectiveChecksForType(ctxt, type, id, schema) {
1163-
if (!diasableDiractivesChecking) {
1164+
function addFinalDirectiveChecksForType(ctxt, type, id, schema) {
1165+
if (!disableDirectivesChecking) {
11641166
for (let f in type.getFields()) {
11651167
let field = type.getFields()[f];
11661168
for (dir of field.astNode.directives) {

graphql-server/server.js

Lines changed: 40 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,54 @@
11
const { ApolloServer, gql } = require('apollo-server');
2-
const fs = require('fs');
2+
const { readFileSync } = require('fs');
33
const driver = require('./driver.js');
44
const graphqlResolvers = require('./resolvers.js');
55
const graphqlCustomResolvers = require('./custom-resolvers.js');
66

7-
const text = fs.readFileSync('api-schema/api-schema.graphql', 'utf8');
8-
const textExtend = fs.readFileSync('api-schema/custom-api-schema.graphql', 'utf8');
9-
const typeDefs = gql`${text + textExtend}`;
10-
117
async function run(){
12-
// setup resolvers
13-
const resolvers = await graphqlResolvers.get({ driver: driver });
14-
const customResolvers = await graphqlCustomResolvers.get({ driver: driver });
15-
resolvers.Query = {...resolvers.Query, ...customResolvers.Query};
16-
17-
const server = new ApolloServer({typeDefs, resolvers: resolvers});
18-
await driver.init(server.schema);
8+
// parse API schema and extended schema
9+
const baseSchema = readFileSync('api-schema/api-schema.graphql', 'utf8');
10+
const customSchema = readFileSync('api-schema/custom-api-schema.graphql', 'utf8');
11+
const typeDefs = gql`${baseSchema} ${customSchema}`;
1912

20-
if(process.env.DISABLE_LOGGING){
21-
console.info = function() {};
13+
// Enable/disable debugging
14+
if(process.env.DEBUG !== 'true'){
15+
console.debug = function() {};
2216
}
2317

24-
server.listen().then(({ url }) => {
25-
console.log(`GraphQL service ready at: ${url}`);
18+
// Driver options
19+
// Use environment variables to customize settings when starting the server
20+
let args = {
21+
'typeDefs': gql`${baseSchema}`,
22+
'db_name': process.env.DB_NAME || 'spirit-db',
23+
'url': process.env.URL || 'http://localhost:8529',
24+
'drop': process.env.DROP === 'true',
25+
'disableDirectivesChecking': process.env.DISABLE_DIRECTIVES_CHECKING === 'true',
26+
'disableEdgeValidation': process.env.DISABLE_EDGE_VALIDATION === 'true'
27+
};
28+
await driver.init(args);
29+
30+
// Load base resolvers
31+
const resolvers = await graphqlResolvers.get({
32+
driver: driver
33+
});
34+
// Load custom resolvers
35+
// Configure the get-request below if your custom resolvers require additional options
36+
const customResolvers = await graphqlCustomResolvers.get({
37+
driver: driver
2638
});
27-
}
2839

29-
function main(){
30-
run().then(() => {
31-
err => console.error(err);
40+
// Create instance of server and start listening
41+
const server = new ApolloServer({
42+
'typeDefs': typeDefs,
43+
'resolvers': [
44+
resolvers,
45+
customResolvers
46+
]
47+
});
48+
server.listen().then(({ url }) => {
49+
console.log(`GraphQL service ready at: ${url}`);
3250
});
3351
}
3452

35-
main();
53+
// Run server
54+
run().then(() => { err => console.error(err); });

0 commit comments

Comments
 (0)