Service는 Repository의 구현체로 Repository와 거의 비슷하다. 각 엔티티에 필요한 기본적인 메소드(save, find, delete)들을 구현하고 추가적으로 필요한 메소드들을 구현했다. 

 

<Member>

package com.project.karrot.service;

import com.project.karrot.domain.Member;
import com.project.karrot.repository.MemberRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.transaction.Transactional;
import java.util.List;
import java.util.Optional;

@Transactional
public class MemberService {

    private final MemberRepository memberRepository;

    public MemberService(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

    public Long join(Member member) {

        validateDuplicateMember(member); // 닉네임 중복 회원 검증

        memberRepository.save(member);

        memberRepository.flush();

        return member.getId();
    }

    private void validateDuplicateMember(Member member) {
        memberRepository.findByNickName(member.getNickName())
                .ifPresent(m -> {
                    throw new IllegalStateException("이미 존재하는 닉네임입니다.");
                });
    }

    public Optional<Member> find(Long memberId) {
        return memberRepository.findById(memberId);
    }

    public Optional<Member> findByName(String name) {
        return memberRepository.findByName(name);
    }

    public Optional<Member> findByNickName(String nickName) {
        return memberRepository.findByNickName(nickName);
    }

    public Member login(String email, String password) { // 이메일 - 패스워드 검증
        return memberRepository.findByEmail(email)
                .filter(member -> member.getPassword().equals(password))
                .orElse(null); }

    public List<Member> findMembers() {
        return memberRepository.findAll();
    }

    public void remove(Member member) {
        memberRepository.delete(member);
    }


}

'개인 프로젝트' 카테고리의 다른 글

3 - (5). 주요 코드 - View  (0) 2022.01.23
3 - (4). 주요 코드 - Controller  (0) 2022.01.23
3 - (2). 주요 코드 - Repository  (0) 2022.01.23
3 - (1). 주요 코드 - 엔티티  (0) 2022.01.23
2. ER Diagram  (0) 2022.01.23

+ Recent posts