[4]. MailMilkDashBoard 레포지터리&엔티티 테스트

7767 단어 SpringbootSpringboot

흐흐..드디어 우유관련해서 엔티티를 작성하고 값이 잘 들어가는지 확인을 해볼것이다.

public class CustomerEntity {

    //고객 아이디
    @Id
    @Pattern(regexp = "^([\\w\\.\\_\\-])*[a-zA-Z0-9]+([\\w\\.\\_\\-])*([a-zA-Z0-9])+([\\w\\.\\_\\-])+@([a-zA-Z0-9]+\\.)+[a-zA-Z0-9]{2,8}$", message = "올바른 이메일을 입력 해주셔야 합니다.") //이메일 검증 정규식
    private String email;

    //비밀번호
    @NotBlank(message = "비밀번호를 입력해주세요.")
    private String password;

    //핸드폰 번호
    @Pattern(regexp = "^\\d{3}-\\d{3,4}-\\d{4}$", message = "올바른 핸든폰 번호를 입력 해주셔야 합니다.") //휴대폰번호 검증 정규식
    @Column(name = "phone_number")
    private String phoneNumber;

    //계약기간
    @Column(name = "contract_period")
    private Date contractPeriod;

    //연체기간
    @Column(name = "delinquency_period")
    private Date delinquencyPeriod;

    //가입날짜
    @Column(name = "join_date")
    private Date joinDate;

    //탈퇴날짜
    @Column(name = "withdrawal_date")
    private Date withdrawalDate;

    //비고
    private String note;

    //고객정보로 우유정보를 불러오기 위해 참조
    @OneToMany(mappedBy = "customer", fetch = FetchType.EAGER)
    private List<MilkEntity> milkEntityList = new ArrayList<MilkEntity>();
}

고객 엔티티이다. 이메일과 전화번호에 validation을 적용한다.
이메일과 비밀번호는 결국 정규식으로 검증한다. 몇개의 필드들도 공백이나 null 등을 허용하지 않는다 설정한다.
@Colum으로 테이블에 들어있는 컬럼과 이름을 맞춰준다. properties에서 카멜 표기법을 스네이크 표기법으로 바꿔서 매칭하는게 있었던걸로 기억하는데 그냥 내가 지정해줬다.


이제 고객정보를 저장하는 테스트 코드를 작성해서 확인해보자!!!

오.. 성공적이다. 그럼 테이블에도 잘 들어갔을까?

아주 잘 들어갔다.

그럼 이번에는 validation이 잘 작동하나 보자

이메일 형식을 틀리게 했다.

엄청나게 긴 에러가 발생했다. 하지만 이메일 형식이 맞지 않아 에러가 난거라고 친절하게 message로 알려주고 있다. 여기서 메시지는 내가 엔티티에서 설정했다.

전화번호를 틀려보겠다.

희희.. 잘 작동한다.


배달원 엔티티이다.

public class DeliveryEntity {

    //배달원 아이디
    @Id
    @Pattern(regexp = "^([\\w\\.\\_\\-])*[a-zA-Z0-9]+([\\w\\.\\_\\-])*([a-zA-Z0-9])+([\\w\\.\\_\\-])+@([a-zA-Z0-9]+\\.)+[a-zA-Z0-9]{2,8}$", message = "올바른 이메일을 입력 해주셔야 합니다.") //이메일 검증 정규식
    @Column(name = "deliver_email")
    private String deliverEmail;

    //비밀번호
    @NotBlank(message = "비밀번호를 입력해주세요.")
    private String password;

    //배달원 이름
    @NotBlank
    private String name;

    // 배달원 핸드폰 번호
    @Pattern(regexp = "^\\d{3}-\\d{3,4}-\\d{4}$", message = "올바른 핸든폰 번호를 입력 해주셔야 합니다.") //휴대폰번호 검증 정규식
    @Column(name = "phone_number")
    private String phoneNumber;

    //배달원 정보로 우유정보를 불러오기 위해 참조
    @OneToMany(mappedBy = "delivery", fetch = FetchType.EAGER)
    private List<MilkEntity> milkEntityList = new ArrayList<MilkEntity>();
}


여기서부터는 배달원 정보 테스트 코드이다. 고객정보 테스트랑 다를게 없을것이다.

테스트 코드는 성공 했다.

테이블에도 잘 들어갔다.

이제 이메일과 전화번호를 틀려보겠다. 테스트 코드는 customer랑 다를게 없으니 생략하고 에러가 뜨는지만 보겠다.



잘 돌아간다 이제 그럼 대망의 우유정보이다.
우유를 등록 해보자!

run!

테이블을 확인해보자

아주 오지게 잘 들어갔다.

우유정보 엔티티에도 validation을 적용했는데 그중 아파트 이름을 바꿔 에러를 넣어봐야겠다.

아파트 이름을 빼버렸다.


잘 작동한다. 이제 테스트 코드 두개를 작성 해봐야겠다.
1. 고객 이메일로 우유정보를 가지고 온다.
2. 배달원 이메일로 우유정보를 가지고 온다.

1번 sql을 짜보자

  select
      c.email,
      m.apartment_name,
      m.apartment_house_number_1,
      m.apartment_house_number_2,
      milk_manufacturer,
      m.milk_name,
      m.milk_count,
      m.week_date
  from customer c join milk_info m
                       on c.email = m.email
  where c.email = "[email protected]"

예상했던 정상적인 출력이다.

그럼 2번 sql을 짜보자

  select
      d.deliver_email,
      m.apartment_name,
      m.apartment_house_number_1,
      m.apartment_house_number_2,
      milk_manufacturer,
      m.milk_name,
      m.milk_count,
      m.week_date
  from deliverer d join milk_info m
                       on d.deliver_email = m.deliver_email
  where d.deliver_email = "[email protected]"

원하던 출력 결과가 나온다.


이제 레포지터리에 작성을 해보려고 한다.

처음에 아무생각 없이

	@Query( select
      c.email,
      m.apartment_name,
      m.apartment_house_number_1,
      m.apartment_house_number_2,
      milk_manufacturer,
      m.milk_name,
      m.milk_count,
      m.week_date
  from customer c join milk_info m
                       on c.email = m.email
  where c.email = :email)
    List<MilkEntity> getMilkInfo(@Param(email) String email);

추가하여 우유정보를 들고오려 했는데 생각해보니 엔티티에서 연관관계를 맺었고
n:1 양방향으로 설정해서 customer 객체안에 우유정보를 가져올 수 있었다.

그래서 레포지터리에 이메일로 사용자 정보를 검색하는 findByEmail(String email) 함수 추가하고 실행 해봤다.

결과는 잘 불러왔다.

이렇게 고객의 이름으로 우유정보를 출력할 수 있으니 고객이 우유를 총 몇개를 먹는지, 고객이 어떤 우유들을 먹고 있는지를 계산할 수 있을것이다.
(아니면 총 우유 개수, 리스트된 우유 목록은 @Query()로 구하는게 빠를지도 모르겠다.
내 생각에는 DB에서 연산하는게 더 좋을거 같다. 서버에 일을 줘서 계산하는것 보다는...)

고객이메일을 가지고 먹는 우유개수랑 우유 리스트를 출력하는 테스트 코드다.

정상적으로 출력이 된다. 이제 이런식으로 원하는 정보를 뽑으면 될것같다.

이제 나머지 부분 구현을 하고 서비스 부분을 구현 해야겠다.

좋은 웹페이지 즐겨찾기