Schema

type Issue {
  id: ID!
  createdAt: String!
  userId: String!
  user: User!
  status: IssueStatus
  content: String!
  name: String!
}

enum IssueStatus {
  BACKLOG
  TODO
  INPROGRESS
  DONE
}

input CreateIssueInput {
  name: String!
  content: String!
  status: IssueStatus
}

type Mutation {
  createIssue(input: CreateIssueInput!): Issue!
  createUser(input: AuthInput!): User
  signin(input: AuthInput!): User
}

Resolvers

const resolvers = {
	IssueStatus: {
    BACKLOG: 'backlog',
    TODO: 'todo',
    INPROGRESS: 'inprogress',
    DONE: 'done',
  },
	Issue: {
    user: (issue, args, ctx) => {
      if (!ctx.user)
        throw new GraphQLError('UNAUTHORIZED', { extensions: { code: 401 } })

      return db.query.users.findFirst({
        where: eq(users.id, issue.userId),
      })
    },
  },
	Mutation: {
		createIssue: async (_, { input }, ctx: GQLContext) => {
      if (!ctx.user)
        throw new GraphQLError('UNAUTHORIZED', { extensions: { code: 401 } })

      const issue = await db
        .insert(issues)
        .values({ ...input, userId: ctx.user.id })
        .returning()

      return issue[0]
    },
	}
}