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..7176ca69 --- /dev/null +++ b/src/main/java/com/mr/global/entity/BaseCreatedDeletedEntity.java @@ -0,0 +1,24 @@ +package com.mr.global.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.MappedSuperclass; +import java.time.LocalDateTime; +import lombok.Getter; + +@Getter +@MappedSuperclass +public abstract class BaseCreatedDeletedEntity extends BaseCreatedEntity { + + @Column(name = "deleted_at") + protected LocalDateTime deletedAt; + + public void softDelete() { + 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/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..1ac6c810 --- /dev/null +++ b/src/main/java/com/mr/global/entity/BaseTimeDeletedEntity.java @@ -0,0 +1,24 @@ +package com.mr.global.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.MappedSuperclass; +import java.time.LocalDateTime; +import lombok.Getter; + +@Getter +@MappedSuperclass +public abstract class BaseTimeDeletedEntity extends BaseTimeEntity { + + @Column(name = "deleted_at") + protected LocalDateTime deletedAt; + + public void softDelete() { + 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 new file mode 100644 index 00000000..667aaa11 --- /dev/null +++ b/src/main/java/com/mr/global/entity/BaseTimeEntity.java @@ -0,0 +1,16 @@ +package com.mr.global.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.MappedSuperclass; +import java.time.LocalDateTime; +import lombok.Getter; +import org.springframework.data.annotation.LastModifiedDate; + +@Getter +@MappedSuperclass +public abstract class BaseTimeEntity extends BaseCreatedEntity { + + @LastModifiedDate + @Column(name = "updated_at") + protected LocalDateTime updatedAt; +}