桑格利亚汽酒图QL模式与任一个T结果



我正在将桑格利亚汽酒用于Play应用程序,目前正在努力实现架构定义。问题是,服务不直接返回所需的对象,而是返回包含该对象的 BothT。

下面是一些代码示例

案例类

case class User(name: String, age: Int)

用户服务

def user(): EitherT[Future, AbstractError, User] = {...}

如果服务将返回User而不是EitherT[Future, AbstractError, User]我将像这样派生架构:

图式

  val UserType = deriveObjectType[UserService, User]( 
      ObjectTypeName("User"),
      ObjectTypeDescription("A simple user."))

我是否必须实现一个额外的层来从EitherT对象中提取User,或者是否有其他方法来处理这种情况?

您仍然可以派生User对象类型,因为它只是一个简单的案例类。对于加载用户并返回EitherT的其他 GraphQL 字段,您需要将值转换为桑格利亚汽酒可以使用的值(这意味着需要手动定义这些字段,但您仍然可以对其他字段使用derive*宏(。最简单的方法是将其折叠成一个简单的Future[User]Future能够控制错误或成功结果。如果您在 Either 中有一个错误列表,那么您可以将其包装在某个自定义异常中,然后解包并在 ExceptionHandler 中正确呈现它。

您还可以在

架构中的某个位置使用从猫EitherT到桑格利亚汽酒FutureValue的隐式转换:

implicit def eithertAction[Ctx, Val, E <: Throwable](value: EitherT[Future, E, Val]): ReduceAction[Ctx, Val] = FutureValue(value.valueOrF(Future.failed))

相关内容

  • 没有找到相关文章

最新更新