Graphql с Apollo - рефакторинг запросов, возвращаемые объекты повторяются (те же поля в запросах diff) - PullRequest
0 голосов
/ 10 июля 2020

У меня есть несколько запросов с одинаковыми типами возврата:

// Query 1
gql`
        mutation insert_shops_users($shopId: uuid) {
          insert_shops_users(objects: [{ shopId: $shopId }]) {
            affected_rows
            returning {
              Shop {
                id
                users {
                  userId
                }
              }
            }
          }
        }
      `,
// Query 2
gql`
        mutation delete_shops_users_by_pk($shopId: uuid!, $userId: String!) {
          delete_shops_users_by_pk(shopId: $shopId, userId: $userId) {
            Shop {
              id
              users {
                userId
              }
            }
          }
        }
      `,

Теперь я хотел бы извлечь эту часть, например, под именем ShopUserResult и использовать ее в обоих запросах:

Извлечено из ShopUserResult

Shop {
  id
  users {
    userId
  }
}

Результирующие запросы

// Query 1 - after refactor
gql`
        mutation insert_shops_users($shopId: uuid) {
          insert_shops_users(objects: [{ shopId: $shopId }]) {
            affected_rows
            returning {
             ShopUserResult
            }
          }
        }
      `,
// Query 2 - after refactor
gql`
        mutation delete_shops_users_by_pk($shopId: uuid!, $userId: String!) {
          delete_shops_users_by_pk(shopId: $shopId, userId: $userId) {
            ShopUserResult
          }
        }
      `,

Я новичок в graphql, любые советы по рефакторингу были бы очень признательны, спасибо.

1 Ответ

0 голосов
/ 10 июля 2020

Возможно рефакторинг повторяющихся наборов полей с использованием фрагментов ( источник 1 , источник 2 ):

Запрос - до

gql`
  mutation insert_shops_users($shopId: uuid) {
    insert_shops_users(objects: [{ shopId: $shopId }]) {
      affected_rows
      returning {
        Shop {
          id
          users {
            userId
          }
        }
      }
    }
  }
      `,

Запрос - после использования фрагментов

Фрагмент
const ShopWithUsers = gql`
  fragment ShopWithUsers on shops {
    id
    users {
      userId
    }
  }
`
Запрос
gql: gql`
  mutation insert_shops_users($shopId: uuid) {
    insert_shops_users(objects: [{ shopId: $shopId }]) {
      affected_rows
      returning {
        Shop {
          ...ShopWithUsers
        }
      }
    }
  }
  ${ShopWithUsers}
`,
...