Skip to content

Instantly share code, notes, and snippets.

@solitudelad
Created June 28, 2017 12:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save solitudelad/a222b313dd1fea75fb991d2b145be1eb to your computer and use it in GitHub Desktop.
Save solitudelad/a222b313dd1fea75fb991d2b145be1eb to your computer and use it in GitHub Desktop.
import akka.Done;
import akka.NotUsed;
import com.knoldus.Book;
import com.knoldus.BookService;
import com.lightbend.lagom.javadsl.api.ServiceCall;
import com.lightbend.lagom.javadsl.persistence.PersistentEntityRef;
import com.lightbend.lagom.javadsl.persistence.PersistentEntityRegistry;
import com.lightbend.lagom.javadsl.persistence.ReadSide;
import com.lightbend.lagom.javadsl.persistence.cassandra.CassandraSession;
import commands.BookCommand;
import events.BookEventProcessor;
import javax.inject.Inject;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.CompletionStage;
import java.util.stream.Collectors;
public class BookServiceImpl implements BookService {
private final PersistentEntityRegistry persistentEntityRegistry;
private final CassandraSession session;
/**
* @param registry
* @param readSide
* @param session
*/
@Inject
public BookServiceImpl(final PersistentEntityRegistry registry, ReadSide readSide, CassandraSession session) {
this.persistentEntityRegistry = registry;
this.session = session;
persistentEntityRegistry.register(BookEntity.class);
readSide.register(BookEventProcessor.class);
}
/**
* @param isbn
* @return
*/
@Override
public ServiceCall<NotUsed, Optional<Book>> getBook(String isbn) {
return request -> {
CompletionStage<Optional<Book>> bookFuture =
session.selectAll("SELECT * FROM book WHERE isbn = ?", isbn)
.thenApply(rows ->
rows.stream()
.map(row -> Book.builder().isbn(row.getString("isbn"))
.bookName(row.getString("bookName"))
.authorName(row.getString("authorName"))
.price(row.getFloat("price"))
.build()
)
.findFirst()
);
return bookFuture;
};
}
/**
* @return
*/
@Override
public ServiceCall<Book, Done> newBook() {
return book -> {
PersistentEntityRef<BookCommand> ref = bookEntityRef(book);
return ref.ask(BookCommand.CreateBook.builder().book(book).build());
};
}
/**
* @return
*/
@Override
public ServiceCall<Book, Done> updateBook() {
return book -> {
PersistentEntityRef<BookCommand> ref = bookEntityRef(book);
return ref.ask(BookCommand.UpdateBook.builder().book(book).build());
};
}
/**
* @param isbn
* @return
*/
@Override
public ServiceCall<NotUsed, Done> deleteBook(String isbn) {
return request -> {
Book book = Book.builder().isbn(isbn).build();
System.out.println(book);
PersistentEntityRef<BookCommand> ref = bookEntityRef(book);
return ref.ask(BookCommand.DeleteBook.builder().book(book).build());
};
}
@Override
public ServiceCall<NotUsed, List<Book>> getAllBook() {
return request -> {
CompletionStage<List<Book>> bookFuture =
session.selectAll("SELECT * FROM book")
.thenApply(rows ->
rows.stream()
.map(row -> Book.builder().isbn(row.getString("isbn"))
.bookName(row.getString("bookName"))
.authorName(row.getString("authorName"))
.price(row.getFloat("price"))
.build()
).collect(Collectors.toList())
);
return bookFuture;
};
}
/**
* @param book
* @return
*/
private PersistentEntityRef<BookCommand> bookEntityRef(Book book) {
return persistentEntityRegistry.refFor(BookEntity.class, book.getIsbn());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment