Skip to content

Commit

Permalink
Merge pull request #8 from Leets-Official/fix/#5-회원가입-로그인-로직-오류수정
Browse files Browse the repository at this point in the history
[Fix] 회원가입 로그인 로직 오류수정
  • Loading branch information
seokjun01 authored Jan 3, 2025
2 parents 837bb35 + 5ff23f8 commit bb29a18
Show file tree
Hide file tree
Showing 13 changed files with 342 additions and 238 deletions.
Original file line number Diff line number Diff line change
@@ -1,20 +1,22 @@
package com.example.eatmate.app.domain.member.domain;

import com.example.eatmate.global.config.error.ErrorCode;
import com.example.eatmate.global.config.error.exception.CommonException;
import com.example.eatmate.global.config.error.exception.custom.InvalidMbtiException;
import com.fasterxml.jackson.annotation.JsonCreator;
import lombok.Getter;


@Getter
public enum Mbti {
ISTJ, ISFJ, INFJ, INTJ,
ISTP, ISFP, INFP, INTP,
ESTP, ESFP, ENFP, ENTP,
ESTJ, ESFJ, ENFJ, ENTJ;
ISTJ("ISTJ"), ISFJ("ISFJ"), INFJ("INFJ"), INTJ("INTJ"),
ISTP("ISTP"), ISFP("ISFP"), INFP("INFP"), INTP("INTP"),
ESTP("ESTP"), ESFP("ESFP"), ENFP("ENFP"), ENTP("ENTP"),
ESTJ("ESTJ"), ESFJ("ESFJ"), ENFJ("ENFJ"), ENTJ("ENTJ");

private final String mbtiType;

public static Mbti fromString(String mbti) {
Mbti(String mbtiType) {
this.mbtiType = mbtiType;
}

try {
return Mbti.valueOf(mbti.toUpperCase());
} catch (CommonException e) {
throw new InvalidMbtiException();
}
}
}
236 changes: 126 additions & 110 deletions src/main/java/com/example/eatmate/app/domain/member/domain/Member.java
Original file line number Diff line number Diff line change
@@ -1,121 +1,137 @@
package com.example.eatmate.app.domain.member.domain;


import jakarta.persistence.*;
import lombok.*;
import com.example.eatmate.global.common.BaseTimeEntity;

import jakarta.persistence.Column;
import jakarta.persistence.Embedded;
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;
import static com.example.eatmate.app.domain.member.domain.Role.USER;


@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Member extends BaseTimeEntity {
//OAuth로 받을 수 있는거만 false 해놓기
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long memberId;

@Column(nullable = true)
private String email;

@Column(nullable = true)
private String name;

@Column(nullable = true)
private String nickname;

@Column(nullable = true)
private Long studentNumber;

@Enumerated(EnumType.STRING)
@Column(nullable = true)
private Mbti mbti;

@Column(nullable = true)
private String phoneNumber;

@Column(nullable = true)
private Boolean isActive = true;

@Enumerated(EnumType.STRING)
@Column(nullable = true)
private Gender gender;

@Enumerated(EnumType.STRING)
@Column(nullable = true)
private Role role;

private String refreshToken;

@Embedded
private BirthDate birthDate; // yyyy-mm-dd 형식으로 받아야함

@Builder
public Member(Long memberId, String email, String name, String nickname, Long studentNumber, Mbti mbti,
String phoneNumber, BirthDate birthDate, Boolean isActive, Gender gender, Role role, String refreshToken) {
this.memberId = memberId;
this.email = email;
this.name = name;
this.nickname = nickname;
this.studentNumber = studentNumber;
this.mbti = mbti;
this.phoneNumber = phoneNumber;
this.birthDate = birthDate;
this.isActive = isActive;
this.gender = gender;
this.role = role;
this.refreshToken = refreshToken;
}

public static Member create(String email, String nickname, Mbti mbti, String phoneNumber, int year, int month,
int day, Gender gender, Long studentNumber) {
// BirthDate 객체 생성
BirthDate birthDate = BirthDate.of(year, month, day);

// Member 객체 생성
return Member.builder()
.email(email)
.nickname(nickname)
.mbti(mbti)
.phoneNumber(phoneNumber)
.birthDate(birthDate) // BirthDate 설정
.gender(gender)
.studentNumber(studentNumber)
.role(Role.USER) // 기본 역할 설정
.build();
}

public void updateRefreshToken(String updateRefreshToken) {
this.refreshToken = updateRefreshToken;
}

public void updateNickname(String nickname) {
this.nickname = nickname;
}

public void updatePhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}

public void updateStudentNumber(Long studentNumber) {
this.studentNumber = studentNumber;
}

public void updateGender(Gender gender) {
this.gender = gender;
}

public void activate() {
this.isActive = true;
}
//OAuth로 받을 수 있는거만 false 해놓기
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long memberId;

@Column(nullable = true)
private String email;

@Column(nullable = true)
private String name;

@Column (nullable = true)
private String nickname;

@Column(nullable = true, name = "student_number")
private Long studentNumber;

@Enumerated(EnumType.STRING)
@Column(nullable = true)
private Mbti mbti;

@Column(nullable = true)
private String phoneNumber;

