GraphQL:建模不断发展的类型/状态转换

问题描述

这是我们现在多次遇到的问题,非常期待别人的意见!


方案说明(出于说明目的):

有人访问我们的网站,也许他们填写了一些表格,无论如何。对我们来说,这个人是潜在客户/潜在客户。他们还没有完全以客户身份入职;他们只是潜在的 潜在客户。

可以对这些Prospects执行某些操作,例如将某些数据添加到其配置文件中。我们称之为add_foobar_data。当然,如果他们成为真实客户(使用我们服务的人),我们仍然需要能够从他们的帐户中添加/删除所说的数据。


场景(tl; dr):

  • Prospects可以成为Customers
  • 突变add_foobar_data 从概念上讲适用于ProspectsCustomers
  • Prospects仅包含Customers的数据子集(它们是真实的子集;当前Customers拥有很多{null不可包含的字段Prospects

选项

  1. 创建联合类型,例如Customerableadd_foobar_data将返回Customerable(或对Customerable的反向引用),而不是特定类型。

  2. 创建单独的突变以修改ProspectsCustomersadd_foobar_data_to_prospectadd_foobar_data_to_customer

  3. 每个人都是Customer!使Customer上所有不在Prospect中的非空字段为空,并添加一个名为isProspect的新标志(如果要更改想法,请添加isDraft流量)。

  4. 也许我没有想到的其他方法...


任何人都在思考什么是解决这种情况的最佳方法,为什么?

解决方法

最终使用Interface是因为ProspectCustomer的直接子集,并非偶然。