인정이애옹 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
    }
}

예약 가능 시간대 진행 중. 기초 데이터 가공 중..