Schema
type User {
id: ID!
email: String!
createdAt: String!
token: String
}
type Query {
me: User
}
input AuthInput {
email: String!
password: String!
}
type Mutation {
createUser(input: AuthInput!): User
signin(input: AuthInput!): User
}
Resolvers
import { db } from '@/db/db'
import { InsertIssues, SelectIssues, issues, users } from '@/db/schema'
import { GQLContext } from '@/types'
import { getUserFromToken, signin, signup } from '@/utils/auth'
import { and, asc, desc, eq, or, sql } from 'drizzle-orm'
import { GraphQLError } from 'graphql'
const resolvers = {
Query: {
me: async (_, __, ctx) => {
return ctx.user
},
},
Mutation: {
signin: async (_, args) => {
const data = await signin(args.input)
if (!data || !data.user || !data.token) {
throw new GraphQLError('UNAUTHORIZED', {
extensions: { code: 'AUTH_ERROR' },
})
}
return { ...data.user, token: data.token }
},
createUser: async (_, args) => {
const data = await signup(args.input)
if (!data || !data.user || !data.token) {
throw new GraphQLError('could not create user', {
extensions: { code: 'AUTH_ERROR' },
})
}
return { ...data.user, token: data.token }
},
}
}
Server
// app/api/graphql/route.ts
const handler = startServerAndCreateNextHandler<NextRequest>(server, {
context: async (req) => {
const user = await getUserFromToken(req.headers.get('authorization') ?? '')
return {
req,
user,
}
},
})