Skip to content

Commit

Permalink
Used async/await handler; Always assign new knex connection to preven…
Browse files Browse the repository at this point in the history
…t left open connections; Refactored response-mapping-templates
  • Loading branch information
widdydev committed Aug 12, 2018
1 parent 0ce026f commit eca7e63
Show file tree
Hide file tree
Showing 24 changed files with 239 additions and 421 deletions.
196 changes: 70 additions & 126 deletions handler.js
Expand Up @@ -2,135 +2,79 @@ import { getAuthor, getAuthors } from './resolvers/author-resolver';
import { getPost, getPosts, addPost, updatePost, deletePost } from './resolvers/post-resolver';
import { getComment, getComments, addComment, updateComment, deleteComment } from './resolvers/comment-resolver';

const connection = require('./knexfile');
const knexLib = require('knex');

exports.graphqlHandler = (event, context, callback) => {
exports.graphqlHandler = async (event, context) => {
context.callbackWaitsForEmptyEventLoop = false;
console.log('Received event {}', JSON.stringify(event, 3));

switch (event.field) {
case 'getAuthor': {
getAuthor(event.arguments).then(result => {
callback(null, result);
}).catch(error => {
callback(error, null);
});
break;
}
case 'getAuthors': {
getAuthors(event.arguments).then(result => {
callback(null, result);
}).catch(error => {
callback(error, null);
});
break;
}
case 'getPost': {
getPost(event.arguments).then(result => {
callback(null, result);
}).catch(error => {
callback(error, null);
});
break;
}
case 'getPosts': {
getPosts(event.arguments).then(result => {
callback(null, result);
}).catch(error => {
callback(error, null);
});
break;
}
case 'getComment': {
getComment(event.arguments).then(result => {
callback(null, result);
}).catch(error => {
callback(error, null);
});
break;
}
case 'getComments': {
getComments(event.arguments).then(result => {
callback(null, result);
}).catch(error => {
callback(error, null);
});
break;
}
case 'addPost': {
addPost(event.arguments).then(result => {
callback(null, result);
}).catch(error => {
callback(error, null);
});
break;
}
case 'updatePost': {
updatePost(event.arguments).then(result => {
callback(null, result);
}).catch(error => {
callback(error, null);
});
break;
}
case 'deletePost': {
deletePost(event.arguments).then(result => {
callback(null, result);
}).catch(error => {
callback(error, null);
});
break;
}
case 'addComment': {
addComment(event.arguments).then(result => {
callback(null, result);
}).catch(error => {
callback(error, null);
});
break;
}
case 'updateComment': {
updateComment(event.arguments).then(result => {
callback(null, result);
}).catch(error => {
callback(error, null);
});
break;
}
case 'deleteComment': {
deleteComment(event.arguments).then(result => {
callback(null, result);
}).catch(error => {
callback(error, null);
});
break;
}
case 'comments': {
getComments(event.arguments).then(result => {
callback(null, result);
}).catch(error => {
callback(error, null);
});
break;
}
case 'author': {
getAuthor(event.arguments).then(result => {
callback(null, result);
}).catch(error => {
callback(error, null);
});
break;
}
case 'posts': {
getPosts(event.arguments).then(result => {
callback(null, result);
}).catch(error => {
callback(error, null);
});
break;
}
default: {
callback(`Unknown field, unable to resolve ${event.field}`, null);
break;
}
const knex = knexLib(process.env.NODE_ENV === 'production' ? connection.production : connection.dev);

try {
let result;

switch (event.field) {
case 'author':
case 'getAuthor': {
result = await getAuthor(knex, event.arguments);
break;
}
case 'getAuthors': {
result = await getAuthors(knex, event.arguments);
break;
}
case 'getPost': {
result = await getPost(knex, event.arguments);
break;
}
case 'posts':
case 'getPosts': {
result = await getPosts(knex, event.arguments);
break;
}
case 'getComment': {
result = await getComment(knex, event.arguments);
break;
}
case 'comments':
case 'getComments': {
result = await getComments(knex, event.arguments);
break;
}
case 'addPost': {
result = await addPost(knex, event.arguments);
break;
}
case 'updatePost': {
result = await updatePost(knex, event.arguments);
break;
}
case 'deletePost': {
result = await deletePost(knex, event.arguments);
break;
}
case 'addComment': {
result = await addComment(knex, event.arguments);
break;
}
case 'updateComment': {
result = await updateComment(knex, event.arguments);
break;
}
case 'deleteComment': {
result = await deleteComment(knex, event.arguments);
break;
}
default: {
throw `Unknown field, unable to resolve ${event.field}`;
}
}
return result;
} catch (error) {
console.log('Lambda error:', error);
return Promise.reject(error);
} finally {
knex.destroy();
}
};
1 change: 0 additions & 1 deletion knexfile.js
@@ -1,4 +1,3 @@
// eslint-disable-next-line
const mysql = require('mysql');

module.exports = {
Expand Down
1 change: 0 additions & 1 deletion mapping-templates/addPost-response-mapping-template.txt

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

1 change: 0 additions & 1 deletion mapping-templates/deletePost-response-mapping-template.txt

This file was deleted.

1 change: 0 additions & 1 deletion mapping-templates/getAuthor-response-mapping-template.txt

This file was deleted.

1 change: 0 additions & 1 deletion mapping-templates/getAuthors-response-mapping-template.txt

This file was deleted.

1 change: 0 additions & 1 deletion mapping-templates/getComment-response-mapping-template.txt

This file was deleted.

This file was deleted.

1 change: 0 additions & 1 deletion mapping-templates/getPost-response-mapping-template.txt

This file was deleted.

1 change: 0 additions & 1 deletion mapping-templates/getPosts-response-mapping-template.txt

This file was deleted.

1 change: 0 additions & 1 deletion mapping-templates/postAuthor-response-mapping-template.txt

This file was deleted.

This file was deleted.

This file was deleted.

1 change: 0 additions & 1 deletion mapping-templates/updatePost-response-mapping-template.txt

This file was deleted.

33 changes: 7 additions & 26 deletions resolvers/author-resolver.js
@@ -1,31 +1,12 @@
const connection = require('./../knexfile');
const knex = require('knex')(process.env.NODE_ENV === 'production' ? connection.production : connection.dev);

async function getAuthor(args) {
try {
const getAuthorQuery = knex('author')
.where('id', args.id)
.first();

const result = await getAuthorQuery;

return result
} catch (err) {
console.log(err);
}
async function getAuthor(knex, args) {
return await knex('author')
.where('id', args.id)
.first();
}

async function getAuthors(args) {
try {
const getAuthorsQuery = knex('author')
.orderBy('lastname', 'asc');

const result = await getAuthorsQuery;

return result
} catch (err) {
console.log(err);
}
async function getAuthors(knex, args) {
return await knex('author')
.orderBy('lastname', 'asc');
}

export { getAuthor, getAuthors };

0 comments on commit eca7e63

Please sign in to comment.