강의 기록/스프링 입문(김영한)

[스프링 입문] Section 3.회원 관리 예제: 회원 서비스 개발

momong'-' 2021. 3. 16. 15:03

Section 3

  • 비즈니스 요구사항 정리
  • 회원 도메인과 리포지토리 만들기
  • 회원 리포지토리 테스트 케이스 작성
  • 회원 서비스 개발
  • 회원 서비스 테스트

회원 서비스 개발

 

hello.hellospring.service

MemoruService.java

package hello.hellospring.service;

import java.util.List;
import java.util.Optional;

import javax.transaction.Transactional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;

@Transactional
public class MemberService {
	
	private final MemberRepository memberRepository;
	
	@Autowired
	public MemberService(MemberRepository memberRepository) {
		this.memberRepository = memberRepository;
	}
	
	/**
	 * 회원가입
	 */
	public Long join(Member member) {
		
		long start = System.currentTimeMillis();
		
		try {
			validateDuplicateMember(member); // 중복회원 검증
			
			memberRepository.save(member);
			return member.getId();
		}
		finally {
			long finish = System.currentTimeMillis();
			long timeMs = finish - start;
			System.out.println(timeMs);
		}
		
	}
	
	private void validateDuplicateMember(Member member) {
		/*
		Optional<Member> result = memberRepository.findByName(member.getName());
		result.ifPresent(m -> {
			throw new IllegalStateException("이미 존재하는 회원입니다.");
		});
		*/
		
		memberRepository.findByName(member.getName())
			.ifPresent(m -> {
				throw new IllegalStateException("이미 존재하는 회원입니다.");
			});
	}
	
	/**
	 * 전체 회원 조회
	 */
	public List<Member> findMembers() {
		return memberRepository.findAll();
	}
	
	public Optional<Member> findOne(Long memberId) {
		return memberRepository.findById(memberId);
	}
}