From 65e555eb1afc372a6e6369068683572b3b168feb Mon Sep 17 00:00:00 2001 From: ownue Date: Wed, 8 Jul 2026 21:15:08 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20BaseEntity=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/{com.mr => com/mr}/Application.java | 4 ++- .../entity/BaseCreatedDeletedEntity.java | 27 ++++++++++++++++ .../mr/global/entity/BaseCreatedEntity.java | 20 ++++++++++++ .../global/entity/BaseTimeDeletedEntity.java | 32 +++++++++++++++++++ .../com/mr/global/entity/BaseTimeEntity.java | 25 +++++++++++++++ 5 files changed, 107 insertions(+), 1 deletion(-) rename src/main/java/{com.mr => com/mr}/Application.java (75%) create mode 100644 src/main/java/com/mr/global/entity/BaseCreatedDeletedEntity.java create mode 100644 src/main/java/com/mr/global/entity/BaseCreatedEntity.java create mode 100644 src/main/java/com/mr/global/entity/BaseTimeDeletedEntity.java create mode 100644 src/main/java/com/mr/global/entity/BaseTimeEntity.java diff --git a/src/main/java/com.mr/Application.java b/src/main/java/com/mr/Application.java similarity index 75% rename from src/main/java/com.mr/Application.java rename to src/main/java/com/mr/Application.java index 11783c70..75e73636 100644 --- a/src/main/java/com.mr/Application.java +++ b/src/main/java/com/mr/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 { @@ -10,4 +12,4 @@ public static void main(String[] args) { SpringApplication.run(Application.class, args); } -} \ No newline at end of file +} diff --git a/src/main/java/com/mr/global/entity/BaseCreatedDeletedEntity.java b/src/main/java/com/mr/global/entity/BaseCreatedDeletedEntity.java new file mode 100644 index 00000000..c8610609 --- /dev/null +++ b/src/main/java/com/mr/global/entity/BaseCreatedDeletedEntity.java @@ -0,0 +1,27 @@ +package com.mr.global.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.EntityListeners; +import jakarta.persistence.MappedSuperclass; +import lombok.Getter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.time.LocalDateTime; + +@Getter +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +public abstract class BaseCreatedDeletedEntity { + + @CreatedDate + @Column(name = "created_at", nullable = false, updatable = false) + protected LocalDateTime createdAt; + + @Column(name = "deleted_at") + protected LocalDateTime deletedAt; + + public void softDelete() { + this.deletedAt = LocalDateTime.now(); + } +} diff --git a/src/main/java/com/mr/global/entity/BaseCreatedEntity.java b/src/main/java/com/mr/global/entity/BaseCreatedEntity.java new file mode 100644 index 00000000..2d175af9 --- /dev/null +++ b/src/main/java/com/mr/global/entity/BaseCreatedEntity.java @@ -0,0 +1,20 @@ +package com.mr.global.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.EntityListeners; +import jakarta.persistence.MappedSuperclass; +import lombok.Getter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.time.LocalDateTime; + +@Getter +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +public abstract class BaseCreatedEntity { + + @CreatedDate + @Column(name = "created_at", nullable = false, updatable = false) + protected LocalDateTime createdAt; +} diff --git a/src/main/java/com/mr/global/entity/BaseTimeDeletedEntity.java b/src/main/java/com/mr/global/entity/BaseTimeDeletedEntity.java new file mode 100644 index 00000000..e99ba62e --- /dev/null +++ b/src/main/java/com/mr/global/entity/BaseTimeDeletedEntity.java @@ -0,0 +1,32 @@ +package com.mr.global.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.EntityListeners; +import jakarta.persistence.MappedSuperclass; +import lombok.Getter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.time.LocalDateTime; + +@Getter +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +public abstract class BaseTimeDeletedEntity { + + @CreatedDate + @Column(name = "created_at", nullable = false, updatable = false) + protected LocalDateTime createdAt; + + @LastModifiedDate + @Column(name = "updated_at") + protected LocalDateTime updatedAt; + + @Column(name = "deleted_at") + protected LocalDateTime deletedAt; + + public void softDelete() { + this.deletedAt = LocalDateTime.now(); + } +} diff --git a/src/main/java/com/mr/global/entity/BaseTimeEntity.java b/src/main/java/com/mr/global/entity/BaseTimeEntity.java new file mode 100644 index 00000000..119f5265 --- /dev/null +++ b/src/main/java/com/mr/global/entity/BaseTimeEntity.java @@ -0,0 +1,25 @@ +package com.mr.global.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.EntityListeners; +import jakarta.persistence.MappedSuperclass; +import lombok.Getter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.time.LocalDateTime; + +@Getter +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +public abstract class BaseTimeEntity { + + @CreatedDate + @Column(name = "created_at", nullable = false, updatable = false) + protected LocalDateTime createdAt; + + @LastModifiedDate + @Column(name = "updated_at") + protected LocalDateTime updatedAt; +} From cfda83b4823e89d69eabfa2f445d6119df4727ba Mon Sep 17 00:00:00 2001 From: ownue Date: Wed, 8 Jul 2026 21:59:16 +0900 Subject: [PATCH 2/2] =?UTF-8?q?refactor:=20BaseEntity=20=EC=83=81=EC=86=8D?= =?UTF-8?q?=20=EA=B5=AC=EC=A1=B0=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/BaseCreatedDeletedEntity.java | 21 +++++++-------- .../global/entity/BaseTimeDeletedEntity.java | 26 +++++++------------ .../com/mr/global/entity/BaseTimeEntity.java | 13 ++-------- 3 files changed, 20 insertions(+), 40 deletions(-) diff --git a/src/main/java/com/mr/global/entity/BaseCreatedDeletedEntity.java b/src/main/java/com/mr/global/entity/BaseCreatedDeletedEntity.java index c8610609..7176ca69 100644 --- a/src/main/java/com/mr/global/entity/BaseCreatedDeletedEntity.java +++ b/src/main/java/com/mr/global/entity/BaseCreatedDeletedEntity.java @@ -1,27 +1,24 @@ package com.mr.global.entity; import jakarta.persistence.Column; -import jakarta.persistence.EntityListeners; import jakarta.persistence.MappedSuperclass; -import lombok.Getter; -import org.springframework.data.annotation.CreatedDate; -import org.springframework.data.jpa.domain.support.AuditingEntityListener; - import java.time.LocalDateTime; +import lombok.Getter; @Getter @MappedSuperclass -@EntityListeners(AuditingEntityListener.class) -public abstract class BaseCreatedDeletedEntity { - - @CreatedDate - @Column(name = "created_at", nullable = false, updatable = false) - protected LocalDateTime createdAt; +public abstract class BaseCreatedDeletedEntity extends BaseCreatedEntity { @Column(name = "deleted_at") protected LocalDateTime deletedAt; public void softDelete() { - this.deletedAt = LocalDateTime.now(); + if (this.deletedAt == null) { + this.deletedAt = LocalDateTime.now(); + } + } + + public boolean isDeleted() { + return this.deletedAt != null; } } diff --git a/src/main/java/com/mr/global/entity/BaseTimeDeletedEntity.java b/src/main/java/com/mr/global/entity/BaseTimeDeletedEntity.java index e99ba62e..1ac6c810 100644 --- a/src/main/java/com/mr/global/entity/BaseTimeDeletedEntity.java +++ b/src/main/java/com/mr/global/entity/BaseTimeDeletedEntity.java @@ -1,32 +1,24 @@ package com.mr.global.entity; import jakarta.persistence.Column; -import jakarta.persistence.EntityListeners; import jakarta.persistence.MappedSuperclass; -import lombok.Getter; -import org.springframework.data.annotation.CreatedDate; -import org.springframework.data.annotation.LastModifiedDate; -import org.springframework.data.jpa.domain.support.AuditingEntityListener; - import java.time.LocalDateTime; +import lombok.Getter; @Getter @MappedSuperclass -@EntityListeners(AuditingEntityListener.class) -public abstract class BaseTimeDeletedEntity { - - @CreatedDate - @Column(name = "created_at", nullable = false, updatable = false) - protected LocalDateTime createdAt; - - @LastModifiedDate - @Column(name = "updated_at") - protected LocalDateTime updatedAt; +public abstract class BaseTimeDeletedEntity extends BaseTimeEntity { @Column(name = "deleted_at") protected LocalDateTime deletedAt; public void softDelete() { - this.deletedAt = LocalDateTime.now(); + if (this.deletedAt == null) { + this.deletedAt = LocalDateTime.now(); + } + } + + public boolean isDeleted() { + return this.deletedAt != null; } } diff --git a/src/main/java/com/mr/global/entity/BaseTimeEntity.java b/src/main/java/com/mr/global/entity/BaseTimeEntity.java index 119f5265..667aaa11 100644 --- a/src/main/java/com/mr/global/entity/BaseTimeEntity.java +++ b/src/main/java/com/mr/global/entity/BaseTimeEntity.java @@ -1,23 +1,14 @@ package com.mr.global.entity; import jakarta.persistence.Column; -import jakarta.persistence.EntityListeners; import jakarta.persistence.MappedSuperclass; +import java.time.LocalDateTime; import lombok.Getter; -import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; -import org.springframework.data.jpa.domain.support.AuditingEntityListener; - -import java.time.LocalDateTime; @Getter @MappedSuperclass -@EntityListeners(AuditingEntityListener.class) -public abstract class BaseTimeEntity { - - @CreatedDate - @Column(name = "created_at", nullable = false, updatable = false) - protected LocalDateTime createdAt; +public abstract class BaseTimeEntity extends BaseCreatedEntity { @LastModifiedDate @Column(name = "updated_at")