프로젝트 & 포트폴리오/AI 기반 식당 예약 웹사이트 프로젝트
p-4 day 18 예약 페이지 + 오류 수정
인정이애옹
2024. 8. 21. 17:03
오늘 한 거 요약
예약 페이지(오늘 날짜부터 캘린더에서 날짜 선택, 식당 운영 시간에 따라 30분 단위로 시간 선택, 인원수 1~10명까지 선택) , 오류 수정

환경 변수 APP_URL 과 APP_EMAIL_URL 추가하기!!
게시판 수정
admin 들어가서 freetalk 부분 개설

http://localhost:3002/api/board/config/freetalk
admin서버에 자유게시판이 만들어졌는지 확인

http://localhost:3001/board/config/freetalk
api서버에서도 자유게시판 잘 만들어졌는지 확인이 돼야지 리액트에서도 조회가 된다!

http://localhost:4000/board/write/freetalk
자유 게시판 잘 나온다!

예약 페이지 시작!
리액트
예약 페이지 생성!




예약 페이지 잘 나온다!
api 서버

식당 데이터 가공하기

콤마와 띄어쓰기 가공!

잘 분리 돼서 나온다! 가공 완료!!

char를 boolean 배열로 바꿔주기!
/**
* 식당 개별 정보 조회
* @param rstrId
* @return
*/
public Restaurant get(Long rstrId) {
// 2차 가공 필요
Restaurant item = repository.findById(rstrId).orElseThrow(RestaurantNotFoundException::new);
// 식당 이미지 바로 가져오기
// 추가 데이터 처리 -> 리뷰
// 추가 데이터 처리
addInfo(item);
return item;
}
// 예약 가능한 정보, 제한된 상품 정보, 중복 예약 방지
/**
* 추가 데이터 처리
* 1. 예약 가능 일
* 2. 예약 가능 요일
* 3. 예약 가능 시간대
* @param item
*/
private void addInfo(Restaurant item) {
// 운영 정보로 예약 가능 데이터 처리 S
String operInfo = item.getBsnsTmCn();
if (operInfo != null && StringUtils.hasText(operInfo.trim())) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm");
boolean[] yoils = new boolean[7]; // 0~6 true, false
for (String oper : operInfo.split(",\\s*")) {
String[] _oper = oper.split("\\s+");
String yoil = _oper[0];
String time = _oper[1];
System.out.printf("yoil=%s, time=%s%n", yoil, time);
if (yoil.equals("평일")) {
for (int i = 1; i < 6; i++) {
yoils[i] = true;
}
} else if (yoil.equals("매일")) {
for (int i = 0; i < yoils.length; i++) {
yoils[i] = true;
}
} else if (yoil.equals("토요일")) {
yoils[6] = true;
} else if (yoil.equals("일요일")) {
yoils[0] = true;
} else if (yoil.equals("주말")) {
yoils[0] = yoils[6] = true;
}
// 예약 가능 시간대 S
String[] _time = time.split("~");
LocalTime sTime = LocalTime.parse(_time[0], formatter);
LocalTime eTime = LocalTime.parse(_time[1], formatter);
List<LocalTime> avaliableTimes = new ArrayList<>();
Duration du = Duration.between(sTime, eTime);
int hours = (int)du.getSeconds() / (60 * 60);
for (int i = 0; i <= hours; i++) {
LocalTime t = sTime.plusHours(i);
// 예약 가능 시간에 + 1시간이 종료 시간을 지난 경우는 X
if (t.plusHours(1L).isAfter(eTime)) {
continue;
}
avaliableTimes.add(t);
}
avaliableTimes.forEach(System.out::println);
// 예약 가능 시간대 E
}
item.setAvailableWeeks(yoils);
List<LocalDate> availableDates = new ArrayList<>();
LocalDate startDate = LocalDate.now().plusDays(1L);
LocalDate endDate = startDate.plusMonths(1L).minusDays(1L);
Period period = Period.between(startDate, endDate);
int days = period.getDays() + 1;
for (int i = 0; i <= days; i++) {
LocalDate date = startDate.plusDays(i);
int yoil = date.getDayOfWeek().getValue() % 7;
if (yoils[yoil]) { // 영업 가능 요일인 경우
availableDates.add(date);
}
}
//item.setAvailableDates(availableDates);
} // endif
// 운영 정보로 예약 가능 데이터 처리 E
}
}
예약 가능 시간대 진행 중. 기초 데이터 가공 중..
