Created
June 5, 2019 13:16
-
-
Save tsegismont/da2458af51a65f4a7f79cfdb1d4b33c2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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