p-4 day 18 예약 페이지 + 오류 수정

2024. 8. 21. 17:03· 프로젝트 & 포트폴리오/AI 기반 식당 예약 웹사이트 프로젝트

오늘 한 거 요약

예약 페이지(오늘 날짜부터 캘린더에서 날짜 선택, 식당 운영 시간에 따라 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
    }
}

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

 

 

 

'프로젝트 & 포트폴리오 > AI 기반 식당 예약 웹사이트 프로젝트' 카테고리의 다른 글

day 20 예약 페이지 프런트 작업 - 캘린더 디자인, 예약자 정보 추가  (0) 2024.08.23
day 19 회의  (0) 2024.08.22
p-4 day 18 회의  (0) 2024.08.21
p-4 day 17 게시판 및 예약 페이지  (0) 2024.08.20
p-4 day 17 회의  (0) 2024.08.20
'프로젝트 & 포트폴리오/AI 기반 식당 예약 웹사이트 프로젝트' 카테고리의 다른 글
  • day 20 예약 페이지 프런트 작업 - 캘린더 디자인, 예약자 정보 추가
  • day 19 회의
  • p-4 day 18 회의
  • p-4 day 17 게시판 및 예약 페이지
인정이애옹
인정이애옹
Show and prove !
인정이애옹
인정이 개발 일기
인정이애옹
전체
오늘
어제
  • 분류 전체보기 (476) N
    • 형상 관리 (2)
      • GIT (2)
    • WEB (65)
      • HTML5+CSS3 (10)
      • React (16)
      • JSP (39)
    • Languages (63)
      • JAVA (41)
      • JavaScript (5)
      • Python (17)
    • DATABASE (25)
    • Framework (29)
      • Spring (16)
      • Spring Boot (13)
    • Test framework (0)
      • TDD-JUnit5 (0)
      • Mockito (0)
      • Spring Test (0)
      • MockMvc (0)
    • 알고리즘 (20)
      • 자료구조 알고리즘 (20)
    • 자격증 (46)
      • 정보처리기사 (8)
      • 리눅스 마스터 2급 (13)
      • SQLD (7)
      • 웹디자인기능사 (11)
      • AICE BASIC (6)
      • 컴퓨터활용능력 1급 (0)
    • 프로젝트 & 포트폴리오 (107)
      • frontapp html+css 프로젝트 (2)
      • React 프로젝트 (0)
      • 자동 알약 공급기와 헬스케어 앱 (13)
      • 학생관리 + 묵찌빠 프로젝트 (13)
      • 포켓몬 도감 게시판 프로젝트 (12)
      • AI 기반 식당 예약 웹사이트 프로젝트 (47)
      • 상담 예약 사이트 (20)
      • chat gpt로 앱 & 앱사이트 만들기 (0)
    • 코딩테스트 (0)
      • 백준 (0)
      • 프로그래머스 (0)
    • 개발자 관련 독서 (2)
    • 오류 수정 기록 (0)
    • APP (6)
      • React Native (6)
    • 취업 준비 (1)
      • next.js로 이력서 제작 (1)

블로그 메뉴

  • 홈
  • 블로그 안내
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 태그
  • html
  • git
  • github
  • 텍스트
  • 웹표준

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
인정이애옹
p-4 day 18 예약 페이지 + 오류 수정
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.