From 363a0124eb1bc7c2e0253b567b929d7e22ab695e Mon Sep 17 00:00:00 2001 From: devxb Date: Wed, 27 Dec 2023 10:57:08 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=9C=A0=EC=A0=80=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=20=EB=B0=8F=20=EC=88=98=EC=A0=95=EC=8B=9C=EA=B0=84=EC=9D=84=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/net/teumteum/Application.java | 2 ++ .../teumteum/core/entity/TimeBaseEntity.java | 35 +++++++++++++++++++ .../java/net/teumteum/user/domain/User.java | 3 +- .../db/migration/V1__create_users.sql | 2 ++ .../user/domain/UserRepositoryTest.java | 1 + src/test/resources/schema.sql | 2 ++ 6 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 src/main/java/net/teumteum/core/entity/TimeBaseEntity.java diff --git a/src/main/java/net/teumteum/Application.java b/src/main/java/net/teumteum/Application.java index 499b5702..7f388f2d 100644 --- a/src/main/java/net/teumteum/Application.java +++ b/src/main/java/net/teumteum/Application.java @@ -2,7 +2,9 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; +@EnableJpaAuditing @SpringBootApplication public class Application { diff --git a/src/main/java/net/teumteum/core/entity/TimeBaseEntity.java b/src/main/java/net/teumteum/core/entity/TimeBaseEntity.java new file mode 100644 index 00000000..6df9785a --- /dev/null +++ b/src/main/java/net/teumteum/core/entity/TimeBaseEntity.java @@ -0,0 +1,35 @@ +package net.teumteum.core.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.MappedSuperclass; +import jakarta.persistence.PrePersist; +import jakarta.persistence.PreUpdate; +import java.time.Instant; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@MappedSuperclass +public abstract class TimeBaseEntity { + + @Column(name = "created_at", columnDefinition = "TIMESTAMP(6)", nullable = false, updatable = false) + protected Instant createdAt; + + @Column(name = "updated_at", columnDefinition = "TIMESTAMP(6)", nullable = false) + protected Instant updatedAt; + + @PrePersist + void prePersist() { + var now = Instant.now(); + + createdAt = createdAt != null ? createdAt : now; + updatedAt = updatedAt != null ? updatedAt : now; + } + + @PreUpdate + void preUpdate() { + updatedAt = updatedAt != null ? updatedAt : Instant.now(); + } + +} diff --git a/src/main/java/net/teumteum/user/domain/User.java b/src/main/java/net/teumteum/user/domain/User.java index a277a4a5..c0ccaab1 100644 --- a/src/main/java/net/teumteum/user/domain/User.java +++ b/src/main/java/net/teumteum/user/domain/User.java @@ -12,6 +12,7 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; +import net.teumteum.core.entity.TimeBaseEntity; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.util.Assert; @@ -19,7 +20,7 @@ @Entity(name = "users") @NoArgsConstructor @AllArgsConstructor -public class User { +public class User extends TimeBaseEntity { @Id @Column(name = "id") diff --git a/src/main/resources/db/migration/V1__create_users.sql b/src/main/resources/db/migration/V1__create_users.sql index 365ea07f..cbe3bac1 100644 --- a/src/main/resources/db/migration/V1__create_users.sql +++ b/src/main/resources/db/migration/V1__create_users.sql @@ -16,6 +16,8 @@ create table if not exists users( status enum('직장인','학생','취업준비생'), terms_of_service boolean not null, privacy_policy boolean not null, + created_at timestamp(6) not null, + updated_at timestamp(6) not null, primary key (id) ); diff --git a/src/test/java/net/teumteum/user/domain/UserRepositoryTest.java b/src/test/java/net/teumteum/user/domain/UserRepositoryTest.java index 765f8064..19ad6119 100644 --- a/src/test/java/net/teumteum/user/domain/UserRepositoryTest.java +++ b/src/test/java/net/teumteum/user/domain/UserRepositoryTest.java @@ -58,6 +58,7 @@ void Find_success_if_exists_user_id_input() { Assertions.assertThat(result) .isPresent() .usingRecursiveComparison() + .ignoringFields("value.createdAt", "value.updatedAt") .isEqualTo(Optional.of(existsUser)); } } diff --git a/src/test/resources/schema.sql b/src/test/resources/schema.sql index 365ea07f..cbe3bac1 100644 --- a/src/test/resources/schema.sql +++ b/src/test/resources/schema.sql @@ -16,6 +16,8 @@ create table if not exists users( status enum('직장인','학생','취업준비생'), terms_of_service boolean not null, privacy_policy boolean not null, + created_at timestamp(6) not null, + updated_at timestamp(6) not null, primary key (id) );