-
호텔은 여러 객실, 보유 자산을 가지고 있다.
-
객실은 객실 당 하루에 한 사람만 예약이 가능하다.
-
객실은 크기, 숙박비를 가진다.
-
예약은 객실, 고객의 이름, 고객의 전화번호, 예약 날짜를 가지고 있다.
-
전화 번호 제한(XXX-XXXX-XXXX) 정규 표현식 (선택)
-
예약 날짜 ****
날짜는 ISO 8601 형식으로 조합된 UTC 날짜 및 시간 예) 2016-10-27T17:13:40+00:00
-
-
고객은 이름, 전화번호, 소지금을 가진다.
- 고객 소지금보다 비싼 방은 예약 불가
-
호텔은 모든 예약 목록을 조회 할 수 있다.
-
고객은 자신의 예약 목록을 조회 할 수 있다.
- 예약 번호로 예약 내역을 조회한다
-
고객은 자신의 예약을 취소 할 수 있다.
-
고객이 호텔 예약 시에 예약 번호(id)를 반환 (uuid 활용)
- 고객이 호텔 예약에 성공하면 예약 번호(id)를 받는다.
- 고객이 예약 목록을 조회 시 예약 번호도 같이 조회 된다.
- 고객이 예약 취소 시 예약 번호를 통해 자신의 특정 예약을 취소한다.
- 고객
- 필드: 고객id, 이름, 고객의 전화번호, 소지금, 역할
- 메소드:
- 객실
- 필드: 객실id, 객실명, 고객id, 크기, 숙박비,
- 메소드:
- 호텔
- 필드: 보유 자산, 객실 Map
- 메소드:
- 예약
- 필드: 예약 번호(uuid), 객실id, 고객id, 예약 날짜
- 메소드:
- 장바구니
- 필드: 객실List
- 메소드:
- 패키지: data
- 도메인들이 저장되는 클래스. 데이터베이스같은 느낌
- 고객데이터
- 필드:
- 객실데이터
- 필드:
- 예약데이터
- 필드:
- 장바구니
- 필드:
- 패키지: domain
- 실제로 저장될 데이터들의 집합
- 고객
- 객실
- 호텔
- 예약
- 패키지: service
- 객체들이 서로 상호작용하는 코드를 적는 공간
이종렬
- 회원가입, 로그인
- 관리자(전체 예약 조회)
- 목록이 없으면 없다고 띄우기
- 마이페이지
- 목록이 없으면 없다고 띄우기
김한신 - Hotel /BasketService /RoomService /HotelLounge 엉뚱한데드가지말자;
- 객실 목록 조회
- 객실 예약
- 객실, 고객의 이름, 고객의 전화번호, 예약 날짜, 고객의 소지금, 예약번호
이예진
- 객실 예약 대기 목록(장바구니)
- 최종 결제
- 예약 대기 취소
강용수
- 고객의 예약 확정 목록 조회
- 예약 취소
-
시작 화면
[ 뇌정지 호텔 ] 1. 로그인 2. 회원가입
-
로그인 화면
-
로그인 화면
[ 뇌정지 호텔 ] 로그인 정보를 입력해 주세요. ID: (입력 후 엔터)
-
로그인 실패 화면
[ 뇌정지 호텔 ] 로그인 정보를 입력해 주세요. ID: test1 로그인 정보가 잘못되었습니다. ID: (입력 후 엔터)
-
-
로그아웃 화면
[ 뇌정지 호텔 - (고객 이름)님 ] 로그아웃 하시겠습니까? 1. 확인 //시작 화면으로 2. 취소 // 메인 화면으로
-
회원가입 화면
-
ID 중복 화면
[ 뇌정지 호텔 ] 회원가입 정보를 입력해 주세요. ID: (입력 후 엔터) // 중복 입력일 시 이미 존재하는 ID입니다. 다른 ID를 입력해 주세요. ID: (입력 후 엔터)
-
폰 번호 형식 불일치 화면
[ 뇌정지 호텔 ] 회원가입 정보를 입력해 주세요. 전화번호를 다음 형식과 같이 입력해 주세요. (XXX-XXXX-XXXX) ID: test 이름: 이종렬 전화번호: 01012345678 // 정규 표현식을 안지켰을 때, 입력 형식이 올바르지 않습니다. 전화번호를 다음 형식과 같이 입력해 주세요. (XXX-XXXX-XXXX) 전화번호: (입력 후 엔터)
-
정상적인 입력 화면
[ 뇌정지 호텔 ] 회원가입 정보를 입력해 주세요. ID: test 이름: 이종렬 전화번호: 010-1234-5678 소지금: 10000000000000000000
-
-
고객 로그인 화면(또는, 회원가입 후)
[ 뇌정지 호텔 - (고객 이름)님 ] 서비스를 선택해 주세요. 1. 객실 예약 2. 객실 예약 취소 3. 객실 예약 대기 목록 // (장바구니: 예약이 아직 확정되지 않은 객실) 4. 마이 페이지 // (예약 확정된 객실 + 이름, 소지금, 번호 등등) 5. 로그아웃
-
관리자 로그인 화면
[ 뇌정지 호텔 - 관리자님 ] 서비스를 선택해 주세요. 1. 모든 예약 목록 조회 2. 로그아웃
-
관리자 모든 예약 목록 조회 화면
[ 뇌정지 호텔 - 관리자님 ] 현재 예약된 모든 객실을 조회합니다. - 101호 | ASDQ-4564-1234 | test1(이종렬) - 102호 | ASDQ-4564-1235 | test2(종렬이) - 103호 | ASDQ-4564-1236 | test3(렬종이) 1. 돌아가기
-
객실 예약(선택) 화면
-
객실 선택 화면
[ 뇌정지 호텔 - (고객 이름)님 ] 예약하실 객실을 선택해 주세요. 1. 101호 | 스위트 | W 10 | 예약 가능 2. 102호 | 스텐다드 | W 15 | 예약 완료 3. 103호 | 러브 | W 20 | 예약 가능 객실 번호: (입력 후 엔터)
-
객실 선택 확인 화면
[ 뇌정지 호텔 - (고객 이름)님 ] "101호 | 20평 | W 10 | 예약 가능" 선택하신 객실을 확인해 주세요. 1. 확인 2. 취소
-
객실 선택 성공 화면
[ 뇌정지 호텔 - (고객 이름)님 ] 해당 객실이 예약 대기 목록에 추가되었습니다. 3초 뒤에 메인 화면으로 이동합니다.
-
객실 선택 실패 화면
-
금액이 부족할 때
금액이 부족합니다. [ 뇌정지 호텔 - (고객 이름)님 ] 예약하실 객실을 선택해 주세요. 1. 101호 | 20평 | W 10 | 예약 가능 2. 102호 | 30평 | W 15 | 예약 완료 3. 103호 | 40평 | W 20 | 예약 가능 객실 번호: (입력 후 엔터)
-
이미 예약돼있을 때
이미 예약된 객실입니다. [ 뇌정지 호텔 - (고객 이름)님 ] 예약하실 객실을 선택해 주세요. 1. 101호 | 20평 | W 10 | 예약 가능 2. 102호 | 30평 | W 15 | 예약 완료 3. 103호 | 40평 | W 20 | 예약 가능 객실 번호: (입력 후 엔터)
-
없는 객실을 선택했을 때
잘못된 입력 정보입니다. [ 뇌정지 호텔 - (고객 이름)님 ] 예약하실 객실을 선택해 주세요. 1. 101호 | 20평 | W 10 | 예약 가능 2. 102호 | 30평 | W 15 | 예약 완료 3. 103호 | 40평 | W 20 | 예약 가능 객실 번호: (입력 후 엔터)
-
-
-
객실 예약 대기 목록 화면
[ 뇌정지 호텔 - (고객 이름)님 ] 선택하신 객실을 확인해주세요. - 101호 | 20평 | W 10 - 102호 | 30평 | W 15 - 103호 | 40평 | W 20 1. 예약 진행 2. 예약 제외 3. 돌아가기 // 메인 화면으로 이동
-
예약 진행
[ 뇌정지 호텔 - (고객 이름)님 ] - 101호 | 20평 | W 10 - 102호 | 30평 | W 15 - 103호 | 40평 | W 20 [ 총 금액 ] W 45 예약을 진행하시겠습니까? 1. 확인 2. 취소
[ 뇌정지 호텔 - (고객 이름)님 ] 예약이 성공적으로 진행되었습니다. 3초 뒤에 메인 화면으로 이동합니다.
[ 뇌정지 호텔 - (고객 이름)님 ] 금액이 부족하여 예약에 실패하였습니다. 3초 뒤에 메인 화면으로 이동합니다.
-
예약 제외
[ 뇌정지 호텔 - (고객 이름)님 ] 예약을 제외할 객실을 선택해주세요. 1. 101호 | 20평 | W 10 2. 102호 | 30평 | W 15 3. 103호 | 40평 | W 20 (2번 입력)
[ 뇌정지 호텔 - (고객 이름)님 ] 해당 객실을 예약 목록에서 제외하시겠습니까? "102호 | 30평 | W 15" 1. 확인 2. 취소
[ 뇌정지 호텔 - (고객 이름)님 ] 해당 객실이 예약 목록에서 제외되었습니다. 3초 뒤에 메인 화면으로 이동합니다.
-
-
객실 예약 취소 화면
[ 뇌정지 호텔 - (고객 이름)님 ] - 101호 | 20평 | W 10 | ABCD-1234-EFGH-5678 - 103호 | 40평 | W 20 | BBCD-1234-EFGH-5678 취소하실 예약 번호를 입력해주세요: (예약번호 입력 후 엔터)
[ 뇌정지 호텔 - (고객 이름)님 ] 예약번호: ABCD-1234-EFGH-5678 ("101호 | 20평 | W 10") 예약을 취소하시겠습니까? 1. 확인 2. 취소
[ 뇌정지 호텔 - (고객 이름)님 ] 예약이 성공적으로 취소되었습니다. 3초 뒤에 메인 화면으로 이동합니다.
-
마이페이지 화면
[ 뇌정지 호텔 - (고객 이름)님 ] ID: test 이름: 이종렬 전화번호: 010-1234-5678 소지금: 10000000000000000000 객실 예약 목록 - 101호 | 20평 | W 10 | ABCD-1234-EFGH-5678 - 103호 | 40평 | W 20 | BBCD-1234-EFGH-5678 1. 돌아가기
-
UI(입/출력)랑 비즈니스 로직(입출력에 관련된 코드를 제외한 모든 코드)은 분리시키기
-
하나의 클래스는 하나의 역할만 가진다
-
클래스 명은 대문자로 시작하여, 카멜 케이스를 지킨다.
-
변수명과 메소드명은 소문자로 시작하며, 카멜 케이스를 지킨다.
public class Customer { private String phoneNumber; public void getPhoneNumber(){...} }
-
메소드 명
은 웬만해선동사로 시작
하며, 이름만 봐도 어떤 동작을 하는 지쉽게 파악
할 수 있어야 한다.
- Github
- branch 전략(git flow)
- Pull Request
- Github Actions
- CI 용도(테스트 체크)
- 예시(영어로 통일)
Feat: 댓글 기능 추가
Test: 댓글 생성 기능 테스트케이스 추가
Refactor: getSomething() 메소드 리펙토링
Chore: 스프링 라이브러리 추가
- main
- develop
- feature/(기능)
-
id값이 아닌, 객체를 저장하는 방식으로 한다면 좋을까요?
-
객실 예약 취소 시
- 소지금 다시 돌아오도록
- 호텔 수익금 되돌아가도록
-
ReservationService와 BasketService에서 ReservationDatabase 객체를 따로 사용중 → 이를 하나의 객체로 설정해줄 필요가 있음
- Config 클래스를 작성하거나
- 싱글톤 패턴을 사용하거나
public class Reservation { private String uuid; private int roomId; private String customerId; private LocalDateTime dateTime; } //////////// public class Reservation { private String uuid; private Room room; private Customer customer; private LocalDateTime dateTime; }
-
입력하는 란에입력:
이라고 띄우면 더 좋을 듯- 안하기로 통일
-
잘못된 값을 입력받을 경우, 프로그램을 종료시킬 것인지 아니면 재입력을 받을 것인지
- 지금 당장은 프로그램이 종료되도록 진행
- 재입력을 받을 수 있는 방안 생각해보기
-
InputView 클래스에서 화면마다 입력값을 받을 수 있는 메소드를 각각 생성
- 단, 번호로 입력받는 화면은 범위를 주어지는 형식으로
-
로그인은 ID만 입력
-
고객 데이터를 미리 만들기
- 손님 3명, 관리자 1명
-
고객마다 권한을 정한다
- 관리자: 프로그램이 시작할 때 관리자 계정 생성
- 손님: 회원가입하는 고객
-
고객의 권한마다 보여지는 화면이 다르게 한다
-
객실 예약할 때, 여러 개를 한 번에 예약 할 수 있도록
- 장바구니처럼
-
장바구니에 담을 때는 예약 번호를 안매김
- 간단하게 1번 2번 등으로 매김
-
최종 예약 시, 방 하나당 하나의 예약 번호 설정
-
필수 요구사항: 객실은 객실 당 하루에 한 사람만 예약이 가능하다. → ??
-
방이나 예약한게 없다면, 조회 목록에서 없다고 표시하기
-
방 정보 출력 시, 문자열 간격 맞춰주기
- 안함
-
README.md 추가
- isReserved
- 싱글톤 패턴
- 리팩토링