From 9d6ba747a8613a6fe4b9cc9e54e84e6cdfef305a Mon Sep 17 00:00:00 2001 From: Piotr Dec Date: Wed, 22 May 2024 19:37:19 +0200 Subject: [PATCH] feat: UserService implementation --- .../java/eu/ztsh/wymiana/service/UserService.java | 10 +++++++--- src/main/java/eu/ztsh/wymiana/util/UserMapper.java | 9 +++++++++ src/test/java/eu/ztsh/wymiana/EntityCreator.java | 5 +++++ .../eu/ztsh/wymiana/service/UserServiceTest.java | 14 ++++++-------- .../java/eu/ztsh/wymiana/util/UserMapperTest.java | 9 +++++++++ 5 files changed, 36 insertions(+), 11 deletions(-) diff --git a/src/main/java/eu/ztsh/wymiana/service/UserService.java b/src/main/java/eu/ztsh/wymiana/service/UserService.java index 341112c..01cba7c 100644 --- a/src/main/java/eu/ztsh/wymiana/service/UserService.java +++ b/src/main/java/eu/ztsh/wymiana/service/UserService.java @@ -1,7 +1,9 @@ package eu.ztsh.wymiana.service; import eu.ztsh.wymiana.data.repository.UserRepository; +import eu.ztsh.wymiana.exception.UserAlreadyExistsException; import eu.ztsh.wymiana.model.User; +import eu.ztsh.wymiana.util.UserMapper; import eu.ztsh.wymiana.web.model.UserCreateRequest; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @@ -15,13 +17,15 @@ public class UserService { private final UserRepository userRepository; - public User create(@Valid UserCreateRequest request) { - throw new IllegalStateException("Not impplemented yet"); + if (userRepository.findById(request.pesel()).isPresent()) { + throw new UserAlreadyExistsException(request); + } + return UserMapper.entityToPojo(userRepository.save(UserMapper.requestToEntity(request))); } public Optional get(String pesel) { - throw new IllegalStateException("Not impplemented yet"); + return userRepository.findById(pesel).map(UserMapper::entityToPojo); } } diff --git a/src/main/java/eu/ztsh/wymiana/util/UserMapper.java b/src/main/java/eu/ztsh/wymiana/util/UserMapper.java index ea744f4..b4aff44 100644 --- a/src/main/java/eu/ztsh/wymiana/util/UserMapper.java +++ b/src/main/java/eu/ztsh/wymiana/util/UserMapper.java @@ -1,7 +1,11 @@ package eu.ztsh.wymiana.util; +import eu.ztsh.wymiana.data.entity.CurrencyEntity; import eu.ztsh.wymiana.data.entity.UserEntity; import eu.ztsh.wymiana.model.User; +import eu.ztsh.wymiana.web.model.UserCreateRequest; + +import java.util.List; public class UserMapper { @@ -10,6 +14,11 @@ public class UserMapper { CurrencyMapper.entitiesToPojoMap(entity.getCurrencies())); } + public static UserEntity requestToEntity(UserCreateRequest request) { + return new UserEntity(request.pesel(), request.name(), request.surname(), + List.of(new CurrencyEntity(request.pesel(), "PLN", request.pln()))); + } + private UserMapper() { } diff --git a/src/test/java/eu/ztsh/wymiana/EntityCreator.java b/src/test/java/eu/ztsh/wymiana/EntityCreator.java index 61d5533..77ae953 100644 --- a/src/test/java/eu/ztsh/wymiana/EntityCreator.java +++ b/src/test/java/eu/ztsh/wymiana/EntityCreator.java @@ -2,6 +2,7 @@ package eu.ztsh.wymiana; import eu.ztsh.wymiana.data.entity.CurrencyEntity; import eu.ztsh.wymiana.data.entity.UserEntity; +import eu.ztsh.wymiana.web.model.UserCreateRequest; import java.util.ArrayList; import java.util.List; @@ -22,6 +23,10 @@ public class EntityCreator { return new UserEntityBuilder(); } + public static UserCreateRequest userRequest() { + return new UserCreateRequest(Constants.NAME, Constants.SURNAME, Constants.PESEL, Constants.PLN); + } + public static class UserEntityBuilder { String name; diff --git a/src/test/java/eu/ztsh/wymiana/service/UserServiceTest.java b/src/test/java/eu/ztsh/wymiana/service/UserServiceTest.java index 4dd6908..5d9656e 100644 --- a/src/test/java/eu/ztsh/wymiana/service/UserServiceTest.java +++ b/src/test/java/eu/ztsh/wymiana/service/UserServiceTest.java @@ -6,6 +6,7 @@ import eu.ztsh.wymiana.data.repository.UserRepository; import eu.ztsh.wymiana.exception.UserAlreadyExistsException; import eu.ztsh.wymiana.util.UserMapper; import eu.ztsh.wymiana.web.model.UserCreateRequest; +import jakarta.transaction.Transactional; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -23,16 +24,17 @@ class UserServiceTest extends RepositoryBasedTest { } @Test + @Transactional void createNewUserTest() { - userService.create(createRequest()); + userService.create(EntityCreator.userRequest()); var entity = EntityCreator.user().build(); expect(entity); } @Test void createDuplicatedUser() { - var first = createRequest(); - var second = createRequest(); + var first = EntityCreator.userRequest(); + var second = EntityCreator.userRequest(); userService.create(first); assertThatThrownBy(() -> userService.create(second)) .isInstanceOf(UserAlreadyExistsException.class) @@ -40,6 +42,7 @@ class UserServiceTest extends RepositoryBasedTest { } @Test + @Transactional void getExistingUserTest() { var entity = EntityCreator.user().build(); userRepository.save(entity); @@ -58,9 +61,4 @@ class UserServiceTest extends RepositoryBasedTest { assertThat(userOptional).isEmpty(); } - private UserCreateRequest createRequest() { - return new UserCreateRequest(EntityCreator.Constants.NAME, EntityCreator.Constants.SURNAME, - EntityCreator.Constants.PESEL, 20.10); - } - } diff --git a/src/test/java/eu/ztsh/wymiana/util/UserMapperTest.java b/src/test/java/eu/ztsh/wymiana/util/UserMapperTest.java index 7b97107..f3fc91d 100644 --- a/src/test/java/eu/ztsh/wymiana/util/UserMapperTest.java +++ b/src/test/java/eu/ztsh/wymiana/util/UserMapperTest.java @@ -25,4 +25,13 @@ class UserMapperTest { .isEqualTo(expected); } + @Test + void requestToEntityTest() { + var request = EntityCreator.userRequest(); + var expected = EntityCreator.user().build(); + assertThat(UserMapper.requestToEntity(request)) + .usingRecursiveComparison() + .isEqualTo(expected); + } + }