def route()

in pekko-sample-persistence-dc-scala/src/main/scala/sample/persistence/res/counter/ThumbsUpHttp.scala [19:55]


  def route(selfReplica: ReplicaId, res: ReplicatedSharding[ThumbsUpCounter.Command])(
      implicit system: ActorSystem[_]): Route = {

    import org.apache.pekko.http.scaladsl.server.Directives._

    implicit val timeout: Timeout = Timeout(10.seconds)
    implicit val ec: ExecutionContext = system.executionContext

    pathPrefix("thumbs-up") {
      concat(
        // example: curl http://127.0.0.1:27345/thumbs-up/pekko
        get {
          path(Segment) { resourceId =>
            onComplete(res.entityRefsFor(resourceId)(selfReplica).ask[State](replyTo =>
              ThumbsUpCounter.GetUsers(resourceId, replyTo))) {
              case Success(state) =>
                val s = Source.fromIterator(() => state.users.iterator)
                  .intersperse("\n")
                  .map(ByteString(_))
                complete(HttpResponse(entity = HttpEntity(ContentTypes.`text/plain(UTF-8)`, s)))
              case Failure(ex) => complete(StatusCodes.InternalServerError, ex.toString)
            }
          }
        },
        // example: curl -X POST http://127.0.0.1:27345/thumbs-up/pekko/u1
        post {
          path(Segment / Segment) { (resourceId, userId) =>
            onComplete(res.entityRefsFor(resourceId)(selfReplica).ask[Long](replyTo =>
              ThumbsUpCounter.GiveThumbsUp(resourceId, userId, replyTo))) {
              case Success(i)  => complete(i.toString)
              case Failure(ex) => complete(StatusCodes.BadRequest, ex.toString)
            }
          }
        })
    }

  }