Created
June 5, 2019 13:11
-
-
Save tsegismont/62837dd5abaa40a54f3a8f369bd86acd 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 | |
.get("/beer") | |
.handler(BodyHandler.create()) | |
.handler(beersHandlers::handleGetBeers); | |
router | |
.post("/beer") | |
.handler(BodyHandler.create()) | |
.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())) | |
.subscribe( | |
result -> | |
rc | |
.response() | |
.setStatusCode(200) | |
.putHeader("content-type", "application/json") | |
.end(result.encode()), | |
rc::fail | |
); | |
} | |
public void handlePostBeer(RoutingContext rc) { | |
JsonObject body = rc.getBodyAsJson(); | |
((body.containsKey("style")) ? addBeerAndStyle(body) : addBeer(body)) | |
.subscribe( | |
result -> | |
rc | |
.response() | |
.setStatusCode(200) | |
.putHeader("content-type", "application/json") | |
.end(result.toJson().encode()), | |
rc::fail | |
); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment