【问题标题】:AWS Amplify + Appsync - Is it possible to use @connection transform to cascade delete related data?AWS Amplify + Appsync - 是否可以使用@connection 转换级联删除相关数据?
【发布时间】:2019-09-06 16:44:09
【问题描述】:

我正在使用 AWS Amplify 和 AppSync 开发一个 Web 应用程序来读取我的数据并将其写入 DynamoDB 表。使用Amplify's GraphQL Transforms,使用@connection 转换很容易在数据类型之间建立连接。我想知道是否可以通过简化或半自动的方式删除相关数据。

假设一个简单的博客示例,其中用户有一个博客,其中有帖子,而这些帖子又拥有其他用户拥有的 cmets。如果帖子被删除,我想删除与该帖子关联的 cmets。如果用户被删除,我想删除他们的博客、帖子和与这些帖子相关的 cmets,以及用户在其他帖子上留下的任何评论。这个例子是设计的,也许希望以某种形式维护这些数据中的一些。但是,在某些情况下,这种行为正是我想要的。

过去在使用 Prisma 时,我使用他们的 @relation 指令来建立类似于使用 Amplify 的 @connection 的关系。 但是,在我想要级联删除的情况下,我会写一些类似的东西:

type Post {
id: ID! @unique
  title: String!
  body: String!
  owner: ID!
  comments: [Comment!] @relation(name: "PostComments",
onDelete: CASCADE)
}

我可以使用 onDelete 参数并将其设置为 CASCADESET_NULL,具体取决于我的处理方式。

有没有办法通过 Amplify 做类似的事情?当然,我可以编写一堆 VTL 或 Lambda 解析器来处理每种情况,但我想先检查是否有更快/更简单的方法来实现它。

【问题讨论】:

  • 您能否澄清一下您是如何通过 VTL 做到这一点的?我现在也有同样的问题
  • 嘿@JohnStone,很抱歉。我正在从事的项目来了又去。老实说,我什至不记得我最终是否让这种行为起作用了。这是我一直致力于探索这个堆栈的个人项目。免费试用期结束后,我删除了我的 AWS 账户,转而进行更多的移动应用程序开发。我记得VTL有点痛苦,因为我不熟悉它,非常希望我能用javascript写出来。我相信它需要这个:docs.aws.amazon.com/appsync/latest/devguide/…
  • 您可以通过使用直接 lambda 自定义解析器来实现所需的结果,而不是在 VTL 中创建自定义解析器。这里有一些文档可供参考: - 介绍文章:timveletta.com/blog/… - 放大文档:docs.amplify.aws/cli/graphql-transformer/function - AWS 的公告文章:aws.amazon.com/blogs/mobile/appsync-direct-lambda

标签: amazon-dynamodb graphql aws-appsync aws-amplify


【解决方案1】:

Amplify 本身还不支持此功能。正如您所说,您可以使用管道解析器和一些 VTL 复制此行为,然后通过 Amplify CLI 或您自己进行部署。有计划允许您编写自己的转换器来编码像这样的可重现逻辑作为解析器(请参阅https://github.com/aws-amplify/amplify-cli/issues/1060),并计划为所有 Amplify CLI 项目转向管道解析器(请参阅https://github.com/aws-amplify/amplify-cli/issues/1055)。

【讨论】:

  • 这是我从研究中收集到的。谢谢你的澄清!
猜你喜欢
  • 2022-08-24
  • 2022-10-16
  • 2018-10-27
  • 1970-01-01
  • 2020-12-28
  • 2011-10-12
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多