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,
    }
  },
})