날짜 생성 및 형식 지정 (LocalDateTime 이용)
https://covenant.tistory.com/255#google_vignette
JPAQueryFactory는 insert()가 없다고 함,,
Querydsl 써보고 싶었는데 아쉽게 되었다.
https://velog.io/@mu1616/Querydsl-%EC%9E%85%EB%AC%B8
static method에서는 DI가 되지 않음.
https://okky.kr/questions/368221
Table 'DB.hibernate_sequence' doesn't exist 에러
PK GenerationType을 올바르게 설정할 것.
https://yeonyeon.tistory.com/181
공휴일 계산
https://sehyeona.tistory.com/27
https://velog.io/@choicore/JAVA-%EC%9A%B0%EB%A6%AC%EB%82%98%EB%9D%BC-%EB%B2%95%EC%A0%95%EA%B3%B5%ED%9C%B4%EC%9D%BC-%EB%8C%80%EC%B2%B4%ED%9C%B4%EB%AC%B4%EC%9D%BC%EC%9D%84-%EC%B0%BE%EC%95%84%EB%B3%B4%EC%9E%90
querydsl 써보고 싶었는데, insert 지원 안 해서 이번 프로젝트에서는 적용이 어렵고, 다음 프로젝트에 사용해보는 것으로... ㅠ
공휴일 계산하는 로직이 전자정부프레임을 사용하지 못하는 이상, 결국 손수 날짜를 지정해줘야하는 면이 있다.
그래서 원래 만들어놓은 로직은 주말이면 ban 상태로 두는 것으로 설정해놨으나,
공휴일을 따로 입력하는 부분도 dto 및 로직에 포함시켰다.
사실 이럴거면, 그냥 DB에서 쿼리로 bulk insert하는 게 효율적인가 싶기도 하지만,
값을 엑셀에서 일일이 설정해주는 것보다는 이렇게 프로그램 만들어서 돌리는 게 실수가 적을 것 같다.
다음주에 테스트 코드 짜야겠다.
코드를 짜면서 동시에 테스트 코드 짜는 습관을 들여야하는데,,
다음 프로젝트에서는 도전해보겠음,,
//각 날짜마다 시작 시간부터 종료 시간까지 for문 돌면서 repository insert.
for (int i = 1; i <= lastDay; i++) {
for (int j = startHour; j <= endHour; j++) {
//entity 생성
ReservationDate reservationDate = ReservationDate.builder().build();
reservationDate.setRdTypeCd(rdType);
LocalDateTime localDateTime = LocalDateTime.of(year, month, i, 0, 0, 0);
String date = makeDate(localDateTime);
reservationDate.setDate(date);
reservationDate.setHour(j);
//주말이거나 공휴일이면 상태 ban
String day = getDay(localDateTime);
if (day.equals("토요일") || day.equals("일요일") || dto.getHolidays().contains(date.substring(0,10))) {
reservationDate.setRdState(ReservationDate.State.BAN);
} else {
//점심시간이면 상태 lunch
int lunchTime = 12;
if (j == lunchTime) {
reservationDate.setRdState(ReservationDate.State.LUNCH);
}
//영업 종료시간이면 상태 ban
else if (j == endHour) {
reservationDate.setRdState(ReservationDate.State.BAN);
}
else {
reservationDate.setRdState(ReservationDate.State.NORMAL);
}
}
repository.save(reservationDate);
}
}
}