@Column(nullable = true)
private Boolean isActive = true;

@Enumerated(EnumType.STRING)
@Column(nullable = true)
private Gender gender;

@Enumerated(EnumType.STRING)
@Column(nullable = true)
private Role role;

@Column(name = "refresh_token")
private String refreshToken;

@Embedded
private BirthDate birthDate; // yyyy-mm-dd 형식으로 받아야함

@Builder
private Member(Long memberId, String email, String name, String nickname, Long studentNumber, Mbti mbti, String phoneNumber, BirthDate birthDate, Boolean isActive, Gender gender, Role role, String refreshToken) {
this.memberId = memberId;
this.email = email;
this.name = name;
this.nickname = nickname;
this.studentNumber = studentNumber;
this.mbti = mbti;
this.phoneNumber = phoneNumber;
this.birthDate = birthDate;
this.isActive = isActive;
this.gender = gender;
this.role = role;
this.refreshToken = refreshToken;
}

public static Member create(String email, String nickname, Mbti mbti, String phoneNumber, int year, int month, int day, Gender gender, Long studentNumber) {
// BirthDate 객체 생성
BirthDate birthDate = BirthDate.of(year, month, day);


// Member 객체 생성
return Member.builder()
.email(email)
.nickname(nickname)
.mbti(mbti)
.phoneNumber(phoneNumber)
.birthDate(birthDate) // BirthDate 설정
.gender(gender)
.studentNumber(studentNumber)
.role(USER) // 기본 역할 설정
.build();
}

public void updateMemberDetails(String nickname, String phoneNumber, Long studentNumber, Gender gender, BirthDate birthDate, Mbti mbti) {
this.nickname = nickname;
this.phoneNumber = phoneNumber;
this.studentNumber = studentNumber;
this.gender = gender;
this.role = USER;
this.birthDate = birthDate;
this.isActive = true;
this.mbti = mbti;
}

public void updateRefreshToken(String updateRefreshToken) {
this.refreshToken = updateRefreshToken;
}
//
//
// public void updateNickname(String nickname) {
// this.nickname = nickname;
// }
//
//
// public void updatePhoneNumber(String phoneNumber) {
// this.phoneNumber = phoneNumber;
// }
//
// public void updateStudentNumber(Long studentNumber) {
// this.studentNumber = studentNumber;
// }
//
// public void updateGender(Gender gender) {
// this.gender = gender;
// }
//
// public void updateBirthDate(BirthDate birthDate) {
// this.birthDate = birthDate;
// }
//
// public void updateMbti(Mbti mbti) {
// this.mbti = mbti;
// }
//
// public void activate() {
// this.isActive = true;
// this.role = Role.USER;
// }


}
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
package com.example.eatmate.app.domain.member.domain.repository;

import java.util.Optional;

import com.example.eatmate.app.domain.member.domain.Member;
import org.springframework.data.jpa.repository.JpaRepository;

import com.example.eatmate.app.domain.member.domain.Member;
import java.util.Optional;

public interface MemberRepository extends JpaRepository<Member, Long> {
Optional<Member> findByEmail(String email);

Optional<Member> findByRefreshToken(String refreshToken);
Optional<Member> findByEmail(String email);
Optional<Member> findByRefreshToken(String refreshToken);
boolean existsByNickname(String nickname);
boolean existsByPhoneNumber(String phoneNumber);
boolean existsByStudentNumber(Long studentNumber);
}

Original file line number Diff line number Diff line change
@@ -1,23 +1,41 @@
package com.example.eatmate.app.domain.member.dto;


import com.example.eatmate.app.domain.member.domain.Gender;
import com.example.eatmate.app.domain.member.domain.Mbti;

import jakarta.validation.constraints.*;
import lombok.Getter;
import lombok.NoArgsConstructor;


@NoArgsConstructor
@Getter
public class MemberSignUpRequestDto {
//생년월일, 성별, 전화번호, MBTI, 학번, 닉네임, 프로필 사진 (일단 패스)
private String email;
private int Year;
private int Month;
private int Day;
private Gender gender;
private String phoneNumber;
private Mbti mbti;
private Long StudentNumber;
private String nickname;
//프로필 사진 추후 추가 예정
@Min(1900) @Max(2100)
private int year;

@Min(1) @Max(12)
private int month;

@Min(1) @Max(31)
private int day;

@NotNull(message = "성별 선택은 필수 항목입니다.")
private Gender gender;

@NotNull(message = "전화번호 입력은 필수입니다.")
@Pattern(regexp = "^010\\d{8}$", message = "전화번호는 010으로 시작하며 11자리 숫자여야 합니다.")
private String phoneNumber;

private Mbti mbti;

@NotNull(message = "학번 입력은 필수입니다.")
@Digits(integer = 9, fraction = 0, message = "9자리의 학번을 입력해주세요. 예 )202512345")
private Long studentNumber;

@Pattern(regexp = "^[가-힣a-zA-Z0-9]{2,12}$", message = "닉네임은 한글, 영문, 숫자로 이루어진 2~12자여야 하며 공백이 없어야 합니다.")
private String nickname;


}
Loading

0 comments on commit bb29a18

Please sign in to comment.