Skip to content

Instantly share code, notes, and snippets.

@tsegismont
Created June 5, 2019 13:16
Show Gist options
  • Save tsegismont/da2458af51a65f4a7f79cfdb1d4b33c2 to your computer and use it in GitHub Desktop.
Save tsegismont/da2458af51a65f4a7f79cfdb1d4b33c2 to your computer and use it in GitHub Desktop.
Router router = Router.router(vertx);
router.route()
.handler(ResponseContentTypeHandler.create())
.handler(BodyHandler.create());
router
.get("/beer")
.handler(beersHandlers::handleGetBeers);
router
.post("/beer")
.handler(beersHandlers::handlePostBeer);
public void handleGetBeers(RoutingContext rc) {
beersCircuitBreaker
.execute(
() -> beersServiceClient
.rxGetBeersList()
.flatMap(res -> res.statusCode() != 200 ? Single.error(new HttpStatusException(500, "Beers service error")) : Single.just(res))
)
.onErrorResumeNext(t -> Single.error(new HttpStatusException(503, "Beers service not available", t)))
.flatMapObservable(httpResponse -> Observable.fromIterable(httpResponse.bodyAsJsonArray()))
.map(o -> new io.slinkydeveloper.brewery.beers.client.models.Beer((JsonObject) o))
.flatMapSingle(this::solveStyleAndBuildApiBeer)
.collectInto(new JsonArray(), (j, apiBeer) -> j.add(apiBeer.toJson()))
.map(JsonArray::encode)
.subscribe(rc.response()::end, rc::fail);
}
public void handlePostBeer(RoutingContext rc) {
JsonObject body = rc.getBodyAsJson();
((body.containsKey("style")) ? addBeerAndStyle(body) : addBeer(body))
.map(result -> result.toJson().encode())
.subscribe(rc.response()::end, rc::fail);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment