GraphQL Server Guide
Schema Definition
const typeDefs = `#graphql
type User {
id: ID!
name: String!
email: String
posts: [Post!]!
}
type Post {
id: ID!
title: String!
body: String!
author: User!
}
type Query {
users: [User!]!
user(id: ID!): User
}
type Mutation {
createUser(name: String!, email: String): User!
deleteUser(id: ID!): Boolean!
}
type Subscription {
userCreated: User!
}
`;
Apollo Server Setup
import { ApolloServer } from '@apollo/server';
import { startStandaloneServer } from '@apollo/server/standalone';
const resolvers = {
Query: {
users: async (_, __, { db }) => db.user.findMany(),
user: async (_, { id }, { db }) => db.user.findUnique({ where: { id } }),
},
Mutation: {
createUser: async (_, args, { db, user }) => {
if (!user) throw new GraphQLError('Unauthorized', { extensions: { code: 'UNAUTHENTICATED' } });
return db.user.create({ data: args });
},
},
User: {
posts: async (parent, _, { db }) => db.post.findMany({ where: { authorId: parent.id } }),
},
};
const server = new ApolloServer({ typeDefs, resolvers });
const { url } = await startStandaloneServer(server, {
context: async ({ req }) => ({
db: prisma,
user: await getUser(req.headers.authorization),
}),
});
console.log(`Server at ${url}`);