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)
}
}
})
}
}