Как сопоставить поля запроса со столбцом таблицы базы данных?

Например:

typeDefs:

type User {
  userId: ID!
  userNme: String
  userEmail: String
}

В базе данных таблица users имеет три столбца: user_id, user_nme, user_email.

Теперь клиент отправляет запрос GraphQL с именем userById с двумя полями: user_id и user_nme.

Операторы SQL моего слоя DAO:

async function findUserById(id: string) {
  const sql = `
    SELECT * FROM users WHERE user_id = ?;
  `
  return db('users').raw(sql, [id]);
}

Как видите, оператор SQL выбирает все столбцы таблицы users из базы данных.

Как сопоставить конкретные fields клиентских сообщений с оператором SQL select?

Ожидаемый результат:

async function findUserById(id: string) {
  const sql = `
    SELECT 
      user_id, 
      user_nme
    FROM users WHERE user_id = ?;
  `
  return db('users').raw(sql, [id]);
}

Проще говоря: я просто хочу запросить поля, которые клиент хочет запросить.


person slideshowp2    schedule 18.05.2019    source источник
comment
Вы можете проверить, какие поля отправляются в операторе if, и соответствующим образом изменить запрос. Что более безопасно   -  person weegee    schedule 18.05.2019
comment
Эффективно преобразовывать запросы GraphQL в SQL сложно, особенно когда вы начинаете иметь дело с фильтрацией, отношениями и разбиением на страницы. Я настоятельно рекомендую обратить внимание на существующие инструменты, такие как join-monster, Prisma, PostGraphile или Hasura, а не пытаться изобретать велосипед.   -  person Daniel Rearden    schedule 18.05.2019
comment
@DanielRearden Спасибо. Я знаю, что Prisma может это сделать, но я использую стек apollographql.   -  person slideshowp2    schedule 18.05.2019