From e6d056fc8a3bd610533e37e102a8965a12217795 Mon Sep 17 00:00:00 2001 From: "chosw1002@naver.com" Date: Sun, 11 Feb 2024 16:43:38 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20requirement=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gdsc/domain/member/domain/Member.java | 15 +++++- .../requirement/domain/Requirement.java | 51 +++++++++++++++++++ .../requirement/domain/RequirementStatus.java | 13 +++++ 3 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/gdschongik/gdsc/domain/requirement/domain/Requirement.java create mode 100644 src/main/java/com/gdschongik/gdsc/domain/requirement/domain/RequirementStatus.java diff --git a/src/main/java/com/gdschongik/gdsc/domain/member/domain/Member.java b/src/main/java/com/gdschongik/gdsc/domain/member/domain/Member.java index 5c41d7947..388ac8a17 100644 --- a/src/main/java/com/gdschongik/gdsc/domain/member/domain/Member.java +++ b/src/main/java/com/gdschongik/gdsc/domain/member/domain/Member.java @@ -3,14 +3,19 @@ import static com.gdschongik.gdsc.global.exception.ErrorCode.*; import com.gdschongik.gdsc.domain.common.model.BaseTimeEntity; +import com.gdschongik.gdsc.domain.requirement.domain.Requirement; import com.gdschongik.gdsc.global.exception.CustomException; +import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; import jakarta.persistence.Enumerated; +import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.OneToOne; import java.time.LocalDateTime; import lombok.AccessLevel; import lombok.Builder; @@ -54,6 +59,10 @@ public class Member extends BaseTimeEntity { private String univEmail; + @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) + @JoinColumn(name = "requirement_id") + private Requirement requirement; + @Builder(access = AccessLevel.PRIVATE) private Member( MemberRole role, @@ -67,7 +76,8 @@ private Member( String nickname, String oauthId, LocalDateTime lastLoginAt, - String univEmail) { + String univEmail, + Requirement requirement) { this.role = role; this.status = status; this.name = name; @@ -80,13 +90,16 @@ private Member( this.oauthId = oauthId; this.lastLoginAt = lastLoginAt; this.univEmail = univEmail; + this.requirement = requirement; } public static Member createGuestMember(String oauthId) { + Requirement requirement = Requirement.createInstance(); return Member.builder() .oauthId(oauthId) .role(MemberRole.GUEST) .status(MemberStatus.NORMAL) + .requirement(requirement) .build(); } diff --git a/src/main/java/com/gdschongik/gdsc/domain/requirement/domain/Requirement.java b/src/main/java/com/gdschongik/gdsc/domain/requirement/domain/Requirement.java new file mode 100644 index 000000000..03546ccd9 --- /dev/null +++ b/src/main/java/com/gdschongik/gdsc/domain/requirement/domain/Requirement.java @@ -0,0 +1,51 @@ +package com.gdschongik.gdsc.domain.requirement.domain; + +import static com.gdschongik.gdsc.domain.requirement.domain.RequirementStatus.*; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Requirement { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "requirement_id") + private Long id; + + @Enumerated(EnumType.STRING) + private RequirementStatus univStatus; + + @Enumerated(EnumType.STRING) + private RequirementStatus discordStatus; + + @Enumerated(EnumType.STRING) + private RequirementStatus paymentStatus; + + @Builder(access = AccessLevel.PRIVATE) + private Requirement( + RequirementStatus univStatus, RequirementStatus discordStatus, RequirementStatus paymentStatus) { + this.univStatus = univStatus; + this.discordStatus = discordStatus; + this.paymentStatus = paymentStatus; + } + + public static Requirement createInstance() { + return Requirement.builder() + .univStatus(PENDING) + .discordStatus(PENDING) + .paymentStatus(PENDING) + .build(); + } +} diff --git a/src/main/java/com/gdschongik/gdsc/domain/requirement/domain/RequirementStatus.java b/src/main/java/com/gdschongik/gdsc/domain/requirement/domain/RequirementStatus.java new file mode 100644 index 000000000..902298e4f --- /dev/null +++ b/src/main/java/com/gdschongik/gdsc/domain/requirement/domain/RequirementStatus.java @@ -0,0 +1,13 @@ +package com.gdschongik.gdsc.domain.requirement.domain; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum RequirementStatus { + PENDING("PENDING"), + VERIFIED("VERIFIED"); + + private final String value; +} From 2d9ab25658e872f387446fe1753ae5c6f31e512e Mon Sep 17 00:00:00 2001 From: "chosw1002@naver.com" Date: Sun, 11 Feb 2024 19:47:54 +0900 Subject: [PATCH 2/2] =?UTF-8?q?refactor:=20requirement=EB=A5=BC=20embeddab?= =?UTF-8?q?le=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gdsc/domain/member/domain/Member.java | 10 +++------- .../domain/requirement/domain/Requirement.java | 15 +++------------ 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/gdschongik/gdsc/domain/member/domain/Member.java b/src/main/java/com/gdschongik/gdsc/domain/member/domain/Member.java index 388ac8a17..ff7bd86ab 100644 --- a/src/main/java/com/gdschongik/gdsc/domain/member/domain/Member.java +++ b/src/main/java/com/gdschongik/gdsc/domain/member/domain/Member.java @@ -5,17 +5,14 @@ import com.gdschongik.gdsc.domain.common.model.BaseTimeEntity; import com.gdschongik.gdsc.domain.requirement.domain.Requirement; import com.gdschongik.gdsc.global.exception.CustomException; -import jakarta.persistence.CascadeType; import jakarta.persistence.Column; +import jakarta.persistence.Embedded; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; import jakarta.persistence.Enumerated; -import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.OneToOne; import java.time.LocalDateTime; import lombok.AccessLevel; import lombok.Builder; @@ -59,8 +56,7 @@ public class Member extends BaseTimeEntity { private String univEmail; - @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) - @JoinColumn(name = "requirement_id") + @Embedded private Requirement requirement; @Builder(access = AccessLevel.PRIVATE) @@ -94,7 +90,7 @@ private Member( } public static Member createGuestMember(String oauthId) { - Requirement requirement = Requirement.createInstance(); + Requirement requirement = Requirement.createRequirement(); return Member.builder() .oauthId(oauthId) .role(MemberRole.GUEST) diff --git a/src/main/java/com/gdschongik/gdsc/domain/requirement/domain/Requirement.java b/src/main/java/com/gdschongik/gdsc/domain/requirement/domain/Requirement.java index 03546ccd9..865293a35 100644 --- a/src/main/java/com/gdschongik/gdsc/domain/requirement/domain/Requirement.java +++ b/src/main/java/com/gdschongik/gdsc/domain/requirement/domain/Requirement.java @@ -2,28 +2,19 @@ import static com.gdschongik.gdsc.domain.requirement.domain.RequirementStatus.*; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; +import jakarta.persistence.Embeddable; import jakarta.persistence.EnumType; import jakarta.persistence.Enumerated; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; -@Entity +@Embeddable @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Requirement { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "requirement_id") - private Long id; - @Enumerated(EnumType.STRING) private RequirementStatus univStatus; @@ -41,7 +32,7 @@ private Requirement( this.paymentStatus = paymentStatus; } - public static Requirement createInstance() { + public static Requirement createRequirement() { return Requirement.builder() .univStatus(PENDING) .discordStatus(PENDING)