refactoring

This commit is contained in:
Wojtek Krzywiec
2020-05-30 21:47:27 +02:00
parent 62c683fb63
commit 273dfed81e
123 changed files with 486 additions and 483 deletions

View File

@@ -1,9 +1,9 @@
package io.wkrzywiec.hexagonal.library.borrowing;
package io.wkrzywiec.hexagonal.library.domain.borrowing;
import io.restassured.RestAssured;
import io.wkrzywiec.hexagonal.library.BookTestData;
import io.wkrzywiec.hexagonal.library.borrowing.model.BookReservationCommand;
import io.wkrzywiec.hexagonal.library.inventory.infrastructure.BookRepository;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.BookReservationCommand;
import io.wkrzywiec.hexagonal.library.domain.inventory.infrastructure.BookRepository;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

View File

@@ -1,9 +1,9 @@
package io.wkrzywiec.hexagonal.library.inventory;
package io.wkrzywiec.hexagonal.library.domain.inventory;
import io.restassured.RestAssured;
import io.restassured.response.ValidatableResponse;
import io.wkrzywiec.hexagonal.library.BookTestData;
import io.wkrzywiec.hexagonal.library.inventory.model.AddNewBookCommand;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.model.AddNewBookCommand;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

View File

@@ -1,7 +1,7 @@
package io.wkrzywiec.hexagonal.library.user;
package io.wkrzywiec.hexagonal.library.domain.user;
import io.restassured.RestAssured;
import io.wkrzywiec.hexagonal.library.user.model.AddUserCommand;
import io.wkrzywiec.hexagonal.library.domain.user.core.model.AddUserCommand;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

View File

@@ -1,28 +0,0 @@
package io.wkrzywiec.hexagonal.library;
import io.wkrzywiec.hexagonal.library.email.EmailFacade;
import io.wkrzywiec.hexagonal.library.email.infrastructure.EmailDatabaseAdapter;
import io.wkrzywiec.hexagonal.library.email.infrastructure.SendGridEmailSender;
import io.wkrzywiec.hexagonal.library.email.ports.incoming.SendReservationConfirmation;
import io.wkrzywiec.hexagonal.library.email.ports.outgoing.EmailSender;
import io.wkrzywiec.hexagonal.library.email.ports.outgoing.EmailDatabase;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.core.JdbcTemplate;
public class EmailDomainConfig {
@Bean
public EmailSender emailSender() {
return new SendGridEmailSender();
}
@Bean
public EmailDatabase libraryDatabase(JdbcTemplate jdbcTemplate){
return new EmailDatabaseAdapter(jdbcTemplate);
}
@Bean
public SendReservationConfirmation sendReservationConfirmation(EmailSender emailSender, EmailDatabase database){
return new EmailFacade(emailSender, database);
}
}

View File

@@ -1,5 +1,10 @@
package io.wkrzywiec.hexagonal.library;
import io.wkrzywiec.hexagonal.library.infrastructure.BorrowingDomainConfig;
import io.wkrzywiec.hexagonal.library.infrastructure.EmailDomainConfig;
import io.wkrzywiec.hexagonal.library.infrastructure.InventoryDomainConfig;
import io.wkrzywiec.hexagonal.library.infrastructure.LibraryHexagonalConfig;
import io.wkrzywiec.hexagonal.library.infrastructure.UserDomainConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Import;

View File

@@ -1,21 +0,0 @@
package io.wkrzywiec.hexagonal.library;
import io.wkrzywiec.hexagonal.library.user.UserFacade;
import io.wkrzywiec.hexagonal.library.user.infrastructure.UserDatabaseAdapter;
import io.wkrzywiec.hexagonal.library.user.infrastructure.UserRepository;
import io.wkrzywiec.hexagonal.library.user.ports.incoming.AddNewUser;
import io.wkrzywiec.hexagonal.library.user.ports.outgoing.UserDatabase;
import org.springframework.context.annotation.Bean;
public class UserDomainConfig {
@Bean
public UserDatabase userDatabase(UserRepository userRepository){
return new UserDatabaseAdapter(userRepository);
}
@Bean
public AddNewUser addNewUser(UserDatabase userDatabase){
return new UserFacade(userDatabase);
}
}

View File

@@ -0,0 +1,15 @@
package io.wkrzywiec.hexagonal.library.application;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/")
public class LibraryHexagonalController {
@GetMapping("")
public String getAppRoot(){
return "Library Hexagonal REST API";
}
}

View File

@@ -1,5 +0,0 @@
package io.wkrzywiec.hexagonal.library.borrowing.model;
interface Book {
Long getIdAsLong();
}

View File

@@ -1,10 +0,0 @@
package io.wkrzywiec.hexagonal.library.borrowing.model;
import lombok.AllArgsConstructor;
import lombok.Getter;
@AllArgsConstructor
@Getter
public class Days {
private Long count;
}

View File

@@ -1,4 +0,0 @@
package io.wkrzywiec.hexagonal.library.borrowing.ports.incoming;
public interface BorrowBook {
}

View File

@@ -1,4 +0,0 @@
package io.wkrzywiec.hexagonal.library.borrowing.ports.incoming;
public interface GiveBackBook {
}

View File

@@ -1,7 +0,0 @@
package io.wkrzywiec.hexagonal.library.borrowing.ports.incoming;
import io.wkrzywiec.hexagonal.library.borrowing.model.MakeBookAvailableCommand;
public interface MakeBookAvailable {
void handle(MakeBookAvailableCommand bookAvailableCommand);
}

View File

@@ -1,7 +0,0 @@
package io.wkrzywiec.hexagonal.library.borrowing.ports.incoming;
import io.wkrzywiec.hexagonal.library.borrowing.model.BookReservationCommand;
public interface ReserveBook {
Long handle(BookReservationCommand bookReservation);
}

View File

