Entity
<aside>
@NoArgsConstructor
@Entity
@Getter
@Table(name = "member")
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "member_id")
private Long id;
private String name;
private String password;
@Column(unique = true)
private String email;
private String address;
@Enumerated(EnumType.STRING)
private MemberRole role;
@Builder
public Member(String name, String email, String password, String address, MemberRole role) {
this.name = name;
this.password = password;
this.email = email;
this.address = address;
this.role = role;
}
//Builder를 사용하여 member 생성
public static Member createMember(MemberFormDto memberFormDto, PasswordEncoder passwordEncoder) {
Member member = Member.builder()
.name(memberFormDto.getName())
.email(memberFormDto.getEmail())
.address(memberFormDto.getAddress())
.password(passwordEncoder.encode(memberFormDto.getPassword()))
.role(MemberRole.USER)
.build();
return member;
}
}
</aside>
Dto
<aside>
@NoArgsConstructor
@Data
public class MemberFormDto {
@NotBlank(message = "이름은 필수 입력 값입니다.")
private String name;
@NotEmpty(message = "이메일은 필수 입력 값입니다.")
@Email(message = "이메일 형식으로 입력해주세요.")
private String email;
@NotEmpty(message = "비밀번호는 필수 입력 값입니다.")
@Length(min = 4, max = 16, message = "비밀번호는 4자리 이상, 16자 이하로 입력해주세요.")
private String password;
private String address;
@Builder
public MemberFormDto(String name, String email, String password, String address) {
this.name = name;
this.email = email;
this.password = password;
this.address = address;
}
}
</aside>
Interface
<aside>
public interface MemberService {
Member saveMember(Member member);
void validateDuplicateMember(Member member);
UserDetails loadUserByUsername(String email) throws UsernameNotFoundException;
}
</aside>
Repository
<aside>
@Repository
public interface MemberRepository extends JpaRepository<Member, Long> {
Member findByEmail(String email);
}
</aside>
Service