From ab84b329fdb454b213f71c92d85e96baae2a644c Mon Sep 17 00:00:00 2001 From: pricelees Date: Sat, 27 Sep 2025 20:09:12 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20BaseEntity=20=EB=AA=A8=EB=93=88=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC=20=EB=B0=8F=20=EA=B8=B0=EC=A1=B4=20=EC=84=9C?= =?UTF-8?q?=EB=B9=84=EC=8A=A4=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/persistence/build.gradle.kts | 17 +++++++++++ .../common/persistence/AuditingBaseEntity.kt | 28 +++---------------- .../persistence/PersistableBaseEntity.kt | 25 +++++++++++++++++ .../infrastructure/persistence/AdminEntity.kt | 2 +- .../persistence/LoginHistoryEntity.kt | 4 +-- .../persistence/CanceledPaymentEntity.kt | 2 +- .../persistence/PaymentDetailEntity.kt | 4 +-- .../persistence/PaymentEntity.kt | 8 +++--- .../persistence/CanceledReservationEntity.kt | 2 +- .../persistence/ReservationEntity.kt | 2 +- .../persistence/ScheduleEntity.kt | 4 +-- .../infrastructure/persistence/StoreEntity.kt | 2 +- .../infrastructure/persistence/ThemeEntity.kt | 2 +- .../persistence/UserEntities.kt | 2 +- 14 files changed, 63 insertions(+), 41 deletions(-) create mode 100644 common/persistence/build.gradle.kts rename service/src/main/kotlin/com/sangdol/roomescape/common/entity/BaseEntity.kt => common/persistence/src/main/kotlin/com/sangdol/common/persistence/AuditingBaseEntity.kt (59%) create mode 100644 common/persistence/src/main/kotlin/com/sangdol/common/persistence/PersistableBaseEntity.kt diff --git a/common/persistence/build.gradle.kts b/common/persistence/build.gradle.kts new file mode 100644 index 00000000..c1afa586 --- /dev/null +++ b/common/persistence/build.gradle.kts @@ -0,0 +1,17 @@ +plugins { + id("org.springframework.boot") + kotlin("plugin.spring") + kotlin("plugin.jpa") +} + +dependencies { + implementation("org.springframework.boot:spring-boot-starter-data-jpa") + implementation("com.github.f4b6a3:tsid-creator:5.2.6") + + testRuntimeOnly("com.h2database:h2") + testImplementation("org.springframework.boot:spring-boot-starter-test") + testImplementation("io.kotest:kotest-runner-junit5:5.9.1") + testImplementation("io.kotest.extensions:kotest-extensions-spring:1.3.0") + + implementation(project(":common:utils")) +} diff --git a/service/src/main/kotlin/com/sangdol/roomescape/common/entity/BaseEntity.kt b/common/persistence/src/main/kotlin/com/sangdol/common/persistence/AuditingBaseEntity.kt similarity index 59% rename from service/src/main/kotlin/com/sangdol/roomescape/common/entity/BaseEntity.kt rename to common/persistence/src/main/kotlin/com/sangdol/common/persistence/AuditingBaseEntity.kt index 2d76c19c..a9fca2c7 100644 --- a/service/src/main/kotlin/com/sangdol/roomescape/common/entity/BaseEntity.kt +++ b/common/persistence/src/main/kotlin/com/sangdol/common/persistence/AuditingBaseEntity.kt @@ -1,14 +1,14 @@ -package com.sangdol.roomescape.common.entity +package com.sangdol.common.persistence -import jakarta.persistence.* +import jakarta.persistence.Column +import jakarta.persistence.EntityListeners +import jakarta.persistence.MappedSuperclass import org.springframework.data.annotation.CreatedBy import org.springframework.data.annotation.CreatedDate import org.springframework.data.annotation.LastModifiedBy import org.springframework.data.annotation.LastModifiedDate -import org.springframework.data.domain.Persistable import org.springframework.data.jpa.domain.support.AuditingEntityListener import java.time.LocalDateTime -import kotlin.jvm.Transient @MappedSuperclass @EntityListeners(AuditingEntityListener::class) @@ -31,23 +31,3 @@ abstract class AuditingBaseEntity( @LastModifiedBy var updatedBy: Long = 0L } - -@MappedSuperclass -abstract class PersistableBaseEntity( - @Id - @Column(name = "id") - private val _id: Long, - - @Transient - private var isNewEntity: Boolean = true -) : Persistable { - - @PostLoad - @PrePersist - fun markNotNew() { - isNewEntity = false - } - - override fun getId(): Long = _id - override fun isNew(): Boolean = isNewEntity -} diff --git a/common/persistence/src/main/kotlin/com/sangdol/common/persistence/PersistableBaseEntity.kt b/common/persistence/src/main/kotlin/com/sangdol/common/persistence/PersistableBaseEntity.kt new file mode 100644 index 00000000..73973f7c --- /dev/null +++ b/common/persistence/src/main/kotlin/com/sangdol/common/persistence/PersistableBaseEntity.kt @@ -0,0 +1,25 @@ +package com.sangdol.common.persistence + +import jakarta.persistence.* +import org.springframework.data.domain.Persistable +import kotlin.jvm.Transient + +@MappedSuperclass +abstract class PersistableBaseEntity( + @Id + @Column(name = "id") + private val _id: Long, + + @Transient + private var isNewEntity: Boolean = true +) : Persistable { + + @PostLoad + @PrePersist + fun markNotNew() { + isNewEntity = false + } + + override fun getId(): Long = _id + override fun isNew(): Boolean = isNewEntity +} diff --git a/service/src/main/kotlin/com/sangdol/roomescape/admin/infrastructure/persistence/AdminEntity.kt b/service/src/main/kotlin/com/sangdol/roomescape/admin/infrastructure/persistence/AdminEntity.kt index 106775eb..9a5c61e2 100644 --- a/service/src/main/kotlin/com/sangdol/roomescape/admin/infrastructure/persistence/AdminEntity.kt +++ b/service/src/main/kotlin/com/sangdol/roomescape/admin/infrastructure/persistence/AdminEntity.kt @@ -1,8 +1,8 @@ package com.sangdol.roomescape.admin.infrastructure.persistence +import com.sangdol.common.persistence.AuditingBaseEntity import jakarta.persistence.* import org.springframework.data.jpa.domain.support.AuditingEntityListener -import com.sangdol.roomescape.common.entity.AuditingBaseEntity @Entity @Table(name = "admin") diff --git a/service/src/main/kotlin/com/sangdol/roomescape/auth/infrastructure/persistence/LoginHistoryEntity.kt b/service/src/main/kotlin/com/sangdol/roomescape/auth/infrastructure/persistence/LoginHistoryEntity.kt index 8a64442f..84a88708 100644 --- a/service/src/main/kotlin/com/sangdol/roomescape/auth/infrastructure/persistence/LoginHistoryEntity.kt +++ b/service/src/main/kotlin/com/sangdol/roomescape/auth/infrastructure/persistence/LoginHistoryEntity.kt @@ -1,10 +1,10 @@ package com.sangdol.roomescape.auth.infrastructure.persistence +import com.sangdol.common.persistence.PersistableBaseEntity +import com.sangdol.roomescape.common.dto.PrincipalType import jakarta.persistence.* import org.springframework.data.annotation.CreatedDate import org.springframework.data.jpa.domain.support.AuditingEntityListener -import com.sangdol.roomescape.common.dto.PrincipalType -import com.sangdol.roomescape.common.entity.PersistableBaseEntity import java.time.LocalDateTime @Entity diff --git a/service/src/main/kotlin/com/sangdol/roomescape/payment/infrastructure/persistence/CanceledPaymentEntity.kt b/service/src/main/kotlin/com/sangdol/roomescape/payment/infrastructure/persistence/CanceledPaymentEntity.kt index b5a92c3d..4db2e14d 100644 --- a/service/src/main/kotlin/com/sangdol/roomescape/payment/infrastructure/persistence/CanceledPaymentEntity.kt +++ b/service/src/main/kotlin/com/sangdol/roomescape/payment/infrastructure/persistence/CanceledPaymentEntity.kt @@ -1,8 +1,8 @@ package com.sangdol.roomescape.payment.infrastructure.persistence +import com.sangdol.common.persistence.PersistableBaseEntity import jakarta.persistence.Entity import jakarta.persistence.Table -import com.sangdol.roomescape.common.entity.PersistableBaseEntity import java.time.LocalDateTime import java.time.OffsetDateTime diff --git a/service/src/main/kotlin/com/sangdol/roomescape/payment/infrastructure/persistence/PaymentDetailEntity.kt b/service/src/main/kotlin/com/sangdol/roomescape/payment/infrastructure/persistence/PaymentDetailEntity.kt index 3039d052..0e06f775 100644 --- a/service/src/main/kotlin/com/sangdol/roomescape/payment/infrastructure/persistence/PaymentDetailEntity.kt +++ b/service/src/main/kotlin/com/sangdol/roomescape/payment/infrastructure/persistence/PaymentDetailEntity.kt @@ -1,8 +1,8 @@ package com.sangdol.roomescape.payment.infrastructure.persistence -import jakarta.persistence.* -import com.sangdol.roomescape.common.entity.PersistableBaseEntity +import com.sangdol.common.persistence.PersistableBaseEntity import com.sangdol.roomescape.payment.infrastructure.common.* +import jakarta.persistence.* @Entity @Table(name = "payment_detail") diff --git a/service/src/main/kotlin/com/sangdol/roomescape/payment/infrastructure/persistence/PaymentEntity.kt b/service/src/main/kotlin/com/sangdol/roomescape/payment/infrastructure/persistence/PaymentEntity.kt index 969dc52b..48aa5587 100644 --- a/service/src/main/kotlin/com/sangdol/roomescape/payment/infrastructure/persistence/PaymentEntity.kt +++ b/service/src/main/kotlin/com/sangdol/roomescape/payment/infrastructure/persistence/PaymentEntity.kt @@ -1,13 +1,13 @@ package com.sangdol.roomescape.payment.infrastructure.persistence +import com.sangdol.common.persistence.PersistableBaseEntity +import com.sangdol.roomescape.payment.infrastructure.common.PaymentMethod +import com.sangdol.roomescape.payment.infrastructure.common.PaymentStatus +import com.sangdol.roomescape.payment.infrastructure.common.PaymentType import jakarta.persistence.Entity import jakarta.persistence.EnumType import jakarta.persistence.Enumerated import jakarta.persistence.Table -import com.sangdol.roomescape.common.entity.PersistableBaseEntity -import com.sangdol.roomescape.payment.infrastructure.common.PaymentMethod -import com.sangdol.roomescape.payment.infrastructure.common.PaymentStatus -import com.sangdol.roomescape.payment.infrastructure.common.PaymentType import java.time.OffsetDateTime @Entity diff --git a/service/src/main/kotlin/com/sangdol/roomescape/reservation/infrastructure/persistence/CanceledReservationEntity.kt b/service/src/main/kotlin/com/sangdol/roomescape/reservation/infrastructure/persistence/CanceledReservationEntity.kt index ae71243f..81832831 100644 --- a/service/src/main/kotlin/com/sangdol/roomescape/reservation/infrastructure/persistence/CanceledReservationEntity.kt +++ b/service/src/main/kotlin/com/sangdol/roomescape/reservation/infrastructure/persistence/CanceledReservationEntity.kt @@ -1,10 +1,10 @@ package com.sangdol.roomescape.reservation.infrastructure.persistence +import com.sangdol.common.persistence.PersistableBaseEntity import jakarta.persistence.Entity import jakarta.persistence.EnumType import jakarta.persistence.Enumerated import jakarta.persistence.Table -import com.sangdol.roomescape.common.entity.PersistableBaseEntity import java.time.LocalDateTime @Entity diff --git a/service/src/main/kotlin/com/sangdol/roomescape/reservation/infrastructure/persistence/ReservationEntity.kt b/service/src/main/kotlin/com/sangdol/roomescape/reservation/infrastructure/persistence/ReservationEntity.kt index 99fe9890..0bccb252 100644 --- a/service/src/main/kotlin/com/sangdol/roomescape/reservation/infrastructure/persistence/ReservationEntity.kt +++ b/service/src/main/kotlin/com/sangdol/roomescape/reservation/infrastructure/persistence/ReservationEntity.kt @@ -1,10 +1,10 @@ package com.sangdol.roomescape.reservation.infrastructure.persistence +import com.sangdol.common.persistence.AuditingBaseEntity import jakarta.persistence.Entity import jakarta.persistence.EnumType import jakarta.persistence.Enumerated import jakarta.persistence.Table -import com.sangdol.roomescape.common.entity.AuditingBaseEntity @Entity @Table(name = "reservation") diff --git a/service/src/main/kotlin/com/sangdol/roomescape/schedule/infrastructure/persistence/ScheduleEntity.kt b/service/src/main/kotlin/com/sangdol/roomescape/schedule/infrastructure/persistence/ScheduleEntity.kt index b6a2c984..e4a29126 100644 --- a/service/src/main/kotlin/com/sangdol/roomescape/schedule/infrastructure/persistence/ScheduleEntity.kt +++ b/service/src/main/kotlin/com/sangdol/roomescape/schedule/infrastructure/persistence/ScheduleEntity.kt @@ -1,12 +1,12 @@ package com.sangdol.roomescape.schedule.infrastructure.persistence +import com.sangdol.common.persistence.PersistableBaseEntity +import com.sangdol.roomescape.common.util.MdcPrincipalId import jakarta.persistence.* import org.springframework.data.annotation.CreatedBy import org.springframework.data.annotation.CreatedDate import org.springframework.data.annotation.LastModifiedDate import org.springframework.data.jpa.domain.support.AuditingEntityListener -import com.sangdol.roomescape.common.entity.PersistableBaseEntity -import com.sangdol.roomescape.common.util.MdcPrincipalId import java.time.LocalDate import java.time.LocalDateTime import java.time.LocalTime diff --git a/service/src/main/kotlin/com/sangdol/roomescape/store/infrastructure/persistence/StoreEntity.kt b/service/src/main/kotlin/com/sangdol/roomescape/store/infrastructure/persistence/StoreEntity.kt index 27a97f6f..83c851f1 100644 --- a/service/src/main/kotlin/com/sangdol/roomescape/store/infrastructure/persistence/StoreEntity.kt +++ b/service/src/main/kotlin/com/sangdol/roomescape/store/infrastructure/persistence/StoreEntity.kt @@ -1,8 +1,8 @@ package com.sangdol.roomescape.store.infrastructure.persistence +import com.sangdol.common.persistence.AuditingBaseEntity import jakarta.persistence.* import org.springframework.data.jpa.domain.support.AuditingEntityListener -import com.sangdol.roomescape.common.entity.AuditingBaseEntity @Entity @EntityListeners(AuditingEntityListener::class) diff --git a/service/src/main/kotlin/com/sangdol/roomescape/theme/infrastructure/persistence/ThemeEntity.kt b/service/src/main/kotlin/com/sangdol/roomescape/theme/infrastructure/persistence/ThemeEntity.kt index 7c99a10c..730987c2 100644 --- a/service/src/main/kotlin/com/sangdol/roomescape/theme/infrastructure/persistence/ThemeEntity.kt +++ b/service/src/main/kotlin/com/sangdol/roomescape/theme/infrastructure/persistence/ThemeEntity.kt @@ -1,7 +1,7 @@ package com.sangdol.roomescape.theme.infrastructure.persistence +import com.sangdol.common.persistence.AuditingBaseEntity import jakarta.persistence.* -import com.sangdol.roomescape.common.entity.AuditingBaseEntity @Entity @Table(name = "theme") diff --git a/service/src/main/kotlin/com/sangdol/roomescape/user/infrastructure/persistence/UserEntities.kt b/service/src/main/kotlin/com/sangdol/roomescape/user/infrastructure/persistence/UserEntities.kt index dfe78608..89d3c1fc 100644 --- a/service/src/main/kotlin/com/sangdol/roomescape/user/infrastructure/persistence/UserEntities.kt +++ b/service/src/main/kotlin/com/sangdol/roomescape/user/infrastructure/persistence/UserEntities.kt @@ -1,7 +1,7 @@ package com.sangdol.roomescape.user.infrastructure.persistence +import com.sangdol.common.persistence.AuditingBaseEntity import jakarta.persistence.* -import com.sangdol.roomescape.common.entity.AuditingBaseEntity @Entity @Table(name = "users")