/
IntegrationService.kt
43 lines (34 loc) · 1.29 KB
/
IntegrationService.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package org.rizki.mufrizal.api.gateway.BookGateway.service.integration
import org.rizki.mufrizal.api.gateway.BookGateway.domain.Book
import org.rizki.mufrizal.api.gateway.BookGateway.domain.BookDetail
import org.rizki.mufrizal.api.gateway.BookGateway.service.catalog.CatalogService
import org.rizki.mufrizal.api.gateway.BookGateway.service.review.ReviewService
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Component
import rx.Observable
import org.rizki.mufrizal.api.gateway.BookGateway.domain.Review
/**
* Created by rizkimufrizal on 5/28/17.
*/
@Component
class IntegrationService {
@Autowired
private lateinit var catalogService: CatalogService
@Autowired
private lateinit var reviewService: ReviewService
fun getBookDetails(bookId: Long): Observable<BookDetail> {
return Observable.zip(
catalogService.getBook(bookId),
reviewService.getReviews(bookId),
this::buildBookDetails
)
}
private fun buildBookDetails(book: Book, reviews: Iterable<Review>): BookDetail {
return BookDetail(
id = book.id,
title = book.title,
description = book.description,
reviews = reviews
)
}
}