@@ -1,19 +0,0 @@
package io.wkrzywiec.hexagonal.library.borrowing.ports.outgoing;
import io.wkrzywiec.hexagonal.library.borrowing.model.ActiveUser;
import io.wkrzywiec.hexagonal.library.borrowing.model.AvailableBook;
import io.wkrzywiec.hexagonal.library.borrowing.model.DueDate;
import io.wkrzywiec.hexagonal.library.borrowing.model.OverdueReservation;
import io.wkrzywiec.hexagonal.library.borrowing.model.ReservationDetails;
import io.wkrzywiec.hexagonal.library.borrowing.model.ReservedBook;
import java.util.List;
import java.util.Optional;
public interface BorrowingDatabase {
void setBookAvailable(Long bookId);
Optional<AvailableBook> getAvailableBook(Long bookId);
Optional<ActiveUser> getActiveUser(Long userId);
ReservationDetails save(ReservedBook reservedBook);
List<OverdueReservation> findReservationsAfter(DueDate dueDate);
}

View File

@@ -1,7 +0,0 @@
package io.wkrzywiec.hexagonal.library.borrowing.ports.outgoing;
import io.wkrzywiec.hexagonal.library.borrowing.model.BookReservedEvent;
public interface BorrowingEventPublisher {
public void publish(BookReservedEvent event);
}

View File

@@ -1,8 +1,8 @@
package io.wkrzywiec.hexagonal.library.borrowing.application;
package io.wkrzywiec.hexagonal.library.domain.borrowing.application;
import io.wkrzywiec.hexagonal.library.borrowing.model.MakeBookAvailableCommand;
import io.wkrzywiec.hexagonal.library.borrowing.ports.incoming.MakeBookAvailable;
import io.wkrzywiec.hexagonal.library.inventory.model.NewBookWasAddedEvent;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.MakeBookAvailableCommand;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.incoming.MakeBookAvailable;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.model.NewBookWasAddedEvent;
import lombok.RequiredArgsConstructor;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;

View File

@@ -1,7 +1,7 @@
package io.wkrzywiec.hexagonal.library.borrowing.application;
package io.wkrzywiec.hexagonal.library.domain.borrowing.application;
import io.wkrzywiec.hexagonal.library.borrowing.model.BookReservationCommand;
import io.wkrzywiec.hexagonal.library.borrowing.ports.incoming.ReserveBook;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.BookReservationCommand;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.incoming.ReserveBook;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

View File

@@ -1,22 +1,21 @@
package io.wkrzywiec.hexagonal.library.borrowing;
package io.wkrzywiec.hexagonal.library.domain.borrowing.core;
import io.wkrzywiec.hexagonal.library.borrowing.model.ActiveUser;
import io.wkrzywiec.hexagonal.library.borrowing.model.BookReservedEvent;
import io.wkrzywiec.hexagonal.library.borrowing.model.Days;
import io.wkrzywiec.hexagonal.library.borrowing.model.DueDate;
import io.wkrzywiec.hexagonal.library.borrowing.model.MakeBookAvailableCommand;
import io.wkrzywiec.hexagonal.library.borrowing.model.OverdueReservation;
import io.wkrzywiec.hexagonal.library.borrowing.model.ReservationDetails;
import io.wkrzywiec.hexagonal.library.borrowing.model.exception.ActiveUserNotFoundException;
import io.wkrzywiec.hexagonal.library.borrowing.model.AvailableBook;
import io.wkrzywiec.hexagonal.library.borrowing.model.exception.AvailableBookNotFoundExeption;
import io.wkrzywiec.hexagonal.library.borrowing.model.BookReservationCommand;
import io.wkrzywiec.hexagonal.library.borrowing.model.ReservedBook;
import io.wkrzywiec.hexagonal.library.borrowing.ports.incoming.CancelOverdueReservations;
import io.wkrzywiec.hexagonal.library.borrowing.ports.incoming.MakeBookAvailable;
import io.wkrzywiec.hexagonal.library.borrowing.ports.incoming.ReserveBook;
import io.wkrzywiec.hexagonal.library.borrowing.ports.outgoing.BorrowingDatabase;
import io.wkrzywiec.hexagonal.library.borrowing.ports.outgoing.BorrowingEventPublisher;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.ActiveUser;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.AvailableBook;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.BookReservationCommand;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.BookReservedEvent;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.DueDate;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.MakeBookAvailableCommand;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.OverdueReservation;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.ReservationDetails;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.ReservedBook;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.exception.ActiveUserNotFoundException;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.exception.AvailableBookNotFoundExeption;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.incoming.CancelOverdueReservations;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.incoming.MakeBookAvailable;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.incoming.ReserveBook;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.outgoing.BorrowingDatabase;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.outgoing.BorrowingEventPublisher;
import java.time.Instant;
import java.time.temporal.ChronoUnit;

View File

@@ -1,6 +1,6 @@
package io.wkrzywiec.hexagonal.library.borrowing.model;
package io.wkrzywiec.hexagonal.library.domain.borrowing.core.model;
import io.wkrzywiec.hexagonal.library.borrowing.model.exception.TooManyBooksAssignedToUserException;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.exception.TooManyBooksAssignedToUserException;
import lombok.EqualsAndHashCode;
import java.util.List;

View File

@@ -1,4 +1,4 @@
package io.wkrzywiec.hexagonal.library.borrowing.model;
package io.wkrzywiec.hexagonal.library.domain.borrowing.core.model;
import lombok.EqualsAndHashCode;

View File

@@ -0,0 +1,5 @@
package io.wkrzywiec.hexagonal.library.domain.borrowing.core.model;
interface Book {
Long getIdAsLong();
}

View File

@@ -1,4 +1,4 @@
package io.wkrzywiec.hexagonal.library.borrowing.model;
package io.wkrzywiec.hexagonal.library.domain.borrowing.core.model;
import lombok.AllArgsConstructor;

View File

@@ -1,4 +1,4 @@
package io.wkrzywiec.hexagonal.library.borrowing.model;
package io.wkrzywiec.hexagonal.library.domain.borrowing.core.model;
import lombok.AllArgsConstructor;
import lombok.Builder;

View File

@@ -1,4 +1,4 @@
package io.wkrzywiec.hexagonal.library.borrowing.model;
package io.wkrzywiec.hexagonal.library.domain.borrowing.core.model;
import java.time.Instant;

View File

@@ -1,4 +1,4 @@
package io.wkrzywiec.hexagonal.library.borrowing.model;
package io.wkrzywiec.hexagonal.library.domain.borrowing.core.model;
import lombok.AllArgsConstructor;

View File

@@ -1,10 +1,8 @@
package io.wkrzywiec.hexagonal.library.borrowing.model;
package io.wkrzywiec.hexagonal.library.domain.borrowing.core.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
@AllArgsConstructor
@Getter

