728x90
뛰슈의 멤버들을 관리하기 위해서 member 엔티티를 정의하였다.
JPA를 활용하여 데이터베이스를 관리하기 위해서 아래처럼 정의하였다.
@Getter
@Builder
@Entity
@AllArgsConstructor
@NoArgsConstructor
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotEmpty
@Column(length = 30)
private String memberId;
@Column(length = 10)
private String name;
private String password;
}
JPA사용을 위한 Repository를 지정
@Repository
public interface MemberJpaRepository extends JpaRepository<Member,Long> {
Optional<Member>findMemberByMemberId(String memberId);
Optional<Member>findMemberById(Long id);
}
Member를 저장하고, 찾고, 저장전 검증하기 위한 서비스 로직이다.
@Slf4j
@Service
public class MemberService {
private final MemberJpaRepository memberJpaRepository;//멤버 저장소
private static final String EMAIL_PATTERN = "^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9.-]+$";
private static final Pattern pattern = Pattern.compile(EMAIL_PATTERN);
@Autowired
public MemberService(MemberJpaRepository memberJpaRepository) {
this.memberJpaRepository = memberJpaRepository;
}
public SignUpResult save(SignUpDto memberDto){
if(memberJpaRepository.findMemberByMemberId(memberDto.getMemberId()).isPresent()){
return new SignUpResult("duplicatedId");
}
if(!isValidEmail(memberDto.getMemberId())){
return new SignUpResult("idValidation");
}
if(!memberDto.getPassWord().equals(memberDto.getCheckPassWord())){
return new SignUpResult("pwValidation");
}
Optional<Member> member = Optional.of(memberJpaRepository.save(Member.builder()
.memberId(memberDto.getMemberId())
.name(memberDto.getName())
.password(memberDto.getPassWord())
.build()));
log.info("멤버 저장 됨 {}",member.get().getId());
return new SignUpResult("true");
}
public Optional<Member> findById(Long id){
return memberJpaRepository.findMemberById(id);
}
public Optional<Member> findByName(String name){
return memberJpaRepository.findMemberByMemberId(name);
}
public boolean isValidEmail(String email) {
Matcher matcher = pattern.matcher(email);
return matcher.matches();
}
}
DTO 정의
Member 데이터에 직접적인 접근을 제한하기 위해서 정의하였다.
@Data
public class MemberDto {
Long id;
String name;
}
@Data
public class SignUpDto {
@NotEmpty
@Size(max = 30)
@Pattern(regexp = "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,6}$", message = "이메일 형식에 맞지 않습니다.")
private String memberId;
@NotEmpty
@Size(min = 5, message = "비밀번호는 최소 5자 이상이어야 합니다.")
private String passWord;
@NotEmpty
@Size(min = 5, message = "비밀번호는 최소 5자 이상이어야 합니다.")
private String checkPassWord;
@NotEmpty
@Size(max = 10)
private String name;
}
@Data
public class LoginDto {
@NotEmpty
@Size(max = 50)
@Pattern(regexp = "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,6}$", message = "이메일 형식에 맞지 않습니다.")
String memberId;
@NotEmpty
@Size(min = 5, message = "비밀번호는 최소 5자 이상이어야 합니다.")
String password;
}
728x90
'LikeLion🦁' 카테고리의 다른 글
뛰슈 - Board관리 (1) | 2023.08.17 |
---|---|
뛰슈 - LoginService (0) | 2023.08.14 |
떠나요~ 대천으로🏖️ (3) | 2023.08.01 |
뛰슈 - 기능명세서 작성하기 (1) | 2023.07.28 |
사자가 된 감자 5주차 (0) | 2023.05.22 |