- 예약 파트 겹치는 부분
- 예약 확인(최연호), 예약 취소(이일환)
- RESERVED, CANCELED?
- 취소 수수료 & 제한 어떻게 할지
- 카카오헤어샵은 2시간 전까지 전액 → 이후 10퍼 취소 수수료 → 예약 30분 후 노쇼 전액 수수료
- 2시간 전까지 취소 가능 / 2시간 전 이후 부터는 취소 아예 불가능 ← 확정
- entity → dto, dto → entity 어떻게 할지? → converter사용
- 사용자 id 어떻게 받아와지는지 → service에서 쓰는 법
- service 단에서 사용자 id로 검증하는 방법
- 예약 컬럼 추가 할지 말지
- 헤어샵 이름, 디자이너 이름, 직급, 메뉴 이름
- 컬럼으로 추가 안하면 join 여러번 해서 가져와야 되는 이슈
- join 여러번 해서 가져오기 ← 확정
- 예약가능한 날짜 구현
- 한달치의 data 생성 (맨처음)
- 하루가 지날때마다 (자정) data 생성
- 모든 디자이너 검색
- 30분 단위의 data 생성
- @Scheduled
- table
- Long id (bigint)
- Long hairshop_id (bigint)
- Long designer_id (bigint)
- LocalDate date (date)
- LocalTime start_time (date)
- boolean reserved (TYNYINT(1))
- 로직
- 예약 가능한 시간 요청
- 헤어샵, 날짜 parameter로 받는다.
- 헤어샵, 날짜를 이용해서 테이블 조회 (false인 row만) & client에게 return
- 예약 요청이 들어오면 해당 시간에 속하는 row는 “reserved column” true로 update

application.yml (test)
spring: datasource: # url: jdbc:h2:mem:test url: jdbc:h2:tcp://localhost/~/kokoa username: sa password: driver-class-name: org.h2.Driver jpa: generate-ddl: true open-in-view: false show-sql: true hibernate: ddl-auto: create properties: hibernate: format_sql: true dialect: org.hibernate.dialect.H2Dialect
- validation 체크같은 경우는 대부분 entity에서 구현
- 예약자, 헤어샵은 본인의 예약만 확인, 취소 가능해야 함
- jwt 토큰의 user_id와 검증 필요
- 예약자 별 예약 확인
- get /reservations/user
- 헤어샵 별 예약 확인
- 요청(request) jwt의 userId와 hairshop id(@PathVariable로 받음)를 가지고 있는 userId(DB를 통해 hairshop을 가지고있는 user 검색) 를 검증한다.
- get /reservations/hairshops/{}
- 예약자별 예약 취소
- patch /reservations/{}/user
- 해당 예약의 user_id가 jwt 토큰의 user_id와 일치하는지 검증
- 헤어샵별 예약 취소
- patch /reservations/{}/hairshop
- 해당 예약의 hairshop의 user_id가 jwt 토큰의 user_id와 일치하는지 검증
- 검증은 controller or service에서 진행 (미정)
- controller 단에서 하는 것이 나아 보임
- hairshop_id로 user_id 가져오는 메소드를 service에 생성
- 가져온 user_id로 controller에서 검증