diff --git a/src/main/java/me/thinkcat/opic/practice/dto/request/UserRegisterRequest.java b/src/main/java/me/thinkcat/opic/practice/dto/request/UserRegisterRequest.java index 9edd64c..3a13777 100644 --- a/src/main/java/me/thinkcat/opic/practice/dto/request/UserRegisterRequest.java +++ b/src/main/java/me/thinkcat/opic/practice/dto/request/UserRegisterRequest.java @@ -1,11 +1,14 @@ package me.thinkcat.opic.practice.dto.request; import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; +import java.time.LocalDateTime; + @Getter @NoArgsConstructor @AllArgsConstructor @@ -20,4 +23,10 @@ public class UserRegisterRequest { private String password; private String email; + + @NotNull(message = "Terms agreement timestamp is required") + private LocalDateTime termsAgreedAt; + + @NotNull(message = "Privacy agreement timestamp is required") + private LocalDateTime privacyAgreedAt; } diff --git a/src/main/java/me/thinkcat/opic/practice/entity/User.java b/src/main/java/me/thinkcat/opic/practice/entity/User.java index c33095e..e81f64e 100644 --- a/src/main/java/me/thinkcat/opic/practice/entity/User.java +++ b/src/main/java/me/thinkcat/opic/practice/entity/User.java @@ -6,6 +6,8 @@ import org.hibernate.annotations.Where; import java.sql.Types; +import java.time.LocalDateTime; + @Entity @Table(name = "users") @@ -30,6 +32,12 @@ public class User extends BaseEntity { @Column(unique = true) private String email; + @Column + private LocalDateTime termsAgreedAt; + + @Column + private LocalDateTime privacyAgreedAt; + @JdbcTypeCode(Types.CHAR) @Column(name = "user_role_code", nullable = false, columnDefinition = "char(7)") @Builder.Default diff --git a/src/main/java/me/thinkcat/opic/practice/service/UserService.java b/src/main/java/me/thinkcat/opic/practice/service/UserService.java index 27a249e..b17651d 100644 --- a/src/main/java/me/thinkcat/opic/practice/service/UserService.java +++ b/src/main/java/me/thinkcat/opic/practice/service/UserService.java @@ -42,6 +42,8 @@ public UserResponse register(UserRegisterRequest request) { .username(request.getUsername()) .password(passwordEncoder.encode(request.getPassword())) .email(request.getEmail()) + .termsAgreedAt(request.getTermsAgreedAt()) + .privacyAgreedAt(request.getPrivacyAgreedAt()) .build(); User savedUser = userRepository.save(user); diff --git a/src/test/java/me/thinkcat/opic/practice/service/UserServiceTest.java b/src/test/java/me/thinkcat/opic/practice/service/UserServiceTest.java index 137ef2d..b0733ea 100644 --- a/src/test/java/me/thinkcat/opic/practice/service/UserServiceTest.java +++ b/src/test/java/me/thinkcat/opic/practice/service/UserServiceTest.java @@ -16,6 +16,8 @@ import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.crypto.password.PasswordEncoder; +import java.time.LocalDateTime; + import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.ArgumentMatchers.any; @@ -43,7 +45,7 @@ class UserServiceTest { given(userRepository.existsByUsername(any())).willReturn(false); assertThatThrownBy(() -> - userService.register(new UserRegisterRequest("user", password, "a@b.com"))) + userService.register(new UserRegisterRequest("user", password, "a@b.com", LocalDateTime.now(), LocalDateTime.now()))) .isInstanceOf(ValidationException.class); } @@ -55,7 +57,7 @@ class UserServiceTest { given(userRepository.save(any(User.class))).willReturn(saved); UserResponse response = userService.register( - new UserRegisterRequest("user", "Password1@", "user@example.com")); + new UserRegisterRequest("user", "Password1@", "user@example.com", LocalDateTime.now(), LocalDateTime.now())); assertThat(response.getUsername()).isEqualTo("user"); } @@ -71,7 +73,7 @@ class UserServiceTest { given(userRepository.existsByUsername(any())).willReturn(false); assertThatThrownBy(() -> - userService.register(new UserRegisterRequest("user", "Password1@", email))) + userService.register(new UserRegisterRequest("user", "Password1@", email, LocalDateTime.now(), LocalDateTime.now()))) .isInstanceOf(ValidationException.class); } }