From 7f313cabd201ba631f9dd2081bd5e92b9476431a Mon Sep 17 00:00:00 2001 From: ivyxjc Date: Tue, 29 Apr 2025 17:43:09 +0800 Subject: [PATCH 1/2] feat(): optimize user repository interface keep the interface clean, not to use any spring-data-jpa annotation user another interface to implement this interface and set spring-data-jpa annotation in that interface --- .../rdsjpa/IUserLoginItemRepository.java | 11 +++++++++ ...ository.java => IUserModelRepository.java} | 3 +-- ...y.java => UserLoginItemJpaRepository.java} | 7 +----- .../repository/rdsjpa/UserRepositoryImpl.java | 6 ++--- .../AbstractVerificationService.java | 24 +++++++++++-------- .../DummyVerificationService.java | 4 ++-- 6 files changed, 32 insertions(+), 23 deletions(-) create mode 100644 src/main/java/org/clevercastle/helper/login/repository/rdsjpa/IUserLoginItemRepository.java rename src/main/java/org/clevercastle/helper/login/repository/rdsjpa/{UserModelRepository.java => IUserModelRepository.java} (80%) rename src/main/java/org/clevercastle/helper/login/repository/rdsjpa/{UserLoginItemRepository.java => UserLoginItemJpaRepository.java} (73%) diff --git a/src/main/java/org/clevercastle/helper/login/repository/rdsjpa/IUserLoginItemRepository.java b/src/main/java/org/clevercastle/helper/login/repository/rdsjpa/IUserLoginItemRepository.java new file mode 100644 index 0000000..d288ea4 --- /dev/null +++ b/src/main/java/org/clevercastle/helper/login/repository/rdsjpa/IUserLoginItemRepository.java @@ -0,0 +1,11 @@ +package org.clevercastle.helper.login.repository.rdsjpa; + +import org.clevercastle.helper.login.UserLoginItem; + +public interface IUserLoginItemRepository { + UserLoginItem save(UserLoginItem userLoginItem); + + UserLoginItem getByLoginIdentifier(String loginIdentifier); + + void confirmLoginItem(String loginIdentifier); +} diff --git a/src/main/java/org/clevercastle/helper/login/repository/rdsjpa/UserModelRepository.java b/src/main/java/org/clevercastle/helper/login/repository/rdsjpa/IUserModelRepository.java similarity index 80% rename from src/main/java/org/clevercastle/helper/login/repository/rdsjpa/UserModelRepository.java rename to src/main/java/org/clevercastle/helper/login/repository/rdsjpa/IUserModelRepository.java index ec9b378..fe2e3d8 100644 --- a/src/main/java/org/clevercastle/helper/login/repository/rdsjpa/UserModelRepository.java +++ b/src/main/java/org/clevercastle/helper/login/repository/rdsjpa/IUserModelRepository.java @@ -2,8 +2,7 @@ import org.clevercastle.helper.login.User; -public interface UserModelRepository { - +public interface IUserModelRepository { User save(User user); User getByUserId(String userId); diff --git a/src/main/java/org/clevercastle/helper/login/repository/rdsjpa/UserLoginItemRepository.java b/src/main/java/org/clevercastle/helper/login/repository/rdsjpa/UserLoginItemJpaRepository.java similarity index 73% rename from src/main/java/org/clevercastle/helper/login/repository/rdsjpa/UserLoginItemRepository.java rename to src/main/java/org/clevercastle/helper/login/repository/rdsjpa/UserLoginItemJpaRepository.java index 4db83b1..8dde8f0 100644 --- a/src/main/java/org/clevercastle/helper/login/repository/rdsjpa/UserLoginItemRepository.java +++ b/src/main/java/org/clevercastle/helper/login/repository/rdsjpa/UserLoginItemJpaRepository.java @@ -1,17 +1,12 @@ package org.clevercastle.helper.login.repository.rdsjpa; -import org.clevercastle.helper.login.UserLoginItem; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import javax.transaction.Transactional; -public interface UserLoginItemRepository { - UserLoginItem save(UserLoginItem userLoginItem); - - UserLoginItem getByLoginIdentifier(String loginIdentifier); - +public interface UserLoginItemJpaRepository extends IUserLoginItemRepository { @Modifying @Transactional @Query("UPDATE UserLoginItem u\n" + diff --git a/src/main/java/org/clevercastle/helper/login/repository/rdsjpa/UserRepositoryImpl.java b/src/main/java/org/clevercastle/helper/login/repository/rdsjpa/UserRepositoryImpl.java index 124f5e4..237ae31 100644 --- a/src/main/java/org/clevercastle/helper/login/repository/rdsjpa/UserRepositoryImpl.java +++ b/src/main/java/org/clevercastle/helper/login/repository/rdsjpa/UserRepositoryImpl.java @@ -6,10 +6,10 @@ import org.clevercastle.helper.login.repository.UserRepository; public class UserRepositoryImpl implements UserRepository { - private final UserModelRepository userModelRepository; - private final UserLoginItemRepository userLoginItemRepository; + private final IUserModelRepository userModelRepository; + private final IUserLoginItemRepository userLoginItemRepository; - public UserRepositoryImpl(UserModelRepository userModelRepository, UserLoginItemRepository userLoginItemRepository) { + public UserRepositoryImpl(IUserModelRepository userModelRepository, IUserLoginItemRepository userLoginItemRepository) { this.userModelRepository = userModelRepository; this.userLoginItemRepository = userLoginItemRepository; } diff --git a/src/main/java/org/clevercastle/helper/login/verification/AbstractVerificationService.java b/src/main/java/org/clevercastle/helper/login/verification/AbstractVerificationService.java index 0350162..36b5c32 100644 --- a/src/main/java/org/clevercastle/helper/login/verification/AbstractVerificationService.java +++ b/src/main/java/org/clevercastle/helper/login/verification/AbstractVerificationService.java @@ -3,13 +3,13 @@ import org.apache.commons.lang3.StringUtils; import org.clevercastle.helper.login.CastleException; import org.clevercastle.helper.login.UserLoginItem; -import org.clevercastle.helper.login.repository.rdsjpa.UserLoginItemRepository; +import org.clevercastle.helper.login.repository.rdsjpa.IUserLoginItemRepository; import org.clevercastle.helper.login.util.TimeUtils; public abstract class AbstractVerificationService implements VerificationService { - private final UserLoginItemRepository userLoginItemRepository; + private final IUserLoginItemRepository userLoginItemRepository; - protected AbstractVerificationService(UserLoginItemRepository userLoginItemRepository) { + protected AbstractVerificationService(IUserLoginItemRepository userLoginItemRepository) { this.userLoginItemRepository = userLoginItemRepository; } @@ -19,13 +19,17 @@ public void verify(String loginIdentifier, String verificationCode) throws Castl throw new CastleException(); } UserLoginItem userLoginItem = userLoginItemRepository.getByLoginIdentifier(loginIdentifier); - if (userLoginItem.getVerificationCodeExpiredAt() != null && userLoginItem.getVerificationCodeExpiredAt().isAfter(TimeUtils.now())) { - if (verificationCode.equals(userLoginItem.getVerificationCode())) { - userLoginItemRepository.confirmLoginItem(loginIdentifier); - } + if (StringUtils.isBlank(verificationCode)) { + throw new CastleException(); + } + if (StringUtils.isBlank(userLoginItem.getVerificationCode()) || userLoginItem.getVerificationCodeExpiredAt() == null) { + throw new CastleException(); + } + if (userLoginItem.getVerificationCodeExpiredAt().isBefore(TimeUtils.now())) { + throw new CastleException(); + } + if (verificationCode.equals(userLoginItem.getVerificationCode())) { + userLoginItemRepository.confirmLoginItem(loginIdentifier); } - throw new CastleException(); } - - } diff --git a/src/main/java/org/clevercastle/helper/login/verification/DummyVerificationService.java b/src/main/java/org/clevercastle/helper/login/verification/DummyVerificationService.java index a5456f2..5cb7e78 100644 --- a/src/main/java/org/clevercastle/helper/login/verification/DummyVerificationService.java +++ b/src/main/java/org/clevercastle/helper/login/verification/DummyVerificationService.java @@ -1,14 +1,14 @@ package org.clevercastle.helper.login.verification; import org.clevercastle.helper.login.CastleException; -import org.clevercastle.helper.login.repository.rdsjpa.UserLoginItemRepository; +import org.clevercastle.helper.login.repository.rdsjpa.IUserLoginItemRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class DummyVerificationService extends AbstractVerificationService { private final Logger logger = LoggerFactory.getLogger(DummyVerificationService.class); - public DummyVerificationService(UserLoginItemRepository userLoginItemRepository) { + public DummyVerificationService(IUserLoginItemRepository userLoginItemRepository) { super(userLoginItemRepository); } From 699677988d6c4ce0c4d87ddf63d0b7cb17019733 Mon Sep 17 00:00:00 2001 From: ivyxjc Date: Tue, 29 Apr 2025 17:44:01 +0800 Subject: [PATCH 2/2] feat(example): update example --- .../examples/springboot/springbootexample/Beans.java | 10 +++++----- .../UserLoginItemRepositoryAdapter.java | 4 ++-- .../springbootexample/UserModelRepositoryAdapter.java | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/examples/spring-boot-example/src/main/java/org/clevercastle/helper/login/examples/springboot/springbootexample/Beans.java b/examples/spring-boot-example/src/main/java/org/clevercastle/helper/login/examples/springboot/springbootexample/Beans.java index 12bf86d..641a1c0 100644 --- a/examples/spring-boot-example/src/main/java/org/clevercastle/helper/login/examples/springboot/springbootexample/Beans.java +++ b/examples/spring-boot-example/src/main/java/org/clevercastle/helper/login/examples/springboot/springbootexample/Beans.java @@ -5,8 +5,8 @@ import org.clevercastle.helper.login.UserService; import org.clevercastle.helper.login.UserServiceImpl; import org.clevercastle.helper.login.repository.UserRepository; -import org.clevercastle.helper.login.repository.rdsjpa.UserLoginItemRepository; -import org.clevercastle.helper.login.repository.rdsjpa.UserModelRepository; +import org.clevercastle.helper.login.repository.rdsjpa.IUserLoginItemRepository; +import org.clevercastle.helper.login.repository.rdsjpa.IUserModelRepository; import org.clevercastle.helper.login.repository.rdsjpa.UserRepositoryImpl; import org.clevercastle.helper.login.token.TokenService; import org.clevercastle.helper.login.token.jwt.JwtTokenService; @@ -30,8 +30,8 @@ @Configuration public class Beans { @Bean - public UserRepository userRepository(UserModelRepository userModelRepository, - UserLoginItemRepository userLoginItemRepository) { + public UserRepository userRepository(IUserModelRepository userModelRepository, + IUserLoginItemRepository userLoginItemRepository) { return new UserRepositoryImpl(userModelRepository, userLoginItemRepository); } @@ -54,7 +54,7 @@ public TokenService tokenService() throws NoSuchAlgorithmException, InvalidKeySp } @Bean - public UserService userService(UserRepository userRepository, UserLoginItemRepository userLoginItemRepository, TokenService tokenService) { + public UserService userService(UserRepository userRepository, IUserLoginItemRepository userLoginItemRepository, TokenService tokenService) { return new UserServiceImpl(Config.builder().build(), userRepository, tokenService, new DummyVerificationService(userLoginItemRepository)); } diff --git a/examples/spring-boot-example/src/main/java/org/clevercastle/helper/login/examples/springboot/springbootexample/UserLoginItemRepositoryAdapter.java b/examples/spring-boot-example/src/main/java/org/clevercastle/helper/login/examples/springboot/springbootexample/UserLoginItemRepositoryAdapter.java index 26f8d3e..41c0782 100644 --- a/examples/spring-boot-example/src/main/java/org/clevercastle/helper/login/examples/springboot/springbootexample/UserLoginItemRepositoryAdapter.java +++ b/examples/spring-boot-example/src/main/java/org/clevercastle/helper/login/examples/springboot/springbootexample/UserLoginItemRepositoryAdapter.java @@ -1,10 +1,10 @@ package org.clevercastle.helper.login.examples.springboot.springbootexample; import org.clevercastle.helper.login.UserLoginItem; -import org.clevercastle.helper.login.repository.rdsjpa.UserLoginItemRepository; +import org.clevercastle.helper.login.repository.rdsjpa.UserLoginItemJpaRepository; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository -public interface UserLoginItemRepositoryAdapter extends UserLoginItemRepository, JpaRepository { +public interface UserLoginItemRepositoryAdapter extends UserLoginItemJpaRepository, JpaRepository { } \ No newline at end of file diff --git a/examples/spring-boot-example/src/main/java/org/clevercastle/helper/login/examples/springboot/springbootexample/UserModelRepositoryAdapter.java b/examples/spring-boot-example/src/main/java/org/clevercastle/helper/login/examples/springboot/springbootexample/UserModelRepositoryAdapter.java index c2b6dc4..a38c550 100644 --- a/examples/spring-boot-example/src/main/java/org/clevercastle/helper/login/examples/springboot/springbootexample/UserModelRepositoryAdapter.java +++ b/examples/spring-boot-example/src/main/java/org/clevercastle/helper/login/examples/springboot/springbootexample/UserModelRepositoryAdapter.java @@ -1,10 +1,10 @@ package org.clevercastle.helper.login.examples.springboot.springbootexample; import org.clevercastle.helper.login.User; -import org.clevercastle.helper.login.repository.rdsjpa.UserModelRepository; +import org.clevercastle.helper.login.repository.rdsjpa.IUserModelRepository; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository -public interface UserModelRepositoryAdapter extends UserModelRepository, JpaRepository { +public interface UserModelRepositoryAdapter extends IUserModelRepository, JpaRepository { } \ No newline at end of file