문제 상황
•
어떤 것을 하려다가 문제가 발생했는가?
•
발생한 환경, 프로그램
•
발생한 문제(에러)
원인
•
예전 javaMailSender 템플릿에서는 반납일자를 따로 언급하지 않았고, 대여기간 확인하라는 멘트로 대신했다.
•
변경 이후 대여기간을 표시해주려고 메일 템플릿은 바꾸었으나, 내부 로직 수정이 이루어 지지 않았던게 문제였다.
현재 대여중인 대여기록을 가져와서, OverdueManager에 넘긴다.
OverdueManager에서, 우리가 설정 해놓은 시간에 따라
연체 임박(SOON_OVERDUE) 혹은 연체 상태(OVERDUE) 로 분류하고, 두 상태일 경우에는 유저에게 알람을 보낸다.
여기서 연체 임박일 경우에, LentExpirationImminentAlarm 객체를 생성하는데, 이 객체에는 expireDate 가 없고, OverdueManager에서 접근할 수 있는 정보인 연체일자(daysAfterFromExpireDate) 만 있다.
연체가아닌, 임박 이므로 반납일 하루전일 경우 -1, 이틀전일경우 -2 이런식으로 저장된다.
왜?
기존 로직
•
위에서 만든 Alarm 객체에서 overdueDays 를 가져오고, 메일에 보낼 context에 overdueDays 라는 이름으로 설정을 해준다.
메일 보내는 로직
•
수신인, 제목등을 설정하고,
•
핵심 부분은 templateEngine.process 부분이다.
•
template 위치를 지정해주고, context 를 넣어주면, javaMailSender 라이브러리로 만들어진 메시지를 보낸다.
◦
참고로 template 는 resouces 폴더에, html 로 이렇게 미리 만들어 놓고,
프로젝트 루트 디렉토리로부터 경로를 mailDto.getTemplate() 하면 가져오는것이다.
•
mailDto.getTemplate() 한 내용은 아래와 같다.
•
문제의 그 부분이다.
•
우리는 overdueDays로 context를 만들어줬는데, expireDate 를 찾고 있다. 따라서 빈 값으로 나올 수 밖에 없었다.
최종 해결
•
일단 LentExpirationImminentAlarm 객체에서, expireDate 를 계산하도록 했다.
◦
왜 이렇게 했는지는 리펙토링 브렌치에서 수정중에 있어서다 (위에 “왜” 참고)
나중에 아예 가져올때, expiredAt 을 가져와서 ActiveLentHistory 객체에서 반환하도록 바꾸는게 더 좋을것 같다.
•
context 를 expireDate 라는 이름으로 변경해줬다. (template에서 사용하는 변수명)
•
이제 날짜가 잘 나온다.
참고자료
없음