Schema

type User {
  id: ID!
  email: String!
  createdAt: String!
  token: String
  issues: [Issue]! # add issues field
}

input IssuesFilterInput {
  statuses: [IssueStatus]
}

type Query {
  me: User
  issues(input: IssuesFilterInput): [Issue]! # add issues query
}

Resolvers

const resolvers = {
	User: {
    issues: (user, args, ctx) => {
      if (!ctx.user)
        throw new GraphQLError('UNAUTHORIZED', { extensions: { code: 401 } })

      return db.query.issues.findMany({
        where: eq(issues.userId, user.id),
      })
    },
  },
  
  Query: {
	  issues: async (
      _,
      {
        input,
      }: {
        input?: {
          statuses?: SelectIssues['status'][]
          projects?: SelectIssues['projectId'][]
        }
      },
      ctx: GQLContext
    ) => {
      if (!ctx.user)
        throw new GraphQLError('UNAUTHORIZED', { extensions: { code: 401 } })

      const andFilters = [eq(issues.userId, ctx.user.id)]

      if (input && input.statuses && input.statuses.length) {
        const statusFilters = input.statuses.map((status) =>
          eq(issues.status, status)
        )

        andFilters.push(or(...statusFilters))
      }

      const data = await db.query.issues.findMany({
        where: and(...andFilters),
        orderBy: [
          asc(sql`case ${issues.status}
        when "backlog" then 1
        when "inprogress" then 2
        when "done" then 3
      end`),
          desc(issues.createdAt),
        ],
      })

      return data
    },
  }
}