Slide 14
Slide 14 text
public Observable handle(HttpServerRequest request, HttpServerResponse response) {
// first request User object
return new UserCommand(request.getQueryParameters().get("userId")).observe().flatMap(user -> {
// then fetch personal catalog
Observable> catalog = new PersonalizedCatalogCommand(user).observe()
.flatMap(catalogList -> {
return catalogList.videos().> flatMap(video -> {
Observable bookmark = new BookmarkCommand(video).observe();
Observable rating = new RatingsCommand(video).observe();
Observable metadata = new VideoMetadataCommand(video).observe();
return Observable.zip(bookmark, rating, metadata, (b, r, m) -> {
return combineVideoData(video, b, r, m);
});
});
});
// and fetch social data in parallel
Observable> social = new SocialCommand(user).observe().map(s -> {
return s.getDataAsMap();
});
// merge the results
return Observable.merge(catalog, social);
}).flatMap(data -> {
// output as SSE as we get back the data (no waiting until all is done)
return response.writeAndFlush(new ServerSentEvent(SimpleJson.mapToJson(data)));
});
}