rename book domain to inventory

This commit is contained in:
wkrzywiec
2020-05-16 14:19:19 +02:00
parent 9cd190deb7
commit dc3730f1c9
21 changed files with 113 additions and 117 deletions

View File

@@ -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() + "'";

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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);
}
}

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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);
}
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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);
}
}

View File

@@ -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;

View File

@@ -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);
}
}

View File

@@ -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

View File

@@ -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;