View File

@@ -1,4 +1,4 @@
package io.wkrzywiec.hexagonal.library.borrowing.model;
package io.wkrzywiec.hexagonal.library.domain.borrowing.core.model;
import lombok.AllArgsConstructor;

View File

@@ -1,4 +1,4 @@
package io.wkrzywiec.hexagonal.library.borrowing.model;
package io.wkrzywiec.hexagonal.library.domain.borrowing.core.model;
import lombok.EqualsAndHashCode;
import lombok.Getter;

View File

@@ -1,4 +1,4 @@
package io.wkrzywiec.hexagonal.library.borrowing.model;
package io.wkrzywiec.hexagonal.library.domain.borrowing.core.model;
import lombok.EqualsAndHashCode;

View File

@@ -1,4 +1,4 @@
package io.wkrzywiec.hexagonal.library.borrowing.model;
package io.wkrzywiec.hexagonal.library.domain.borrowing.core.model;
import lombok.EqualsAndHashCode;

View File

@@ -1,4 +1,4 @@
package io.wkrzywiec.hexagonal.library.borrowing.model.exception;
package io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.exception;
public class ActiveUserNotFoundException extends RuntimeException {
public ActiveUserNotFoundException(Long bookId){

View File

@@ -1,4 +1,4 @@
package io.wkrzywiec.hexagonal.library.borrowing.model.exception;
package io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.exception;
public class AvailableBookNotFoundExeption extends RuntimeException {
public AvailableBookNotFoundExeption(Long bookId){

View File

@@ -1,4 +1,4 @@
package io.wkrzywiec.hexagonal.library.borrowing.model.exception;
package io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.exception;
public class TooManyBooksAssignedToUserException extends RuntimeException {
public TooManyBooksAssignedToUserException(Long userId){

View File

@@ -0,0 +1,4 @@
package io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.incoming;
public interface BorrowBook {
}

View File

@@ -1,4 +1,4 @@
package io.wkrzywiec.hexagonal.library.borrowing.ports.incoming;
package io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.incoming;
public interface CancelOverdueReservations {
void cancelOverdueReservations();

View File

@@ -0,0 +1,4 @@
package io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.incoming;
public interface GiveBackBook {
}

View File

@@ -0,0 +1,7 @@
package io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.incoming;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.MakeBookAvailableCommand;
public interface MakeBookAvailable {
void handle(MakeBookAvailableCommand bookAvailableCommand);
}

View File

@@ -0,0 +1,7 @@
package io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.incoming;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.BookReservationCommand;
public interface ReserveBook {
Long handle(BookReservationCommand bookReservation);
}

View File

@@ -0,0 +1,19 @@
package io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.outgoing;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.ActiveUser;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.AvailableBook;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.DueDate;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.OverdueReservation;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.ReservationDetails;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.ReservedBook;
import java.util.List;
import java.util.Optional;
public interface BorrowingDatabase {
void setBookAvailable(Long bookId);
Optional<AvailableBook> getAvailableBook(Long bookId);
Optional<ActiveUser> getActiveUser(Long userId);
ReservationDetails save(ReservedBook reservedBook);
List<OverdueReservation> findReservationsAfter(DueDate dueDate);
}

View File

@@ -0,0 +1,7 @@
package io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.outgoing;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.BookReservedEvent;
public interface BorrowingEventPublisher {
public void publish(BookReservedEvent event);
}

View File

@@ -1,13 +1,14 @@
package io.wkrzywiec.hexagonal.library.borrowing.infrastructure;
package io.wkrzywiec.hexagonal.library.domain.borrowing.infrastructure;
import io.wkrzywiec.hexagonal.library.borrowing.model.ActiveUser;
import io.wkrzywiec.hexagonal.library.borrowing.model.AvailableBook;
import io.wkrzywiec.hexagonal.library.borrowing.model.DueDate;
import io.wkrzywiec.hexagonal.library.borrowing.model.OverdueReservation;
import io.wkrzywiec.hexagonal.library.borrowing.model.ReservationDetails;
import io.wkrzywiec.hexagonal.library.borrowing.model.ReservationId;
import io.wkrzywiec.hexagonal.library.borrowing.model.ReservedBook;
import io.wkrzywiec.hexagonal.library.borrowing.ports.outgoing.BorrowingDatabase;
import io.wkrzywiec.hexagonal.library.domain.borrowing.infrastructure.entity.OverdueReservationEntity;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.ActiveUser;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.AvailableBook;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.DueDate;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.OverdueReservation;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.ReservationDetails;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.ReservationId;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.ReservedBook;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.outgoing.BorrowingDatabase;
import lombok.RequiredArgsConstructor;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;

View File

@@ -1,7 +1,7 @@
package io.wkrzywiec.hexagonal.library.borrowing.infrastructure;
package io.wkrzywiec.hexagonal.library.domain.borrowing.infrastructure;
import io.wkrzywiec.hexagonal.library.borrowing.model.BookReservedEvent;
import io.wkrzywiec.hexagonal.library.borrowing.ports.outgoing.BorrowingEventPublisher;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.BookReservedEvent;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.outgoing.BorrowingEventPublisher;
import lombok.RequiredArgsConstructor;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;

View File

@@ -1,4 +1,4 @@
package io.wkrzywiec.hexagonal.library.borrowing.infrastructure;
package io.wkrzywiec.hexagonal.library.domain.borrowing.infrastructure.entity;
import lombok.Data;

View File

@@ -1,8 +1,8 @@
package io.wkrzywiec.hexagonal.library.email.application;
package io.wkrzywiec.hexagonal.library.domain.email.application;
import io.wkrzywiec.hexagonal.library.borrowing.model.BookReservedEvent;
import io.wkrzywiec.hexagonal.library.email.model.SendReservationConfirmationCommand;
import io.wkrzywiec.hexagonal.library.email.ports.incoming.SendReservationConfirmation;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.BookReservedEvent;
import io.wkrzywiec.hexagonal.library.domain.email.core.model.SendReservationConfirmationCommand;
import io.wkrzywiec.hexagonal.library.domain.email.core.ports.incoming.SendReservationConfirmation;
import lombok.RequiredArgsConstructor;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;

View File

@@ -1,7 +1,7 @@
package io.wkrzywiec.hexagonal.library.email;
package io.wkrzywiec.hexagonal.library.domain.email.core;
import io.wkrzywiec.hexagonal.library.email.model.EmailAddress;
import io.wkrzywiec.hexagonal.library.email.model.ReservationConfirmEmail;
import io.wkrzywiec.hexagonal.library.domain.email.core.model.EmailAddress;
import io.wkrzywiec.hexagonal.library.domain.email.core.model.ReservationConfirmEmail;
class EmailCreator {

View File

@@ -1,10 +1,10 @@
package io.wkrzywiec.hexagonal.library.email;
package io.wkrzywiec.hexagonal.library.domain.email.core;
import io.wkrzywiec.hexagonal.library.email.model.ReservationConfirmEmail;
import io.wkrzywiec.hexagonal.library.email.model.SendReservationConfirmationCommand;
import io.wkrzywiec.hexagonal.library.email.ports.incoming.SendReservationConfirmation;
import io.wkrzywiec.hexagonal.library.email.ports.outgoing.EmailSender;
import io.wkrzywiec.hexagonal.library.email.ports.outgoing.EmailDatabase;
import io.wkrzywiec.hexagonal.library.domain.email.core.model.ReservationConfirmEmail;
import io.wkrzywiec.hexagonal.library.domain.email.core.model.SendReservationConfirmationCommand;
import io.wkrzywiec.hexagonal.library.domain.email.core.ports.incoming.SendReservationConfirmation;
import io.wkrzywiec.hexagonal.library.domain.email.core.ports.outgoing.EmailSender;
import io.wkrzywiec.hexagonal.library.domain.email.core.ports.outgoing.EmailDatabase;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor

View File

@@ -1,4 +1,4 @@
package io.wkrzywiec.hexagonal.library.email.model;
package io.wkrzywiec.hexagonal.library.domain.email.core.model;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

View File

@@ -1,4 +1,4 @@
package io.wkrzywiec.hexagonal.library.email.model;
package io.wkrzywiec.hexagonal.library.domain.email.core.model;
import lombok.RequiredArgsConstructor;

View File

@@ -1,4 +1,4 @@
package io.wkrzywiec.hexagonal.library.email.model;
package io.wkrzywiec.hexagonal.library.domain.email.core.model;
import lombok.Getter;

View File

@@ -0,0 +1,7 @@
package io.wkrzywiec.hexagonal.library.domain.email.core.ports.incoming;
import io.wkrzywiec.hexagonal.library.domain.email.core.model.SendReservationConfirmationCommand;
public interface SendReservationConfirmation {
void handle(SendReservationConfirmationCommand reservationConfirmationCommand);
}

View File

@@ -1,4 +1,4 @@
package io.wkrzywiec.hexagonal.library.email.ports.outgoing;
package io.wkrzywiec.hexagonal.library.domain.email.core.ports.outgoing;
import java.util.Optional;

View File

@@ -0,0 +1,8 @@
package io.wkrzywiec.hexagonal.library.domain.email.core.ports.outgoing;
import io.wkrzywiec.hexagonal.library.domain.email.core.model.ReservationConfirmEmail;
public interface EmailSender {
void sendReservationConfirmationEmail(ReservationConfirmEmail reservationConfirmEmail);
}

View File

@@ -1,6 +1,6 @@
package io.wkrzywiec.hexagonal.library.email.infrastructure;
package io.wkrzywiec.hexagonal.library.domain.email.infrastructure;
import io.wkrzywiec.hexagonal.library.email.ports.outgoing.EmailDatabase;
import io.wkrzywiec.hexagonal.library.domain.email.core.ports.outgoing.EmailDatabase;
import lombok.RequiredArgsConstructor;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;

View File

@@ -1,4 +1,4 @@
package io.wkrzywiec.hexagonal.library.email.infrastructure;
package io.wkrzywiec.hexagonal.library.domain.email.infrastructure;
import com.sendgrid.Method;
import com.sendgrid.Request;
@@ -6,8 +6,8 @@ import com.sendgrid.SendGrid;
import com.sendgrid.helpers.mail.Mail;
import com.sendgrid.helpers.mail.objects.Content;
import com.sendgrid.helpers.mail.objects.Email;
import io.wkrzywiec.hexagonal.library.email.model.ReservationConfirmEmail;
import io.wkrzywiec.hexagonal.library.email.ports.outgoing.EmailSender;
import io.wkrzywiec.hexagonal.library.domain.email.core.model.ReservationConfirmEmail;
import io.wkrzywiec.hexagonal.library.domain.email.core.ports.outgoing.EmailSender;
import java.io.IOException;

View File

@@ -1,7 +1,7 @@
package io.wkrzywiec.hexagonal.library.inventory.application;
package io.wkrzywiec.hexagonal.library.domain.inventory.application;
import io.wkrzywiec.hexagonal.library.inventory.model.AddNewBookCommand;
import io.wkrzywiec.hexagonal.library.inventory.ports.incoming.AddNewBook;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.model.AddNewBookCommand;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.ports.incoming.AddNewBook;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

View File

@@ -1,12 +1,12 @@
package io.wkrzywiec.hexagonal.library.inventory;
package io.wkrzywiec.hexagonal.library.domain.inventory.core;
import io.wkrzywiec.hexagonal.library.inventory.model.AddNewBookCommand;
import io.wkrzywiec.hexagonal.library.inventory.model.Book;
import io.wkrzywiec.hexagonal.library.inventory.model.NewBookWasAddedEvent;
import io.wkrzywiec.hexagonal.library.inventory.ports.incoming.AddNewBook;
import io.wkrzywiec.hexagonal.library.inventory.ports.outgoing.InventoryEventPublisher;
import io.wkrzywiec.hexagonal.library.inventory.ports.outgoing.GetBookDetails;
import io.wkrzywiec.hexagonal.library.inventory.ports.outgoing.InventoryDatabase;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.model.AddNewBookCommand;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.model.Book;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.model.NewBookWasAddedEvent;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.ports.incoming.AddNewBook;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.ports.outgoing.InventoryEventPublisher;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.ports.outgoing.GetBookDetails;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.ports.outgoing.InventoryDatabase;
public class InventoryFacade implements AddNewBook{

View File

@@ -1,8 +1,7 @@
package io.wkrzywiec.hexagonal.library.inventory.model;
package io.wkrzywiec.hexagonal.library.domain.inventory.core.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;

View File

@@ -1,4 +1,4 @@
package io.wkrzywiec.hexagonal.library.inventory.model;
package io.wkrzywiec.hexagonal.library.domain.inventory.core.model;
import lombok.EqualsAndHashCode;
import lombok.ToString;

View File

@@ -1,4 +1,4 @@
package io.wkrzywiec.hexagonal.library.inventory.model;
package io.wkrzywiec.hexagonal.library.domain.inventory.core.model;
import lombok.EqualsAndHashCode;

View File

@@ -1,4 +1,4 @@
package io.wkrzywiec.hexagonal.library.inventory.model;
package io.wkrzywiec.hexagonal.library.domain.inventory.core.model;
import lombok.EqualsAndHashCode;

View File

@@ -1,4 +1,4 @@
package io.wkrzywiec.hexagonal.library.inventory.model;
package io.wkrzywiec.hexagonal.library.domain.inventory.core.model;
import lombok.EqualsAndHashCode;

View File

@@ -1,7 +1,6 @@
package io.wkrzywiec.hexagonal.library.inventory.model;
package io.wkrzywiec.hexagonal.library.domain.inventory.core.model;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import javax.persistence.Column;
import javax.persistence.Embeddable;

View File

@@ -1,4 +1,4 @@
package io.wkrzywiec.hexagonal.library.inventory.model;
package io.wkrzywiec.hexagonal.library.domain.inventory.core.model;
import java.time.Instant;

View File

@@ -0,0 +1,7 @@
package io.wkrzywiec.hexagonal.library.domain.inventory.core.ports.incoming;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.model.AddNewBookCommand;
public interface AddNewBook {
void handle(AddNewBookCommand addNewBookCommand);
}

View File

@@ -0,0 +1,7 @@
package io.wkrzywiec.hexagonal.library.domain.inventory.core.ports.outgoing;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.model.Book;
public interface GetBookDetails {
Book handle(String bookId);
}

View File

@@ -0,0 +1,7 @@
package io.wkrzywiec.hexagonal.library.domain.inventory.core.ports.outgoing;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.model.Book;
public interface InventoryDatabase {
Book save(Book book);
}

View File

@@ -0,0 +1,7 @@
package io.wkrzywiec.hexagonal.library.domain.inventory.core.ports.outgoing;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.model.NewBookWasAddedEvent;
public interface InventoryEventPublisher {
void publishNewBookWasAddedEvent(NewBookWasAddedEvent event);
}

View File

@@ -1,6 +1,6 @@
package io.wkrzywiec.hexagonal.library.inventory.infrastructure;
package io.wkrzywiec.hexagonal.library.domain.inventory.infrastructure;
import io.wkrzywiec.hexagonal.library.inventory.model.Book;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.model.Book;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

View File

@@ -1,14 +1,14 @@
package io.wkrzywiec.hexagonal.library.inventory.infrastructure;
package io.wkrzywiec.hexagonal.library.domain.inventory.infrastructure;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import io.wkrzywiec.hexagonal.library.inventory.model.Author;
import io.wkrzywiec.hexagonal.library.inventory.model.Book;
import io.wkrzywiec.hexagonal.library.inventory.model.BookIdentification;
import io.wkrzywiec.hexagonal.library.inventory.model.Isbn10;
import io.wkrzywiec.hexagonal.library.inventory.model.Isbn13;
import io.wkrzywiec.hexagonal.library.inventory.ports.outgoing.GetBookDetails;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.model.Author;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.model.Book;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.model.BookIdentification;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.model.Isbn10;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.model.Isbn13;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.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.inventory.infrastructure;
package io.wkrzywiec.hexagonal.library.domain.inventory.infrastructure;
import io.wkrzywiec.hexagonal.library.inventory.model.Book;
import io.wkrzywiec.hexagonal.library.inventory.ports.outgoing.InventoryDatabase;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.model.Book;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.ports.outgoing.InventoryDatabase;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor

View File

@@ -1,7 +1,7 @@
package io.wkrzywiec.hexagonal.library.inventory.infrastructure;
package io.wkrzywiec.hexagonal.library.domain.inventory.infrastructure;
import io.wkrzywiec.hexagonal.library.inventory.model.NewBookWasAddedEvent;
import io.wkrzywiec.hexagonal.library.inventory.ports.outgoing.InventoryEventPublisher;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.model.NewBookWasAddedEvent;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.ports.outgoing.InventoryEventPublisher;
import lombok.RequiredArgsConstructor;
import org.springframework.context.ApplicationEventPublisher;

View File

@@ -1,7 +1,7 @@
package io.wkrzywiec.hexagonal.library.user.application;
package io.wkrzywiec.hexagonal.library.domain.user.application;
import io.wkrzywiec.hexagonal.library.user.model.AddUserCommand;
import io.wkrzywiec.hexagonal.library.user.ports.incoming.AddNewUser;
import io.wkrzywiec.hexagonal.library.domain.user.core.model.AddUserCommand;
import io.wkrzywiec.hexagonal.library.domain.user.core.ports.incoming.AddNewUser;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

View File

@@ -0,0 +1,25 @@
package io.wkrzywiec.hexagonal.library.domain.user.core;
import io.wkrzywiec.hexagonal.library.domain.user.core.model.AddUserCommand;
import io.wkrzywiec.hexagonal.library.domain.user.core.model.EmailAddress;
import io.wkrzywiec.hexagonal.library.domain.user.core.model.User;
import io.wkrzywiec.hexagonal.library.domain.user.core.model.UserIdentifier;
import io.wkrzywiec.hexagonal.library.domain.user.core.ports.incoming.AddNewUser;
import io.wkrzywiec.hexagonal.library.domain.user.core.ports.outgoing.UserDatabase;
import lombok.AllArgsConstructor;
@AllArgsConstructor
public class UserFacade implements AddNewUser {
private final UserDatabase database;
@Override
public UserIdentifier handle(AddUserCommand addUserCommand) {
User user = new User(
new EmailAddress(addUserCommand.getEmail()),
addUserCommand.getFirstName(),
addUserCommand.getLastName()
);
return database.save(user);
}
}

View File

@@ -1,4 +1,4 @@
package io.wkrzywiec.hexagonal.library.user.model;
package io.wkrzywiec.hexagonal.library.domain.user.core.model;
import lombok.AllArgsConstructor;
import lombok.Builder;

View File

@@ -1,4 +1,4 @@
package io.wkrzywiec.hexagonal.library.user.model;
package io.wkrzywiec.hexagonal.library.domain.user.core.model;
import lombok.EqualsAndHashCode;

View File

@@ -1,6 +1,5 @@
package io.wkrzywiec.hexagonal.library.user.model;
package io.wkrzywiec.hexagonal.library.domain.user.core.model;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import javax.persistence.Column;

View File

@@ -1,4 +1,4 @@
package io.wkrzywiec.hexagonal.library.user.model;
package io.wkrzywiec.hexagonal.library.domain.user.core.model;
public class UserIdentifier {

View File

@@ -0,0 +1,8 @@
package io.wkrzywiec.hexagonal.library.domain.user.core.ports.incoming;
import io.wkrzywiec.hexagonal.library.domain.user.core.model.AddUserCommand;
import io.wkrzywiec.hexagonal.library.domain.user.core.model.UserIdentifier;
public interface AddNewUser {
UserIdentifier handle(AddUserCommand addUserCommand);
}

View File

@@ -0,0 +1,8 @@
package io.wkrzywiec.hexagonal.library.domain.user.core.ports.outgoing;
import io.wkrzywiec.hexagonal.library.domain.user.core.model.User;
import io.wkrzywiec.hexagonal.library.domain.user.core.model.UserIdentifier;
public interface UserDatabase {
UserIdentifier save(User user);
}

View File

@@ -1,8 +1,8 @@
package io.wkrzywiec.hexagonal.library.user.infrastructure;
package io.wkrzywiec.hexagonal.library.domain.user.infrastructure;
import io.wkrzywiec.hexagonal.library.user.model.User;
import io.wkrzywiec.hexagonal.library.user.model.UserIdentifier;
import io.wkrzywiec.hexagonal.library.user.ports.outgoing.UserDatabase;
import io.wkrzywiec.hexagonal.library.domain.user.core.model.User;
import io.wkrzywiec.hexagonal.library.domain.user.core.model.UserIdentifier;
import io.wkrzywiec.hexagonal.library.domain.user.core.ports.outgoing.UserDatabase;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor

View File

@@ -1,6 +1,6 @@
package io.wkrzywiec.hexagonal.library.user.infrastructure;
package io.wkrzywiec.hexagonal.library.domain.user.infrastructure;
import io.wkrzywiec.hexagonal.library.user.model.User;
import io.wkrzywiec.hexagonal.library.domain.user.core.model.User;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

View File

@@ -1,7 +0,0 @@
package io.wkrzywiec.hexagonal.library.email.ports.incoming;
import io.wkrzywiec.hexagonal.library.email.model.SendReservationConfirmationCommand;
public interface SendReservationConfirmation {
void handle(SendReservationConfirmationCommand reservationConfirmationCommand);
}

View File

@@ -1,8 +0,0 @@
package io.wkrzywiec.hexagonal.library.email.ports.outgoing;
import io.wkrzywiec.hexagonal.library.email.model.ReservationConfirmEmail;
public interface EmailSender {
void sendReservationConfirmationEmail(ReservationConfirmEmail reservationConfirmEmail);
}

View File

@@ -1,11 +1,11 @@
package io.wkrzywiec.hexagonal.library;
package io.wkrzywiec.hexagonal.library.infrastructure;
import io.wkrzywiec.hexagonal.library.borrowing.BorrowingFacade;
import io.wkrzywiec.hexagonal.library.borrowing.infrastructure.BorrowingDatabaseAdapter;
import io.wkrzywiec.hexagonal.library.borrowing.infrastructure.SpringBorrowingEventPublisherAdapter;
import io.wkrzywiec.hexagonal.library.borrowing.ports.incoming.MakeBookAvailable;
import io.wkrzywiec.hexagonal.library.borrowing.ports.outgoing.BorrowingDatabase;
import io.wkrzywiec.hexagonal.library.borrowing.ports.outgoing.BorrowingEventPublisher;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.BorrowingFacade;
import io.wkrzywiec.hexagonal.library.domain.borrowing.infrastructure.BorrowingDatabaseAdapter;
import io.wkrzywiec.hexagonal.library.domain.borrowing.infrastructure.SpringBorrowingEventPublisherAdapter;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.incoming.MakeBookAvailable;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.outgoing.BorrowingDatabase;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.outgoing.BorrowingEventPublisher;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.core.JdbcTemplate;

View File

@@ -0,0 +1,28 @@
package io.wkrzywiec.hexagonal.library.infrastructure;
import io.wkrzywiec.hexagonal.library.domain.email.core.EmailFacade;
import io.wkrzywiec.hexagonal.library.domain.email.infrastructure.EmailDatabaseAdapter;
import io.wkrzywiec.hexagonal.library.domain.email.infrastructure.SendGridEmailSender;
import io.wkrzywiec.hexagonal.library.domain.email.core.ports.incoming.SendReservationConfirmation;
import io.wkrzywiec.hexagonal.library.domain.email.core.ports.outgoing.EmailSender;
import io.wkrzywiec.hexagonal.library.domain.email.core.ports.outgoing.EmailDatabase;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.core.JdbcTemplate;
public class EmailDomainConfig {
@Bean
public EmailSender emailSender() {
return new SendGridEmailSender();
}
@Bean
public EmailDatabase libraryDatabase(JdbcTemplate jdbcTemplate){
return new EmailDatabaseAdapter(jdbcTemplate);
}
@Bean
public SendReservationConfirmation sendReservationConfirmation(EmailSender emailSender, EmailDatabase database){
return new EmailFacade(emailSender, database);
}
}

View File

@@ -1,16 +1,16 @@
package io.wkrzywiec.hexagonal.library;
package io.wkrzywiec.hexagonal.library.infrastructure;
import io.wkrzywiec.hexagonal.library.inventory.InventoryFacade;
import io.wkrzywiec.hexagonal.library.inventory.infrastructure.BookRepository;
import io.wkrzywiec.hexagonal.library.inventory.infrastructure.GoogleBooksAdapter;
import io.wkrzywiec.hexagonal.library.inventory.infrastructure.InventoryDatabaseAdapter;
import io.wkrzywiec.hexagonal.library.inventory.infrastructure.SpringInventoryEventPublisherAdapter;
import io.wkrzywiec.hexagonal.library.inventory.ports.incoming.AddNewBook;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.InventoryFacade;
import io.wkrzywiec.hexagonal.library.domain.inventory.infrastructure.BookRepository;
import io.wkrzywiec.hexagonal.library.domain.inventory.infrastructure.GoogleBooksAdapter;
import io.wkrzywiec.hexagonal.library.domain.inventory.infrastructure.InventoryDatabaseAdapter;
import io.wkrzywiec.hexagonal.library.domain.inventory.infrastructure.SpringInventoryEventPublisherAdapter;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.ports.incoming.AddNewBook;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
class InventoryDomainConfig {
public class InventoryDomainConfig {
@Bean
SpringInventoryEventPublisherAdapter springInventoryEventPublisher(ApplicationEventPublisher applicationEventPublisher) {

View File

@@ -1,4 +1,4 @@
package io.wkrzywiec.hexagonal.library;
package io.wkrzywiec.hexagonal.library.infrastructure;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

View File

@@ -0,0 +1,21 @@
package io.wkrzywiec.hexagonal.library.infrastructure;
import io.wkrzywiec.hexagonal.library.domain.user.core.UserFacade;
import io.wkrzywiec.hexagonal.library.domain.user.infrastructure.UserDatabaseAdapter;
import io.wkrzywiec.hexagonal.library.domain.user.infrastructure.UserRepository;
import io.wkrzywiec.hexagonal.library.domain.user.core.ports.incoming.AddNewUser;
import io.wkrzywiec.hexagonal.library.domain.user.core.ports.outgoing.UserDatabase;
import org.springframework.context.annotation.Bean;
public class UserDomainConfig {
@Bean
public UserDatabase userDatabase(UserRepository userRepository){
return new UserDatabaseAdapter(userRepository);
}
@Bean
public AddNewUser addNewUser(UserDatabase userDatabase){
return new UserFacade(userDatabase);
}
}

View File

@@ -1,7 +0,0 @@
package io.wkrzywiec.hexagonal.library.inventory.ports.incoming;
import io.wkrzywiec.hexagonal.library.inventory.model.AddNewBookCommand;
public interface AddNewBook {
void handle(AddNewBookCommand addNewBookCommand);
}

View File

@@ -1,7 +0,0 @@
package io.wkrzywiec.hexagonal.library.inventory.ports.outgoing;
import io.wkrzywiec.hexagonal.library.inventory.model.Book;
public interface GetBookDetails {
Book handle(String bookId);
}

View File

@@ -1,7 +0,0 @@
package io.wkrzywiec.hexagonal.library.inventory.ports.outgoing;
import io.wkrzywiec.hexagonal.library.inventory.model.Book;
public interface InventoryDatabase {
Book save(Book book);
}

View File

@@ -1,7 +0,0 @@
package io.wkrzywiec.hexagonal.library.inventory.ports.outgoing;
import io.wkrzywiec.hexagonal.library.inventory.model.NewBookWasAddedEvent;
public interface InventoryEventPublisher {
void publishNewBookWasAddedEvent(NewBookWasAddedEvent event);
}

View File

@@ -1,25 +0,0 @@
package io.wkrzywiec.hexagonal.library.user;
import io.wkrzywiec.hexagonal.library.user.model.AddUserCommand;
import io.wkrzywiec.hexagonal.library.user.model.EmailAddress;
import io.wkrzywiec.hexagonal.library.user.model.User;
import io.wkrzywiec.hexagonal.library.user.model.UserIdentifier;
import io.wkrzywiec.hexagonal.library.user.ports.incoming.AddNewUser;
import io.wkrzywiec.hexagonal.library.user.ports.outgoing.UserDatabase;
import lombok.AllArgsConstructor;
@AllArgsConstructor
public class UserFacade implements AddNewUser {
private final UserDatabase database;
@Override
public UserIdentifier handle(AddUserCommand addUserCommand) {
User user = new User(
new EmailAddress(addUserCommand.getEmail()),
addUserCommand.getFirstName(),
addUserCommand.getLastName()
);
return database.save(user);
}
}

View File

@@ -1,8 +0,0 @@
package io.wkrzywiec.hexagonal.library.user.ports.incoming;
import io.wkrzywiec.hexagonal.library.user.model.AddUserCommand;
import io.wkrzywiec.hexagonal.library.user.model.UserIdentifier;
public interface AddNewUser {
UserIdentifier handle(AddUserCommand addUserCommand);
}

View File

@@ -1,8 +0,0 @@
package io.wkrzywiec.hexagonal.library.user.ports.outgoing;
import io.wkrzywiec.hexagonal.library.user.model.User;
import io.wkrzywiec.hexagonal.library.user.model.UserIdentifier;
public interface UserDatabase {
UserIdentifier save(User user);
}

View File

@@ -1,10 +1,10 @@
package io.wkrzywiec.hexagonal.library;
import io.wkrzywiec.hexagonal.library.inventory.model.Author;
import io.wkrzywiec.hexagonal.library.inventory.model.Book;
import io.wkrzywiec.hexagonal.library.inventory.model.BookIdentification;
import io.wkrzywiec.hexagonal.library.inventory.model.Isbn10;
import io.wkrzywiec.hexagonal.library.inventory.model.Isbn13;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.model.Author;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.model.Book;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.model.BookIdentification;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.model.Isbn10;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.model.Isbn13;
import java.util.Collections;

View File

@@ -4,21 +4,21 @@ import com.tngtech.archunit.core.importer.ImportOption;
import com.tngtech.archunit.junit.AnalyzeClasses;
import com.tngtech.archunit.junit.ArchTest;
import com.tngtech.archunit.lang.ArchRule;
import io.wkrzywiec.hexagonal.library.borrowing.BorrowingFacade;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.BorrowingFacade;
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClass;
import static com.tngtech.archunit.library.Architectures.onionArchitecture;
@AnalyzeClasses(packages = {"io.wkrzywiec.hexagonal.library.borrowing"},
@AnalyzeClasses(packages = {"io.wkrzywiec.hexagonal.library.domain.borrowing"},
importOptions = { ImportOption.DoNotIncludeTests.class })
public class BorrowingArchitectureTest {
@ArchTest
public static final ArchRule hexagonalArchInBorrowingDomain = onionArchitecture()
.domainModels("io.wkrzywiec.hexagonal.library.borrowing.model..")
.domainServices("io.wkrzywiec.hexagonal.library.borrowing..")
.applicationServices("io.wkrzywiec.hexagonal.library.borrowing.application..")
.adapter("infrastructure", "io.wkrzywiec.hexagonal.library.borrowing.infrastructure..");
.domainModels("io.wkrzywiec.hexagonal.library.domain.borrowing.core.model..")
.domainServices("io.wkrzywiec.hexagonal.library.domain.borrowing..")
.applicationServices("io.wkrzywiec.hexagonal.library.domain.borrowing.application..")
.adapter("infrastructure", "io.wkrzywiec.hexagonal.library.domain.borrowing.infrastructure..");
@ArchTest
public static final ArchRule noSpringDependenciesInBorrowingFacade =

View File

@@ -4,21 +4,21 @@ import com.tngtech.archunit.core.importer.ImportOption;
import com.tngtech.archunit.junit.AnalyzeClasses;
import com.tngtech.archunit.junit.ArchTest;
import com.tngtech.archunit.lang.ArchRule;
import io.wkrzywiec.hexagonal.library.email.EmailFacade;
import io.wkrzywiec.hexagonal.library.domain.email.core.EmailFacade;
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClass;
import static com.tngtech.archunit.library.Architectures.onionArchitecture;
@AnalyzeClasses(packages = {"io.wkrzywiec.hexagonal.library.email"},
@AnalyzeClasses(packages = {"io.wkrzywiec.hexagonal.library.domain.email"},
importOptions = { ImportOption.DoNotIncludeTests.class })
public class EmailArchitectureTest {
@ArchTest
public static final ArchRule hexagonalArchInEmailDomain = onionArchitecture()
.domainModels("io.wkrzywiec.hexagonal.library.email.model..")
.domainServices("io.wkrzywiec.hexagonal.library.email..")
.applicationServices("io.wkrzywiec.hexagonal.library.email.application..")
.adapter("infrastructure", "io.wkrzywiec.hexagonal.library.email.infrastructure..");
.domainModels("io.wkrzywiec.hexagonal.library.domain.email.core.model..")
.domainServices("io.wkrzywiec.hexagonal.library.domain.email..")
.applicationServices("io.wkrzywiec.hexagonal.library.domain.email.application..")
.adapter("infrastructure", "io.wkrzywiec.hexagonal.library.domain.email.infrastructure..");
@ArchTest
public static final ArchRule noSpringDependenciesInEmailFacade =

View File

@@ -4,21 +4,21 @@ import com.tngtech.archunit.core.importer.ImportOption;
import com.tngtech.archunit.junit.AnalyzeClasses;
import com.tngtech.archunit.junit.ArchTest;
import com.tngtech.archunit.lang.ArchRule;
import io.wkrzywiec.hexagonal.library.inventory.InventoryFacade;
import io.wkrzywiec.hexagonal.library.domain.inventory.core.InventoryFacade;
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClass;
import static com.tngtech.archunit.library.Architectures.onionArchitecture;
@AnalyzeClasses(packages = {"io.wkrzywiec.hexagonal.library.inventory"},
@AnalyzeClasses(packages = {"io.wkrzywiec.hexagonal.library.domain.inventory"},
importOptions = { ImportOption.DoNotIncludeTests.class })
public class InventoryArchitectureTest {
@ArchTest
public static final ArchRule hexagonalArchInInventoryDomain = onionArchitecture()
.domainModels("io.wkrzywiec.hexagonal.library.inventory.model..")
.domainServices("io.wkrzywiec.hexagonal.library.inventory..")
.applicationServices("io.wkrzywiec.hexagonal.library.inventory.application..")
.adapter("infrastructure", "io.wkrzywiec.hexagonal.library.inventory.infrastructure..");
.domainModels("io.wkrzywiec.hexagonal.library.domain.inventory.core.model..")
.domainServices("io.wkrzywiec.hexagonal.library.domain.inventory..")
.applicationServices("io.wkrzywiec.hexagonal.library.domain.inventory.application..")
.adapter("infrastructure", "io.wkrzywiec.hexagonal.library.domain.inventory.infrastructure..");
@ArchTest
public static final ArchRule noSpringDependenciesInInventoryFacade =

View File

@@ -4,21 +4,21 @@ import com.tngtech.archunit.core.importer.ImportOption;
import com.tngtech.archunit.junit.AnalyzeClasses;
import com.tngtech.archunit.junit.ArchTest;
import com.tngtech.archunit.lang.ArchRule;
import io.wkrzywiec.hexagonal.library.user.UserFacade;
import io.wkrzywiec.hexagonal.library.domain.user.core.UserFacade;
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClass;
import static com.tngtech.archunit.library.Architectures.onionArchitecture;
@AnalyzeClasses(packages = {"io.wkrzywiec.hexagonal.library.user"},
@AnalyzeClasses(packages = {"io.wkrzywiec.hexagonal.library.domain.user"},
importOptions = { ImportOption.DoNotIncludeTests.class })
public class UserArchitectureTest {
@ArchTest
public static final ArchRule hexagonalArchInUserDomain = onionArchitecture()
.domainModels("io.wkrzywiec.hexagonal.library.user.model..")
.domainServices("io.wkrzywiec.hexagonal.library.user..")
.applicationServices("io.wkrzywiec.hexagonal.library.user.application..")
.adapter("infrastructure", "io.wkrzywiec.hexagonal.library.user.infrastructure..");
.domainModels("io.wkrzywiec.hexagonal.library.domain.user.core.model..")
.domainServices("io.wkrzywiec.hexagonal.library.domain.user..")
.applicationServices("io.wkrzywiec.hexagonal.library.domain.user.application..")
.adapter("infrastructure", "io.wkrzywiec.hexagonal.library.domain.user.infrastructure..");
@ArchTest
public static final ArchRule noSpringDependenciesInUserFacade =

Some files were not shown because too many files have changed in this diff Show More