UserDatabaseAdapter implemented
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
package io.wkrzywiec.hexagonal.library.borrowing.ports.incoming;
|
||||
|
||||
public interface BorrowBook {
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
package io.wkrzywiec.hexagonal.library.borrowing.ports.incoming;
|
||||
|
||||
public interface CancelReservation {
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
package io.wkrzywiec.hexagonal.library.borrowing.ports.incoming;
|
||||
|
||||
public interface GiveBackBook {
|
||||
}
|
||||
@@ -2,7 +2,7 @@ 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.NewUser;
|
||||
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;
|
||||
@@ -15,11 +15,11 @@ public class UserFacade implements AddNewUser {
|
||||
|
||||
@Override
|
||||
public UserIdentifier handle(AddUserCommand addUserCommand) {
|
||||
NewUser newUser = new NewUser(
|
||||
User user = new User(
|
||||
new EmailAddress(addUserCommand.getEmail()),
|
||||
addUserCommand.getFirstName(),
|
||||
addUserCommand.getLastName()
|
||||
);
|
||||
return database.save(newUser);
|
||||
return database.save(user);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,18 @@
|
||||
package io.wkrzywiec.hexagonal.library.user.infrastructure;
|
||||
|
||||
import io.wkrzywiec.hexagonal.library.user.model.NewUser;
|
||||
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 lombok.RequiredArgsConstructor;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class UserDatabaseAdapter implements UserDatabase {
|
||||
|
||||
private final UserRepository userRepository;
|
||||
|
||||
@Override
|
||||
public UserIdentifier save(NewUser newUser) {
|
||||
return null;
|
||||
public UserIdentifier save(User user) {
|
||||
User savedUser = userRepository.save(user);
|
||||
return new UserIdentifier(savedUser.getIdentifierAsLong());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
package io.wkrzywiec.hexagonal.library.user.infrastructure;
|
||||
|
||||
import io.wkrzywiec.hexagonal.library.user.model.User;
|
||||
import org.springframework.data.repository.CrudRepository;
|
||||
|
||||
public interface UserRepository extends CrudRepository<User, Long> {
|
||||
}
|
||||
@@ -12,7 +12,7 @@ import java.util.regex.Pattern;
|
||||
public class EmailAddress {
|
||||
|
||||
@Column(name="email")
|
||||
private final String value;
|
||||
private String value;
|
||||
|
||||
public EmailAddress(String value) {
|
||||
Pattern pattern = Pattern.compile("^(.+)@(.+)$");
|
||||
@@ -23,4 +23,6 @@ public class EmailAddress {
|
||||
throw new IllegalArgumentException("Provided value is not an email address");
|
||||
}
|
||||
}
|
||||
|
||||
private EmailAddress(){}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ import javax.persistence.Table;
|
||||
@Entity
|
||||
@Table(name="user")
|
||||
@EqualsAndHashCode
|
||||
public class NewUser {
|
||||
public class User {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
@@ -30,9 +30,15 @@ public class NewUser {
|
||||
@Column(name="last_name")
|
||||
private String lastName;
|
||||
|
||||
public NewUser(EmailAddress emailAddress, String firstName, String lastName) {
|
||||
public User(EmailAddress emailAddress, String firstName, String lastName) {
|
||||
this.emailAddress = emailAddress;
|
||||
this.firstName = firstName;
|
||||
this.lastName = lastName;
|
||||
}
|
||||
|
||||
public Long getIdentifierAsLong(){
|
||||
return id;
|
||||
}
|
||||
|
||||
private User(){}
|
||||
}
|
||||
@@ -1,8 +1,8 @@
|
||||
package io.wkrzywiec.hexagonal.library.user.ports.outgoing;
|
||||
|
||||
import io.wkrzywiec.hexagonal.library.user.model.NewUser;
|
||||
import io.wkrzywiec.hexagonal.library.user.model.User;
|
||||
import io.wkrzywiec.hexagonal.library.user.model.UserIdentifier;
|
||||
|
||||
public interface UserDatabase {
|
||||
UserIdentifier save(NewUser newUser);
|
||||
UserIdentifier save(User user);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package io.wkrzywiec.hexagonal.library.user;
|
||||
|
||||
import io.wkrzywiec.hexagonal.library.user.model.NewUser;
|
||||
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 org.apache.commons.lang3.reflect.FieldUtils;
|
||||
@@ -9,18 +9,18 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
public class InMemoryUserDatabase implements UserDatabase {
|
||||
|
||||
ConcurrentHashMap<Long, NewUser> users = new ConcurrentHashMap<>();
|
||||
ConcurrentHashMap<Long, User> users = new ConcurrentHashMap<>();
|
||||
|
||||
@Override
|
||||
public UserIdentifier save(NewUser newUser) {
|
||||
public UserIdentifier save(User user) {
|
||||
Long id = users.size() + 1L;
|
||||
|
||||
try {
|
||||
FieldUtils.writeField(newUser, "id", id, true);
|
||||
FieldUtils.writeField(user, "id", id, true);
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
users.put(id, newUser);
|
||||
users.put(id, user);
|
||||
return new UserIdentifier(id);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ 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.NewUser;
|
||||
import io.wkrzywiec.hexagonal.library.user.model.User;
|
||||
import io.wkrzywiec.hexagonal.library.user.model.UserIdentifier;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
@@ -26,7 +26,7 @@ public class UserFacadeTest {
|
||||
@DisplayName("Add new user")
|
||||
public void shouldAddNewUser(){
|
||||
//given
|
||||
NewUser expectedNewUser = new NewUser(
|
||||
User expectedUser = new User(
|
||||
new EmailAddress("john.doe@test.com"),
|
||||
"John",
|
||||
"Doe"
|
||||
@@ -43,6 +43,6 @@ public class UserFacadeTest {
|
||||
|
||||
//then
|
||||
assertTrue(userIdentifier.getAsLong() > 0);
|
||||
assertEquals(expectedNewUser, database.users.get(userIdentifier.getAsLong()));
|
||||
assertEquals(expectedUser, database.users.get(userIdentifier.getAsLong()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
package io.wkrzywiec.hexagonal.library.user.infrastructure;
|
||||
|
||||
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 org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.test.context.jdbc.Sql;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.springframework.test.context.jdbc.Sql.ExecutionPhase.AFTER_TEST_METHOD;
|
||||
|
||||
@SpringBootTest
|
||||
public class UserDatabaseAdapterITCase {
|
||||
|
||||
@Autowired
|
||||
private JdbcTemplate jdbcTemplate;
|
||||
|
||||
@Autowired
|
||||
private UserRepository userRepository;
|
||||
|
||||
private UserDatabaseAdapter userDatabase;
|
||||
|
||||
@BeforeEach
|
||||
public void init(){
|
||||
userDatabase = new UserDatabaseAdapter(userRepository);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("Save new user in database")
|
||||
@Sql(scripts = "/clean-database.sql", executionPhase = AFTER_TEST_METHOD)
|
||||
public void shouldSaveDatabase(){
|
||||
//given
|
||||
User user = new User(
|
||||
new EmailAddress("john.doe@test.com"),
|
||||
"John",
|
||||
"Doe"
|
||||
);
|
||||
|
||||
//when
|
||||
UserIdentifier userIdentifier = userDatabase.save(user);
|
||||
|
||||
//then
|
||||
Long savedUserId = jdbcTemplate.queryForObject(
|
||||
"SELECT id FROM user WHERE email = ?",
|
||||
Long.class,
|
||||
"john.doe@test.com");
|
||||
|
||||
assertEquals(userIdentifier.getAsLong(), savedUserId);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user