Review this route before it accepts production orders.
Authenticate the tenant, validate the request, create an order idempotently, and publish a durable notification after commit.
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
generated code is illustrative, not from any one model