es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

AWS Amplify Obteniendo los datos del propietario no solo el Id.

¿Es posible algo así? ¿Cómo se supone que debe diseñarse para este caso de uso? ¿Tengo que agregar una función lambda que agregue el usuario (propietario) a la publicación cuando se crea?

¿Alguien puede ayudarme a lograr eso? ¡Gracias!

Este es el esquema de la publicación:

type Post
  @model
  @key(name: "byClub", fields: ["clubId"])
  @auth(
    rules: [
      { allow: owner, operations: [create, update, delete, read] }
      { allow: private, operations: [read] }
    ]
  ) {
  id: ID!
  content: String!
  upVotes: Int!
  downVotes: Int!
  image: String
  clubId: ID!
  comments: [Comment] @connection(keyName: "byPost", fields: ["id"])
}

Y cuando obtengo la publicación, esto es lo que obtengo:

{
    "id": "xxxxxxx",
    "content": "xxxxx!",
    "upVotes": 0,
    "downVotes": 0,
    "image": null,
    "clubId": "xxxxxx",
    "comments": {
        "nextToken": null
    },
    "createdAt": "2021-12-05T10:46:59.797Z",
    "updatedAt": "2021-12-05T10:46:59.797Z",
    "owner": "moneebalalfi@gmail.com"
}

Quiero algo como esto:

{
    "id": "xxxxx",
    "content": "xxxxxxx",
    "upVotes": 0,
    "downVotes": 0,
    "image": null,
    "clubId": "xxxxxxxx",
    "comments": {
        "nextToken": null
    },
    "createdAt": "2021-12-05T10:46:59.797Z",
    "updatedAt": "2021-12-05T10:46:59.797Z",
    "owner": {
        "name": "xxxxx",
        "email": "xxxx@gmail.com",
        "image": "xxxxxx"
        // y así sucesivamente...
    }
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para lograr el resultado deseado, puedes agregar una función de resolución utilizando AWS AppSync y AWS Lambda, que buscará los detalles del propietario desde Amazon Cognito User Pool y devolverá la respuesta transformada con los detalles adicionales del propietario. La función de resolución se activará después de buscar los datos de la publicación y antes de enviar la respuesta al cliente.

    Aquí te mostramos cómo puedes diseñar este caso de uso:

    1. Agrega un nuevo resolutor en tu API de AWS AppSync con una plantilla VTL que active una función Lambda.
    2. En la función Lambda, utiliza AWS Amplify para autorizar al usuario y buscar los detalles del usuario desde Amazon Cognito User Pool.

    3. Transforma la respuesta de GraphQL agregando los detalles del propietario obtenidos desde Cognito y devuelve la respuesta transformada.

    4. En el resolutor de AppSync, mapea la respuesta de la función Lambda de vuelta a la respuesta de GraphQL y devuélvela al cliente.

    En cuanto a agregar el propietario a la publicación cuando se crea, puedes actualizar el resolutor de la mutación createPost para agregar el ID del propietario al objeto Post utilizando la función identity, o puedes agregar una función Lambda que se active en el evento de creación del objeto Post para actualizar el objeto Post agregando el ID del propietario.

    En general, utilizando los servicios de AWS como AWS AppSync, Amazon Cognito y AWS Amplify, puedes lograr fácilmente el resultado deseado y agregar funcionalidades adicionales a tu aplicación.

Comments are closed.