FaunaDB - Как массово обновить список записей в пределах одной мутации graphQL? - PullRequest
1 голос
/ 18 марта 2020

Я хочу массово обновить список записей с мутацией graphQL в faunaDB. Входными данными является список случаев коронавируса из внешнего источника. Это будет часто обновляться. Мутация должна обновлять существующие записи, если имя записи присутствует в коллекции, и создавать новые, если она отсутствует.

Текущая GRAPHQL MUTATION

mutation UpdateList($data: ListInput!) {
  updateList(id: "260351229231628818", data: $data) {
    title
    cities {
      data {
        name
        infected
      }
    }
  }
}

GRAPHQL VARIABLES

{
  "data": {
    "title": "COVID-19",
    "cities": {
      "create": [
        {
          "id": 22,
          "name": "Warsaw",
          "location": {
            "create": {
              "lat": 52.229832,
              "lng": 21.011689
            }
          },
          "deaths": 0,
          "cured": 0,
          "infected": 37,
          "type": "ACTIVE",
          "created_timestamp": 1583671445,
          "last_modified_timestamp": 1584389018
        }
      ]
    }
  }
}

SCHEMA

type cityEntry {
  id: Int!
  name: String!
  deaths: Int!
  cured: Int!
  infected: Int!
  type: String!
  created_timestamp: Int!
  last_modified_timestamp: Int!
  location: LatLng!
  list: List
}

type LatLng {
  lat: Float!
  lng: Float!
}

type List {
  title: String!
  cities: [cityEntry] @relation
}

type Query {
  items: [cityEntry!]
  allCities: [cityEntry!]
  cityEntriesByDeathFlag(deaths: Int!): [cityEntry!]
  cityEntriesByCuredFlag(cured: Int!): [cityEntry!]
  allLists: [List!]
}

Каждый раз, когда происходит мутация, создаются новые дубликаты. Каков наилучший способ обновить список в пределах одной мутации?

1 Ответ

1 голос
/ 10 мая 2020

мои извинения за задержку, я не был точно уверен, что это за недостающая информация, поэтому я прокомментировал первым :).

Схема

Пример части схемы, имеющей аргументы:

type Mutation {
  register(email: String!, password: String!): Account! @resolver
  login(email: String!, password: String!): String! @resolver
}

Когда такая схема импортируется в FaunaDB, будут предоставлены функции-заполнители.

Параметры UDF

Function stubs

Как вы можете видеть, все, что делает функция, это Abort с сообщением, что функция все еще должна быть реализованы. Реализация начинается с лямбды, которая принимает аргументы, и эти аргументы должны соответствовать тому, что вы определили в распознавателе.

Query(Lambda(['email', 'password'],
    ... function body ...
))

Использование аргументов осуществляется с помощью Var, что в данном случае означает Var («электронная почта») или Var («пароль»). Например, в моем конкретном случае c мы будем использовать сообщение, которое было передано для получения учетной записи по электронной почте, и пароль для передачи функции Login , которая возвращает секрет (причина Я выбираю здесь то, что возвращаемое значение для распознавателя GraphQL должно быть действительным результатом GraphQL (например, обычный JSON

Query(Lambda(['email', 'password'],
    Select(
      ['secret'],
      Login(Match(Index('accountsByEmail'), Var('email')), {
        password: Var('password')
      })
    )
))

Вызов преобразователя UDF через GraphQL

Наконец, как передать параметры при вызове? Это должно быть ясно из площадки GraphQL, так как она предоставит вам документы и автозаполнение. Например, это то, что автоматически сгенерированные документы GraphQL сообщают мне после импорта моей схемы:

enter image description here

Это означает, что мы можем назвать его следующим образом:

mutation CallLogin {
  login (
    email: "<some email>"
    password: "<some pword>"
  )
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...