Spring/spring_old

06. service logic 구현

slow333 2023. 1. 20. 12:02

mapstore에서 구성한 내용을 DI를 통해 spring에서 주입 받아(DI) 이를 사용해서 서비스를 구현

실제 DI 때에는 구현체는 없고 interface만으로 구현하여 유연성을 갖음

실제 서비스에서 사용하는 class로 map store보다 세부적인 내용을 구현

@Service("clubService")
public class ClubServiceLogic implements ClubService {

  // 인터페이스만 정의함, 사용 시점에 spring에서 구현 객체를 생성해서 DI해줌
  private ClubStore clubStore;

  public ClubServiceLogic(ClubStore clubStore) {
    this.clubStore = clubStore;
    // clubStore를 implement하는 것이 한개 뿐이라 ClubMapStore를 DI함
    // 만약 한개 이상 이면 Qualifier annotation id를 통해 구분 가능함
  }
  /** 이렇게 생성하게 되면 관계가 tight 하다고  함
  public ClubServiceLogic() {
    this.clubStore = new ClubMapStore();
  }
*/
  @Override
  public String registerClub(ClubCdo club) {
    Club newClub = new Club(club.getName(), club.getIntro());
    newClub.checkValidation();
    return clubStore.create(newClub);
  }

  @Override
  public List<Club> findClubsByName(String clubName) {
    return clubStore.findByName(clubName);
  }

  @Override
  public Optional<Club> findClubById(String id) {
    return clubStore.findById(id);
  }

  @Override
  public List<Club> findClubsByNameContaining(String name) {
    if (clubStore.findByNameContaining(name).size() == 0) {
      System.out.println("찾는 이름이 포함된 클럽이 없습니다.");
    }
    return clubStore.findByNameContaining(name);
  }

  @Override
  public List<Club> findAll() {
    return clubStore.findAll();
  }

  @Override
  public void modifyClub(String clubId, NameAndValueList nameAndValueList) {
    Optional<Club> foundedClub = clubStore.findById(clubId);
    if (foundedClub.isEmpty()) {
      throw new CannotFindException("그런 아이디를 갖는 클럽은 없습다. ID : "+ clubId);
    }
    foundedClub.ifPresent(club -> club.modifyValues(nameAndValueList));
    clubStore.update(foundedClub.get()); // optional에서 값을 찾아 와야함 get() 필요
  }

  @Override
  public void removeClub(String clubId) {
    if(!clubStore.exists(clubId)){
      throw new CannotFindException("그런 클럽 ID는 없어요 ID: "+clubId);
    }
    clubStore.delete(clubId);
  }

  @Override
  public boolean exists(String clubId) {
    return clubStore.exists(clubId);
  }
}
@Service("memberService")
public class MemberServiceLogic implements MemberService {

  private MemberStore memberStore;

  @Autowired
  public MemberServiceLogic(MemberStore memberStore) {
    this.memberStore = memberStore;
    // memberStore를 implement하는 것이 한개 뿐이라 MemberMapStore를 DI함
//    만약 한개 이상 이면 Qualifier annotation id를 통해 구분 가능함
  }

  @Override
  public String registerMember(MemberCdo mbCdo) {
    if (memberStore.findByEmail(mbCdo.getEmail()).isPresent()) {
      throw new CannotFindException("이미 member의 이메일이 있습니다"+mbCdo.getEmail());
    }
    Member newMember =
            new Member(mbCdo.getEmail(), mbCdo.getName(), mbCdo.getBirthDay(), mbCdo.getNickName(),mbCdo.getBirthDay());
    memberStore.create(newMember);
    return newMember.getId();
  }

  @Override
  public Optional<Member> findMemberById(String memberId) {
    if (memberStore.findById(memberId).isEmpty()) {
      throw new CannotFindException("member service  없는 id : " + memberId);
    }
    return memberStore.findById(memberId);
  }

  @Override
  public Optional<Member> findMemberByEmail(String memberEmail) {
    if (memberStore.findById(memberEmail).isEmpty()) {
      throw new CannotFindException("member service 없는 email : " + memberEmail);
    }
    return memberStore.findByEmail(memberEmail);
  }

  @Override
  public List<Member> findMemberByName(String memberName) {
    return memberStore.findByName(memberName);
  }

  @Override
  public List<Member> findByMemberNameContaining(String memberName) {
      return memberStore.findByNameContaining(memberName);
  }

  @Override
  public List<Member> findAll() {
    return memberStore.findAll();
  }

  @Override
  public void modifyMember(String memberId, NameAndValueList nameAndValueList) {
    Optional<Member> modMember = memberStore.findById(memberId);
    if (memberStore.findById(memberId).isEmpty()) {
      throw new CannotFindException("member service 없는 ID : " + memberId);
    }
    modMember.ifPresent(member -> member.modifyValues(nameAndValueList));
    memberStore.update(modMember.get());
  }

  @Override
  public void removeMember(String memberId) {
    if (memberStore.findById(memberId).isEmpty()) {
      throw new CannotFindException("member service 없는 ID : " + memberId);
    }
    memberStore.delete(memberId);
  }

  @Override
  public boolean exists(String memberId) {
    return Optional.ofNullable(memberStore.findById(memberId)).isPresent();
  }
}

서비스 확인을 위해 App을 생성함(프로젝트의 시작 포인트)

public class TravelClubApp {
  public static void main(String[] args) {
    ApplicationContext context =
            new ClassPathXmlApplicationContext("applicationContext.xml");

    String[] beanNames = context.getBeanDefinitionNames();
//    System.out.println(appName);
    System.out.println(Arrays.toString(beanNames));
// club service 시험 +++++++++++++++++++++++++++++
    ClubCdo clubCdo = new ClubCdo("여행자 club 1번", "시험용 첫번째 여행 클럽 입니다.");
    ClubCdo clubCdo1 = new ClubCdo("여행자 클럼", "시험용 여행 클럽 입니다.");
    // spring에서 bean을 생성하고 bean을 찾아오는 과정
    ClubService clubService = context.getBean("clubService", ClubService.class);
    String clubId = clubService.registerClub(clubCdo);
    String clubId1 = clubService.registerClub(clubCdo1);
    System.out.println("club id : " + clubId);
    System.out.println("club 1 id : " + clubId1);

    Optional<Club> foundedClub = clubService.findClubById(clubId1);
    System.out.println("찾은 클럽 정보는 \n" +
            " " + foundedClub);
// member service 시험 +++++++++++++++++++++++++++++
    MemberCdo mCdo = new MemberCdo("abc@myvms.com", "kim dong", "010-2222-3333", "2005-01-14", "blooming flows");
    MemberCdo mCdo1 = new MemberCdo("abcdd@myvms.com", "kim jin", "010-2222-9999", "2005-11-11", "my vms");
    MemberService mService = context.getBean("memberService", MemberService.class);
    String memberId = mService.registerMember(mCdo);
    String memberId1 = mService.registerMember(mCdo1);

    Optional<Member> foundedMember = mService.findMemberById(memberId1);
    List<Member> foundedMemberName = mService.findByMemberNameContaining("kim");
    System.out.println();
    System.out.println("member's ID : "+ memberId);
    System.out.println("찾은 member info. : \n"+ foundedMember);
    System.out.println("findAll : "+mService.findAll());
    System.out.println("포함 이름 찾기 : " + foundedMemberName);
  }
}