Как заставить фильтр на стороне сервера к запросу в GraphQL? - PullRequest
1 голос
/ 03 мая 2020

Представьте себе условие, что у меня есть запрос под названием «пользователи», который возвращает всех пользователей, и эти пользователи могут быть связаны с одной или несколькими компаниями, поэтому у меня есть тип UserCompanies (он мне нужен, потому что он сохраняет некоторую дополнительную информацию помимо связь). Я использую Prisma, и мне нужно установить фильтр, который возвращает только пользователей, принадлежащих к той же компании, что и запросчик. Я получаю информацию о компании от JWT, и мне нужно вставить ее в запрос перед отправкой в ​​Prisma.

Итак, запрос должен быть таким:

query allUsers {
  users {
    name
    id
    status
    email
    userCompanies{
      id
      role
    }
  }
}

и на стороне сервера Я должен преобразовать его в: (пользователь, где все в порядке, просто меняя аргументы)

query allUsers {
  users(where: {
    userCompanies_some: {
      companyId: "companyId-from-jwt"
    }
  }) {
    name
    id
    status
    email
    userCompanies(where: {
      companyId: "companyId-from-jwt"
    }){
      id
      role
    }
  }
}

Я вижу несколько разрешений на это, но я не знаю, является ли это лучшим способом: 1 - Используя addFragmentToInfo, выполняет задание условий для запроса, но если в запросе уже заданы пользовательские компании, возникает конфликт. В остальном работает нормально. 2 - Я могу использовать псевдоним для запроса, но после результата БД мне нужно будет отредактировать все результаты в массиве, чтобы перезаписать результат. 3 - не использовать информацию о Prisma и фильтровать в js. 4 - Изменить информацию (4-й параметр) типа GraphqlResolveInfo

...