impress-2020/src/server/index.js

50 lines
1,010 B
JavaScript
Raw Normal View History

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