AWS Amplify AppSyn c @функция в поле модели - PullRequest
3 голосов
/ 18 июня 2020

Я создаю схему Amplify для блога, которая выглядит примерно так:

 type Post @model {
   id: ID!
   caption: String!
   src: String!
 }

Я хочу добавить новое поле в модель Post для расчета количества раз a Пост понравился. Он получает эти данные из другого API.

Есть ли способ запустить функцию только в поле модели что-то вроде этого.

 type Post @model {
   id: ID!
   caption: String!
   src: String!
   likes: String @function("getLikesLambda-${dev}")
 }

Как будет выглядеть код getLikesLambda? Я видел код в официальной документации по реализации преобразователей, но все они t ie @function to type query , что не совсем то, что я ищу.

Дайте мне знать, если у вас есть какие-нибудь предложения или если что-то неясно.

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Ваш преобразователь может быть прикреплен к любому полю, а не только к запросу root

Я реализовал нечто подобное

На вашей схеме graphQL:

  likes: String @function(name: "getLikesLambda-${env}")

Добавьте новую лямбда-функцию, вызывающую amplify function add

А затем напишите свой код, вот пример Python, но вы можете использовать любой поддерживаемый язык.

import boto3

def handler(event, context):
  print('received event:')
  print(event)

  if 'typeName' in event and event['typeName'] == 'Post' and event['fieldName'] == 'likes':
    print("Resolve field likes")
    # Do your logic to get the likes
    likes = getLikes()
    return likes

  return ''
0 голосов
/ 07 июля 2020

@ danielfranca совершенно прав. Я еще не тестировал его, но недавно нашел здесь некоторую документацию, которую раньше не видел: https://docs.amplify.aws/cli/graphql-transformer/directives. Вот пример для функций, которые имеют это:

type Query {
    posts: [Post] @function(name: "GraphQLResolverFunction")
}
type Post {
    id: ID!
    title: String!
    comments: [Comment] @function(name: "GraphQLResolverFunction")
}
type Comment {
    postId: ID!
    content: String
}
...