rename book domain to inventory
This commit is contained in:
@@ -3,8 +3,8 @@ package io.wkrzywiec.hexagonal.library.application;
|
||||
import io.restassured.RestAssured;
|
||||
import io.restassured.response.ValidatableResponse;
|
||||
import io.wkrzywiec.hexagonal.library.TestData;
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.dto.BookDetailsDTO;
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.dto.ExternalBookIdDTO;
|
||||
import io.wkrzywiec.hexagonal.library.domain.inventory.dto.AddNewBookCommand;
|
||||
import io.wkrzywiec.hexagonal.library.domain.inventory.dto.BookDetailsDTO;
|
||||
import io.wkrzywiec.hexagonal.library.infrastructure.repository.BookEntity;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
@@ -59,20 +59,19 @@ public class AddNewBookTest {
|
||||
public void givenGoogleBooId_whenAddNewBook_thenBookIsSaved(){
|
||||
//given
|
||||
BookDetailsDTO homoDeusBookDetails = TestData.homoDeusBookDetailsDTO();
|
||||
ExternalBookIdDTO googleBookId =
|
||||
ExternalBookIdDTO.builder()
|
||||
.value(homoDeusBookDetails.getBookExternalId())
|
||||
AddNewBookCommand addNewBookCommand =
|
||||
AddNewBookCommand.builder()
|
||||
.googleBookId(homoDeusBookDetails.getBookExternalId())
|
||||
.build();
|
||||
|
||||
//when
|
||||
ValidatableResponse response =
|
||||
given()
|
||||
.contentType("application/json")
|
||||
.body(googleBookId)
|
||||
.when()
|
||||
.post( baseURL + "/books")
|
||||
.prettyPeek()
|
||||
.then();
|
||||
given()
|
||||
.contentType("application/json")
|
||||
.body(addNewBookCommand)
|
||||
.when()
|
||||
.post( baseURL + "/books")
|
||||
.prettyPeek()
|
||||
.then();
|
||||
|
||||
//then
|
||||
String homoDeusSql = "select * from book where book_external_id = '" + homoDeusBookDetails.getBookExternalId() + "'";
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package io.wkrzywiec.hexagonal.library.application;
|
||||
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.dto.ExternalBookIdDTO;
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.ports.incoming.AddNewBook;
|
||||
import io.wkrzywiec.hexagonal.library.domain.inventory.dto.AddNewBookCommand;
|
||||
import io.wkrzywiec.hexagonal.library.domain.inventory.ports.incoming.AddNewBook;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
@@ -18,8 +18,8 @@ public class BookCommandController {
|
||||
private final AddNewBook addNewBook;
|
||||
|
||||
@PostMapping("")
|
||||
public ResponseEntity<String> addNewBook(@RequestBody ExternalBookIdDTO externalBookIdDTO){
|
||||
addNewBook.handle(externalBookIdDTO);
|
||||
public ResponseEntity<String> addNewBook(@RequestBody AddNewBookCommand addNewBookCommand){
|
||||
addNewBook.handle(addNewBookCommand);
|
||||
return new ResponseEntity<>("New book was added to library", HttpStatus.CREATED);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
package io.wkrzywiec.hexagonal.library.domain.book;
|
||||
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.dto.BookDetailsDTO;
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.dto.ExternalBookIdDTO;
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.ports.incoming.AddNewBook;
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.ports.incoming.GetBookDetails;
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.ports.outgoing.BookDatabase;
|
||||
|
||||
public class BookFacade implements AddNewBook {
|
||||
|
||||
private BookDatabase database;
|
||||
private GetBookDetails getBookDetails;
|
||||
|
||||
public BookFacade(BookDatabase database, GetBookDetails getBookDetails) {
|
||||
this.database = database;
|
||||
this.getBookDetails = getBookDetails;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(ExternalBookIdDTO externalBookIdDTO){
|
||||
BookDetailsDTO bookDetails = getBookDetails.handle(externalBookIdDTO.getValue());
|
||||
database.save(bookDetails);
|
||||
}
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
package io.wkrzywiec.hexagonal.library.domain.book.ports.incoming;
|
||||
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.dto.ExternalBookIdDTO;
|
||||
|
||||
public interface AddNewBook {
|
||||
void handle(ExternalBookIdDTO externalBookIdDTO);
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
package io.wkrzywiec.hexagonal.library.domain.book.ports.incoming;
|
||||
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.dto.BookDetailsDTO;
|
||||
|
||||
public interface GetBookDetails {
|
||||
BookDetailsDTO handle(String bookId);
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
package io.wkrzywiec.hexagonal.library.domain.book.ports.outgoing;
|
||||
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.dto.BookDetailsDTO;
|
||||
|
||||
public interface BookDatabase {
|
||||
|
||||
void save(BookDetailsDTO newBookDTO);
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package io.wkrzywiec.hexagonal.library.domain.inventory;
|
||||
|
||||
import io.wkrzywiec.hexagonal.library.domain.inventory.dto.BookDetailsDTO;
|
||||
import io.wkrzywiec.hexagonal.library.domain.inventory.dto.AddNewBookCommand;
|
||||
import io.wkrzywiec.hexagonal.library.domain.inventory.ports.incoming.AddNewBook;
|
||||
import io.wkrzywiec.hexagonal.library.domain.inventory.ports.outgoing.GetBookDetails;
|
||||
import io.wkrzywiec.hexagonal.library.domain.inventory.ports.outgoing.InventoryDatabase;
|
||||
|
||||
public class InventoryFacade implements AddNewBook{
|
||||
|
||||
private InventoryDatabase database;
|
||||
private GetBookDetails getBookDetails;
|
||||
|
||||
public InventoryFacade(InventoryDatabase database, GetBookDetails getBookDetails) {
|
||||
this.database = database;
|
||||
this.getBookDetails = getBookDetails;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(AddNewBookCommand addNewBookCommand){
|
||||
BookDetailsDTO bookDetails = getBookDetails.handle(addNewBookCommand.getGoogleBookId());
|
||||
database.save(bookDetails);
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.wkrzywiec.hexagonal.library.domain.book.dto;
|
||||
package io.wkrzywiec.hexagonal.library.domain.inventory.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
@@ -9,7 +9,6 @@ import lombok.NoArgsConstructor;
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
public class ExternalBookIdDTO {
|
||||
|
||||
private String value;
|
||||
public class AddNewBookCommand {
|
||||
private String googleBookId;
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.wkrzywiec.hexagonal.library.domain.book.dto;
|
||||
package io.wkrzywiec.hexagonal.library.domain.inventory.dto;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.EqualsAndHashCode;
|
||||
@@ -0,0 +1,7 @@
|
||||
package io.wkrzywiec.hexagonal.library.domain.inventory.ports.incoming;
|
||||
|
||||
import io.wkrzywiec.hexagonal.library.domain.inventory.dto.AddNewBookCommand;
|
||||
|
||||
public interface AddNewBook {
|
||||
void handle(AddNewBookCommand addNewBookCommand);
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package io.wkrzywiec.hexagonal.library.domain.inventory.ports.outgoing;
|
||||
|
||||
import io.wkrzywiec.hexagonal.library.domain.inventory.dto.BookDetailsDTO;
|
||||
|
||||
public interface GetBookDetails {
|
||||
BookDetailsDTO handle(String bookId);
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package io.wkrzywiec.hexagonal.library.domain.inventory.ports.outgoing;
|
||||
|
||||
import io.wkrzywiec.hexagonal.library.domain.inventory.dto.BookDetailsDTO;
|
||||
|
||||
public interface InventoryDatabase {
|
||||
void save(BookDetailsDTO newBookDTO);
|
||||
}
|
||||
@@ -1,10 +1,10 @@
|
||||
package io.wkrzywiec.hexagonal.library.infrastructure;
|
||||
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.BookFacade;
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.ports.incoming.AddNewBook;
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.ports.incoming.GetBookDetails;
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.ports.outgoing.BookDatabase;
|
||||
import io.wkrzywiec.hexagonal.library.infrastructure.adapter.BookDatabaseAdapter;
|
||||
import io.wkrzywiec.hexagonal.library.domain.inventory.InventoryFacade;
|
||||
import io.wkrzywiec.hexagonal.library.domain.inventory.ports.incoming.AddNewBook;
|
||||
import io.wkrzywiec.hexagonal.library.domain.inventory.ports.outgoing.GetBookDetails;
|
||||
import io.wkrzywiec.hexagonal.library.domain.inventory.ports.outgoing.InventoryDatabase;
|
||||
import io.wkrzywiec.hexagonal.library.infrastructure.adapter.InventoryDatabaseAdapter;
|
||||
import io.wkrzywiec.hexagonal.library.infrastructure.adapter.GoogleBooksAdapter;
|
||||
import io.wkrzywiec.hexagonal.library.infrastructure.repository.PostgresBookRepository;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
@@ -20,8 +20,8 @@ public class BookDomainConfig {
|
||||
}
|
||||
|
||||
@Bean
|
||||
BookDatabase bookRepository(PostgresBookRepository repository){
|
||||
return new BookDatabaseAdapter(repository);
|
||||
InventoryDatabase bookRepository(PostgresBookRepository repository){
|
||||
return new InventoryDatabaseAdapter(repository);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@@ -30,7 +30,7 @@ public class BookDomainConfig {
|
||||
}
|
||||
|
||||
@Bean
|
||||
AddNewBook addNewBook(BookDatabase database, GetBookDetails getBookDetails){
|
||||
return new BookFacade(database, getBookDetails);
|
||||
AddNewBook addNewBook(InventoryDatabase database, GetBookDetails getBookDetails){
|
||||
return new InventoryFacade(database, getBookDetails);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,8 +3,8 @@ package io.wkrzywiec.hexagonal.library.infrastructure.adapter;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.dto.BookDetailsDTO;
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.ports.incoming.GetBookDetails;
|
||||
import io.wkrzywiec.hexagonal.library.domain.inventory.dto.BookDetailsDTO;
|
||||
import io.wkrzywiec.hexagonal.library.domain.inventory.ports.outgoing.GetBookDetails;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.http.HttpEntity;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package io.wkrzywiec.hexagonal.library.infrastructure.adapter;
|
||||
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.dto.BookDetailsDTO;
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.ports.outgoing.BookDatabase;
|
||||
import io.wkrzywiec.hexagonal.library.domain.inventory.dto.BookDetailsDTO;
|
||||
import io.wkrzywiec.hexagonal.library.domain.inventory.ports.outgoing.InventoryDatabase;
|
||||
import io.wkrzywiec.hexagonal.library.infrastructure.repository.AuthorEntiy;
|
||||
import io.wkrzywiec.hexagonal.library.infrastructure.repository.BookEntity;
|
||||
import io.wkrzywiec.hexagonal.library.infrastructure.repository.PostgresBookRepository;
|
||||
@@ -12,7 +12,7 @@ import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class BookDatabaseAdapter implements BookDatabase {
|
||||
public class InventoryDatabaseAdapter implements InventoryDatabase {
|
||||
|
||||
private final PostgresBookRepository repository;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package io.wkrzywiec.hexagonal.library;
|
||||
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.dto.BookDetailsDTO;
|
||||
import io.wkrzywiec.hexagonal.library.domain.inventory.dto.BookDetailsDTO;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
package io.wkrzywiec.hexagonal.library.domain;
|
||||
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.dto.BookDetailsDTO;
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.ports.outgoing.BookDatabase;
|
||||
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
|
||||
public class InMemoryBookDatabase implements BookDatabase {
|
||||
|
||||
ConcurrentHashMap<Long, BookDetailsDTO> books = new ConcurrentHashMap<>();
|
||||
|
||||
@Override
|
||||
public void save(BookDetailsDTO newBookDTO) {
|
||||
Long id = books.size() + 1L;
|
||||
books.put(id, newBookDTO);
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,8 @@
|
||||
package io.wkrzywiec.hexagonal.library.domain;
|
||||
package io.wkrzywiec.hexagonal.library.domain.inventory;
|
||||
|
||||
import io.wkrzywiec.hexagonal.library.TestData;
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.dto.BookDetailsDTO;
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.ports.incoming.GetBookDetails;
|
||||
import io.wkrzywiec.hexagonal.library.domain.inventory.dto.BookDetailsDTO;
|
||||
import io.wkrzywiec.hexagonal.library.domain.inventory.ports.outgoing.GetBookDetails;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
@@ -0,0 +1,18 @@
|
||||
package io.wkrzywiec.hexagonal.library.domain.inventory;
|
||||
|
||||
import io.wkrzywiec.hexagonal.library.domain.inventory.dto.BookDetailsDTO;
|
||||
import io.wkrzywiec.hexagonal.library.domain.inventory.ports.outgoing.InventoryDatabase;
|
||||
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
|
||||
public class InMemoryInventoryDatabase implements InventoryDatabase {
|
||||
|
||||
ConcurrentHashMap<Long, BookDetailsDTO> books = new ConcurrentHashMap<>();
|
||||
|
||||
@Override
|
||||
public void save(BookDetailsDTO newBookDTO) {
|
||||
Long id = books.size() + 1L;
|
||||
books.put(id, newBookDTO);
|
||||
}
|
||||
}
|
||||
@@ -1,27 +1,26 @@
|
||||
package io.wkrzywiec.hexagonal.library.domain;
|
||||
package io.wkrzywiec.hexagonal.library.domain.inventory;
|
||||
|
||||
import io.wkrzywiec.hexagonal.library.TestData;
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.BookFacade;
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.dto.BookDetailsDTO;
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.dto.ExternalBookIdDTO;
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.ports.incoming.GetBookDetails;
|
||||
import io.wkrzywiec.hexagonal.library.domain.inventory.dto.BookDetailsDTO;
|
||||
import io.wkrzywiec.hexagonal.library.domain.inventory.dto.AddNewBookCommand;
|
||||
import io.wkrzywiec.hexagonal.library.domain.inventory.ports.outgoing.GetBookDetails;
|
||||
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;
|
||||
|
||||
public class BookFacadeTest {
|
||||
public class InventoryFacadeTest {
|
||||
|
||||
private GetBookDetails getBookDetails;
|
||||
private InMemoryBookDatabase database;
|
||||
private BookFacade facade;
|
||||
private InMemoryInventoryDatabase database;
|
||||
private InventoryFacade facade;
|
||||
|
||||
@BeforeEach
|
||||
public void init() {
|
||||
database = new InMemoryBookDatabase();
|
||||
database = new InMemoryInventoryDatabase();
|
||||
getBookDetails = new GetBookDetailsMock();
|
||||
facade = new BookFacade(database, getBookDetails);
|
||||
facade = new InventoryFacade(database, getBookDetails);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -29,9 +28,9 @@ public class BookFacadeTest {
|
||||
public void correctlySaveBook(){
|
||||
//given
|
||||
BookDetailsDTO expectedBook = TestData.homoDeusBookDetailsDTO();
|
||||
ExternalBookIdDTO externalBookId = ExternalBookIdDTO
|
||||
AddNewBookCommand externalBookId = AddNewBookCommand
|
||||
.builder()
|
||||
.value(expectedBook.getBookExternalId())
|
||||
.googleBookId(expectedBook.getBookExternalId())
|
||||
.build();
|
||||
|
||||
//when
|
||||
@@ -1,7 +1,7 @@
|
||||
package io.wkrzywiec.hexagonal.library.infrastructure.adapter;
|
||||
|
||||
import io.wkrzywiec.hexagonal.library.TestData;
|
||||
import io.wkrzywiec.hexagonal.library.domain.book.dto.BookDetailsDTO;
|
||||
import io.wkrzywiec.hexagonal.library.domain.inventory.dto.BookDetailsDTO;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
Reference in New Issue
Block a user