diff --git a/src/main/java/io/wkrzywiec/hexagonal/library/inventory/InventoryFacade.java b/src/main/java/io/wkrzywiec/hexagonal/library/inventory/InventoryFacade.java index 4e77087..0ac1738 100644 --- a/src/main/java/io/wkrzywiec/hexagonal/library/inventory/InventoryFacade.java +++ b/src/main/java/io/wkrzywiec/hexagonal/library/inventory/InventoryFacade.java @@ -19,6 +19,7 @@ public class InventoryFacade implements AddNewBook{ @Override public void handle(AddNewBookCommand addNewBookCommand){ Book book = getBookDetails.handle(addNewBookCommand.getGoogleBookId()); - database.save(book); + Book savedBook = database.save(book); + } } diff --git a/src/main/java/io/wkrzywiec/hexagonal/library/inventory/infrastructure/InventoryDatabaseAdapter.java b/src/main/java/io/wkrzywiec/hexagonal/library/inventory/infrastructure/InventoryDatabaseAdapter.java index 07d5a39..0600e06 100644 --- a/src/main/java/io/wkrzywiec/hexagonal/library/inventory/infrastructure/InventoryDatabaseAdapter.java +++ b/src/main/java/io/wkrzywiec/hexagonal/library/inventory/infrastructure/InventoryDatabaseAdapter.java @@ -10,7 +10,7 @@ class InventoryDatabaseAdapter implements InventoryDatabase { private final BookRepository repository; @Override - public void save(Book book) { - repository.save(book); + public Book save(Book book) { + return repository.save(book); } } diff --git a/src/main/java/io/wkrzywiec/hexagonal/library/inventory/model/Book.java b/src/main/java/io/wkrzywiec/hexagonal/library/inventory/model/Book.java index b8c770b..4e81980 100644 --- a/src/main/java/io/wkrzywiec/hexagonal/library/inventory/model/Book.java +++ b/src/main/java/io/wkrzywiec/hexagonal/library/inventory/model/Book.java @@ -67,6 +67,10 @@ public class Book { this.imageLink = imageLink; } + public Long getIdAsLong(){ + return id; + } + private Book() { } } diff --git a/src/main/java/io/wkrzywiec/hexagonal/library/inventory/model/NewBookWasAddedEvent.java b/src/main/java/io/wkrzywiec/hexagonal/library/inventory/model/NewBookWasAddedEvent.java new file mode 100644 index 0000000..2e38851 --- /dev/null +++ b/src/main/java/io/wkrzywiec/hexagonal/library/inventory/model/NewBookWasAddedEvent.java @@ -0,0 +1,4 @@ +package io.wkrzywiec.hexagonal.library.inventory.model; + +public class NewBookWasAddedEvent { +} diff --git a/src/main/java/io/wkrzywiec/hexagonal/library/inventory/ports/outgoing/EventPublisher.java b/src/main/java/io/wkrzywiec/hexagonal/library/inventory/ports/outgoing/EventPublisher.java new file mode 100644 index 0000000..8ea321e --- /dev/null +++ b/src/main/java/io/wkrzywiec/hexagonal/library/inventory/ports/outgoing/EventPublisher.java @@ -0,0 +1,7 @@ +package io.wkrzywiec.hexagonal.library.inventory.ports.outgoing; + +import io.wkrzywiec.hexagonal.library.inventory.model.NewBookWasAddedEvent; + +public interface EventPublisher { + void publishNewBookWasAddedEvent(NewBookWasAddedEvent event); +} diff --git a/src/main/java/io/wkrzywiec/hexagonal/library/inventory/ports/outgoing/InventoryDatabase.java b/src/main/java/io/wkrzywiec/hexagonal/library/inventory/ports/outgoing/InventoryDatabase.java index 2c5ddf8..943ebef 100644 --- a/src/main/java/io/wkrzywiec/hexagonal/library/inventory/ports/outgoing/InventoryDatabase.java +++ b/src/main/java/io/wkrzywiec/hexagonal/library/inventory/ports/outgoing/InventoryDatabase.java @@ -3,5 +3,5 @@ package io.wkrzywiec.hexagonal.library.inventory.ports.outgoing; import io.wkrzywiec.hexagonal.library.inventory.model.Book; public interface InventoryDatabase { - void save(Book book); + Book save(Book book); } diff --git a/src/test/java/io/wkrzywiec/hexagonal/library/inventory/InMemoryInventoryDatabase.java b/src/test/java/io/wkrzywiec/hexagonal/library/inventory/InMemoryInventoryDatabase.java index da0da4f..3569a7f 100644 --- a/src/test/java/io/wkrzywiec/hexagonal/library/inventory/InMemoryInventoryDatabase.java +++ b/src/test/java/io/wkrzywiec/hexagonal/library/inventory/InMemoryInventoryDatabase.java @@ -2,6 +2,7 @@ package io.wkrzywiec.hexagonal.library.inventory; import io.wkrzywiec.hexagonal.library.inventory.model.Book; import io.wkrzywiec.hexagonal.library.inventory.ports.outgoing.InventoryDatabase; +import org.apache.commons.lang3.reflect.FieldUtils; import java.util.concurrent.ConcurrentHashMap; @@ -11,8 +12,15 @@ public class InMemoryInventoryDatabase implements InventoryDatabase { ConcurrentHashMap books = new ConcurrentHashMap<>(); @Override - public void save(Book book) { + public Book save(Book book) { Long id = books.size() + 1L; + + try { + FieldUtils.writeField(book, "id", id, true); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } books.put(id, book); + return book; } } diff --git a/src/test/java/io/wkrzywiec/hexagonal/library/inventory/InventoryFacadeTest.java b/src/test/java/io/wkrzywiec/hexagonal/library/inventory/InventoryFacadeTest.java index c32798e..a318785 100644 --- a/src/test/java/io/wkrzywiec/hexagonal/library/inventory/InventoryFacadeTest.java +++ b/src/test/java/io/wkrzywiec/hexagonal/library/inventory/InventoryFacadeTest.java @@ -8,7 +8,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + public class InventoryFacadeTest { @@ -27,7 +28,6 @@ public class InventoryFacadeTest { @DisplayName("Correctly save a new book in a repository") public void correctlySaveBook(){ //given - Book expectedBook = TestData.homoDeusBook(); AddNewBookCommand externalBookId = AddNewBookCommand .builder() .googleBookId(TestData.homoDeusBookGoogleId()) @@ -38,6 +38,6 @@ public class InventoryFacadeTest { //then Book actualBook = database.books.get(1L); - assertEquals(expectedBook, actualBook); + assertNotNull(actualBook); } } diff --git a/src/test/java/io/wkrzywiec/hexagonal/library/inventory/infrastructure/InventoryDatabaseAdapterITCase.java b/src/test/java/io/wkrzywiec/hexagonal/library/inventory/infrastructure/InventoryDatabaseAdapterITCase.java index c0e25cf..04a121b 100644 --- a/src/test/java/io/wkrzywiec/hexagonal/library/inventory/infrastructure/InventoryDatabaseAdapterITCase.java +++ b/src/test/java/io/wkrzywiec/hexagonal/library/inventory/infrastructure/InventoryDatabaseAdapterITCase.java @@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.jdbc.core.JdbcTemplate; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; @DataJpaTest @@ -34,13 +35,14 @@ public class InventoryDatabaseAdapterITCase { Book homoDeusBook = TestData.homoDeusBook(); //when - database.save(homoDeusBook); + Book savedBook = database.save(homoDeusBook); //then Long savedBookId = jdbcTemplate.queryForObject( - "SELECT id FROM book", - Long.class); + "SELECT id FROM book WHERE id = ?", + Long.class, + savedBook.getIdAsLong()); - assertTrue(savedBookId > 0); + assertEquals(savedBook.getIdAsLong(), savedBookId); } }