Skip to content

Commit

Permalink
Refactor: 회원가입 시 약관동의 및 유저유형 선택 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
yxhwxn committed Aug 7, 2024
1 parent 1660884 commit 338e8ee
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import jakarta.persistence.Id;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import lombok.AllArgsConstructor;
import lombok.Getter;
Expand All @@ -14,6 +15,9 @@ public class MemberRequestDTO {
@NoArgsConstructor
@AllArgsConstructor
public static class JoinDTO {

private TermsAgreeDTO termsAgree;

@NotBlank(message = "아이디를 입력해주세요")
@Id
private String userId;
Expand All @@ -32,8 +36,27 @@ public static class JoinDTO {
@NotBlank(message = "휴대폰 번호를 입력해주세요")
private String phone;

private String userType;

@NotBlank(message = "이메일 인증번호를 입력해주세요")
private String verificationCode;

}

@Getter
@NoArgsConstructor
@AllArgsConstructor
public static class TermsAgreeDTO {
@NotNull(message = "14세 이상 동의 여부를 선택해주세요")
private Boolean ageOver14Agree;

@NotNull(message = "서비스 이용 동의 여부를 선택해주세요")
private Boolean serviceUseAgree;

@NotNull(message = "개인정보 수집 및 이용 동의 여부를 선택해주세요")
private Boolean personalInfoAgree;

private Boolean marketingAgree; // 선택 사항
}

@Getter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.cmc.suppin.member.controller.dto.MemberRequestDTO;
import com.cmc.suppin.member.controller.dto.MemberResponseDTO;
import com.cmc.suppin.member.domain.Member;
import com.cmc.suppin.member.domain.TermsAgree;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;

Expand All @@ -11,13 +12,24 @@
@Component
public class MemberConverter {

public Member toEntity(MemberRequestDTO.JoinDTO request, PasswordEncoder encoder) {
public Member toMemberEntity(MemberRequestDTO.JoinDTO request, PasswordEncoder encoder) {
return Member.builder()
.userId(request.getUserId())
.name(request.getName())
.password(encoder.encode(request.getPassword()))
.email(request.getEmail())
.phoneNumber(request.getPhone())
.userType(request.getUserType())
.build();
}

public TermsAgree toTermsAgreeEntity(MemberRequestDTO.TermsAgreeDTO termsAgreeDTO, Member member) {
return TermsAgree.builder()
.ageOver14Agree(termsAgreeDTO.getAgeOver14Agree())
.serviceUseAgree(termsAgreeDTO.getServiceUseAgree())
.personalInfoAgree(termsAgreeDTO.getPersonalInfoAgree())
.marketingAgree(termsAgreeDTO.getMarketingAgree())
.member(member)
.build();
}

Expand Down
18 changes: 10 additions & 8 deletions src/main/java/com/cmc/suppin/member/domain/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public class Member extends BaseDateTimeEntity {
@Column(name = "member_id")
private Long id;

@OneToMany(mappedBy = "member")
@OneToMany(mappedBy = "member", cascade = CascadeType.ALL)
private List<Event> eventList = new ArrayList<>();

@Column(columnDefinition = "VARCHAR(30)", nullable = false)
Expand All @@ -50,13 +50,15 @@ public class Member extends BaseDateTimeEntity {
@Enumerated(EnumType.STRING)
private UserStatus status;

// 추가된 생성자
public Member(String name, String password, String email, String phoneNumber, UserRole role) {
this.name = name;
this.password = password;
this.email = email;
this.phoneNumber = phoneNumber;
this.role = role;
@Column(columnDefinition = "VARCHAR(50)", nullable = false)
private String userType;

@OneToMany(mappedBy = "member", cascade = CascadeType.ALL)
private List<TermsAgree> termsAgreeList = new ArrayList<>();

public void addTermsAgree(TermsAgree termsAgree) {
termsAgree.setMember(this);
this.termsAgreeList.add(termsAgree);
}

public boolean isDeleted() {
Expand Down
34 changes: 34 additions & 0 deletions src/main/java/com/cmc/suppin/member/domain/TermsAgree.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.cmc.suppin.member.domain;

import jakarta.persistence.*;
import lombok.*;

@Entity
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TermsAgree {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ManyToOne
@JoinColumn(name = "member_id", nullable = false)
private Member member;

@Column(nullable = false)
private Boolean ageOver14Agree;

@Column(nullable = false)
private Boolean serviceUseAgree;

@Column(nullable = false)
private Boolean personalInfoAgree;

@Column(nullable = true)
private Boolean marketingAgree;
}

Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.cmc.suppin.member.converter.MemberConverter;
import com.cmc.suppin.member.domain.EmailVerificationToken;
import com.cmc.suppin.member.domain.Member;
import com.cmc.suppin.member.domain.TermsAgree;
import com.cmc.suppin.member.domain.repository.EmailVerificationTokenRepository;
import com.cmc.suppin.member.domain.repository.MemberRepository;
import com.cmc.suppin.member.exception.MemberException;
Expand Down Expand Up @@ -62,9 +63,13 @@ public Member join(MemberRequestDTO.JoinDTO request) {
}

// DTO를 Entity로 변환
Member member = memberConverter.toEntity(request, passwordEncoder);
Member member = memberConverter.toMemberEntity(request, passwordEncoder);
member.setStatus(UserStatus.ACTIVE);

// 약관 동의 항목 처리
TermsAgree termsAgree = memberConverter.toTermsAgreeEntity(request.getTermsAgree(), member);
member.addTermsAgree(termsAgree);

// 회원 정보 저장
memberRepository.save(member);

Expand Down Expand Up @@ -167,7 +172,7 @@ private void saveVerificationToken(String email, String code) {
emailVerificationTokenRepository.deleteByEmail(email);
emailVerificationTokenRepository.save(verificationToken);
}


private Member getMember(Long memberId) {
return memberRepository.findByIdAndStatusNot(memberId, UserStatus.DELETED)
Expand Down

0 comments on commit 338e8ee

Please sign in to comment.