GraphQL - Prisma - распознаватели с использованием внешнего API - PullRequest
0 голосов
/ 26 января 2019

У меня есть эта схема:

type Invoice {
  id: ID! @unique
  description: String
  charge: Charge
}

type Charge {
  id: ID! @unique
  amount: Float
  dataFromAPI: DataFromAPI
}
type DataFromAPI {
  id: ID! @unique
  status: String
}

в Resolver Query, у меня есть:

async function charge(parent, args, ctx, info) {
  chargeData = await ctx.db.query.charge(args, info)
  chargeData.dataFromAPI = await DO_THE_API_CALL_TO_RETRIEVE_DATA()
  return chargeData
}

и

async function invoice(parent, args, ctx, info) {
  invoiceData = await ctx.db.query.invoice(args, info)
  return invoiceData
}

запрос:

query ChargeQuery {
  charge {
    id
    amount
    dataFromAPI
  }
}

вернет

{
  charge {
    id: '232323'
    amount: 323
    dataFromAPI: 'GREAT! DATA IS FROM API'
  }
}

но этот запрос:

query InvoiceQuery {
  invoice {
    id
    description
    charge {
      id
      amount
      dataFromAPI
    }
  }
}

вернет

{
  Invoice {
    id: '7723423',
    description:'yeah',
    charge {
      id: '232323'
      amount: 323
      dataFromAPI: null
    }
  }
}

dataFromAPI пусто, потому что я не вызывал API в этом преобразователе. Где я должен вызвать функцию DO_THE_API_CALL_TO_RETRIEVE_DATA(). В каждом резольвере? Я думаю, это невозможно масштабировать.

1 Ответ

0 голосов
/ 26 января 2019

Решение: Мы должны использовать преобразователь на уровне поля .

schema.graphql

type Charge {
  id: ID!
  invoice: Invoice!
  messageErrorPayment: String
  stripeChargeId: String!
  dateErrorPayment: DateTime
  createdAt: DateTime!
  chargeData: ChargeData
}

/ resolvers / index.js

const { Query } = require('./Query')
const { Mutation } = require('./mutation/Mutation')
const { Charge } = require('./Charge')

module.exports = {
  Query,
  Mutation,
  Charge,
}

charge.js

async function chargeData(parent, args, ctx, info) {
  return {
    dataFromAPI: await DO_THE_API_CALL_TO_RETRIEVE_DATA()
  }
}

const Charge = {
  chargeData,
}

module.exports = {
  Charge,
}

источник: https://www.prisma.io/forum/t/how-to-use-field-resolvers-to-get-aggregates-of-inner-relation-types/2930/2?u=alan345

...