From 1f573e8c1728f6be9ce34ba4dbbe406a1bbdb946 Mon Sep 17 00:00:00 2001 From: sejeongsong Date: Tue, 14 Nov 2023 04:18:10 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20BaseEntity,=20WrappedId=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - id 관련 메서드(ex. 비교, null 검증) 재사용 --- .../java/com/foodymoody/be/BeApplication.java | 2 + .../com/foodymoody/be/common/BaseEntity.java | 17 ++++++ .../com/foodymoody/be/common/WrappedId.java | 55 +++++++++++++++++++ .../foodymoody/be/member/domain/Member.java | 14 +++-- 4 files changed, 82 insertions(+), 6 deletions(-) create mode 100644 be/src/main/java/com/foodymoody/be/common/BaseEntity.java create mode 100644 be/src/main/java/com/foodymoody/be/common/WrappedId.java diff --git a/be/src/main/java/com/foodymoody/be/BeApplication.java b/be/src/main/java/com/foodymoody/be/BeApplication.java index 2dd7db2d8..0ba39f37a 100644 --- a/be/src/main/java/com/foodymoody/be/BeApplication.java +++ b/be/src/main/java/com/foodymoody/be/BeApplication.java @@ -2,8 +2,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; @SpringBootApplication +@EnableJpaAuditing public class BeApplication { public static void main(String[] args) { diff --git a/be/src/main/java/com/foodymoody/be/common/BaseEntity.java b/be/src/main/java/com/foodymoody/be/common/BaseEntity.java new file mode 100644 index 000000000..244e844aa --- /dev/null +++ b/be/src/main/java/com/foodymoody/be/common/BaseEntity.java @@ -0,0 +1,17 @@ +package com.foodymoody.be.common; + +import java.time.LocalDateTime; +import javax.persistence.EmbeddedId; +import javax.persistence.MappedSuperclass; +import org.springframework.data.annotation.CreatedDate; + +@MappedSuperclass +public class BaseEntity { + + @EmbeddedId + protected WrappedId id; + + @CreatedDate + protected LocalDateTime createdAt; + +} diff --git a/be/src/main/java/com/foodymoody/be/common/WrappedId.java b/be/src/main/java/com/foodymoody/be/common/WrappedId.java new file mode 100644 index 000000000..8dbbfc380 --- /dev/null +++ b/be/src/main/java/com/foodymoody/be/common/WrappedId.java @@ -0,0 +1,55 @@ +package com.foodymoody.be.common; + +import io.jsonwebtoken.lang.Assert; +import java.io.Serializable; +import java.util.Objects; +import javax.persistence.Embeddable; + +@Embeddable +public class WrappedId implements Serializable { + + protected String id; + + public WrappedId() { + } + + public WrappedId(String id) { + Assert.notNull(id); + this.id = id; + } + + public String getId() { + return id; + } + + public boolean equals(String id) { + if (Objects.isNull(id)) { + return false; + } + return this.id.equals(id); + } + + public void assertEquals(String id) { + if (!equals(id)) { +// TODO 적절한 예외 메세지 추가 + throw new IllegalArgumentException(); + } + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof WrappedId)) { + return false; + } + WrappedId wrappedId = (WrappedId) o; + return Objects.equals(getId(), wrappedId.getId()); + } + + @Override + public int hashCode() { + return Objects.hash(getId()); + } +} diff --git a/be/src/main/java/com/foodymoody/be/member/domain/Member.java b/be/src/main/java/com/foodymoody/be/member/domain/Member.java index 620cbdec9..8ae33c5eb 100644 --- a/be/src/main/java/com/foodymoody/be/member/domain/Member.java +++ b/be/src/main/java/com/foodymoody/be/member/domain/Member.java @@ -1,22 +1,24 @@ package com.foodymoody.be.member.domain; +import com.foodymoody.be.common.BaseEntity; +import com.foodymoody.be.common.WrappedId; import com.foodymoody.be.common.exception.IncorrectMemberPasswordException; import com.foodymoody.be.common.exception.InvalidReconfirmPasswordException; import com.foodymoody.be.image.domain.Image; import com.foodymoody.be.mood.domain.Mood; import java.util.Objects; import javax.persistence.Entity; -import javax.persistence.Id; +import javax.persistence.EntityListeners; import javax.persistence.JoinColumn; import javax.persistence.OneToOne; import lombok.NoArgsConstructor; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; @Entity @NoArgsConstructor -public class Member { +@EntityListeners(AuditingEntityListener.class) +public class Member extends BaseEntity { - @Id - private String id; private String email; private String nickname; private String password; @@ -28,7 +30,7 @@ public class Member { private Mood mood; private Member(String id, String email, String nickname, String password, Mood mood) { - this.id = id; + this.id = new WrappedId(id); this.email = email; this.nickname = nickname; this.password = password; @@ -43,7 +45,7 @@ public static Member of(String id, String email, String nickname, String passwor } public String getId() { - return id; + return id.getId(); } public String getEmail() {