impress-2020/server/index.js
2020-04-22 11:51:36 -07:00

44 lines
851 B
JavaScript

const { ApolloServer, gql } = require("apollo-server");
const connectToDb = require("./db");
const { loadItems, loadItemTranslation } = require("./loaders");
const typeDefs = gql`
type Item {
id: ID!
name: String!
}
type Query {
items(ids: [ID!]!): [Item!]!
}
`;
const resolvers = {
Item: {
name: async (item, _, { db }) => {
const translation = await loadItemTranslation(db, item.id, "en");
return translation.name;
},
},
Query: {
items: (_, { ids }, { db }) => loadItems(db, ids),
},
};
const server = new ApolloServer({
typeDefs,
resolvers,
context: async () => {
const db = await connectToDb();
return { db };
},
});
if (require.main === module) {
server.listen().then(({ url }) => {
console.log(`🚀 Server ready at ${url}`);
});
}
module.exports = { server };