회원 서비스는 회원 리포지토리와 도메인을 활용해 만드는 핵심 비즈니스 로직이다.
핵심 비즈니스 로직이라 해도 시작부터 복잡한 기능을 만들 순 없으니 간단한 기능을 먼저 만들 것이다.
회원 가입 기능을 먼저 만들어 볼 것이다.
// hello.hello_spring/service/MemberService.java
package hello.hello_spring.service;
import hello.hello_spring.domain.Member;
import hello.hello_spring.repository.MemberRepository;
import hello.hello_spring.repository.MemoryMemberRepository;
public class MemberService {
private final MemberRepository memberRepository = new MemoryMemberRepository();
public Long join(Member member) {
validateDuplicateMember(member);
memberRepository.save(member);
return member.getId();
}
private void validateDuplicateMember(Member member) {
memberRepository.findByName(member.getName())
.ifPresent(m -> {
throw new IllegalStateException("이미 존재하는 회원입니다.");
});
}
}
회원가입 기능 자체는 그냥 유저를 리포지토리에 저장하면 되지만 너무 단순하니 이미 존재하는 이름은 제한할 수 있도록 작성했다.
findByName을 사용해 같은 이름의 유저를 찾도록 하고 만약 존재한다면(ifPresent) IllegalStateException 를 통해 예외 처리를 했다.
// hello.hello_spring/service/MemberService.java
...
import java.util.List;
import java.util.Optional;
public List<Member> findMembers() {
return memberRepository.findAll();
}
public Optional<Member> findOne(Long memberId) {
return memberRepository.findById(memberId);
}
나머지 기능들도 단순한 return이지만 서비스에 추가했다.