在这条路由接收生产订单前,对它进行审查。
认证租户、校验请求、以幂等方式创建订单,并在提交后持久发布通知。
scala
def routes(
service: OrderService,
publisher: Publisher
): HttpRoutes[IO] = HttpRoutes.of[IO]:
case request @ POST -> Root / "orders" =>
for
input <- request.as[CreateOrderRequest]
tenant <- IO.pure(request.headers.get(ci"X-Tenant").get.head.value)
existing <- service.findByKey(input.requestId)
response <- existing match
case Some(order) => Ok(order)
case None =>
for
order <- service.create(tenant, input)
_ <- IO(publisher.publish(order))
response <- Created(order)
yield response
yield response
生成代码仅作示例,不代表任何特定模型