GithubHelp home page GithubHelp logo

hotel's Introduction

Hotel

필수 요구 사항

  1. 호텔은 여러 객실, 보유 자산을 가지고 있다.

  2. 객실은 객실 당 하루에 한 사람만 예약이 가능하다.

  3. 객실은 크기, 숙박비를 가진다.

  4. 예약은 객실, 고객의 이름, 고객의 전화번호, 예약 날짜를 가지고 있다.

    1. 전화 번호 제한(XXX-XXXX-XXXX) 정규 표현식 (선택)

    2. 예약 날짜 ****

      날짜는 ISO 8601 형식으로 조합된 UTC 날짜 및 시간 예) 2016-10-27T17:13:40+00:00

  5. 고객은 이름, 전화번호, 소지금을 가진다.

    1. 고객 소지금보다 비싼 방은 예약 불가
  6. 호텔은 모든 예약 목록을 조회 할 수 있다.

  7. 고객은 자신의 예약 목록을 조회 할 수 있다.

    1. 예약 번호로 예약 내역을 조회한다
  8. 고객은 자신의 예약을 취소 할 수 있다.

  9. 고객이 호텔 예약 시에 예약 번호(id)를 반환 (uuid 활용)

    1. 고객이 호텔 예약에 성공하면 예약 번호(id)를 받는다.
    2. 고객이 예약 목록을 조회 시 예약 번호도 같이 조회 된다.
    3. 고객이 예약 취소 시 예약 번호를 통해 자신의 특정 예약을 취소한다.

도메인 추출

  • 고객
    • 필드: 고객id, 이름, 고객의 전화번호, 소지금, 역할
    • 메소드:
  • 객실
    • 필드: 객실id, 객실명, 고객id, 크기, 숙박비,
    • 메소드:
  • 호텔
    • 필드: 보유 자산, 객실 Map
    • 메소드:
  • 예약
    • 필드: 예약 번호(uuid), 객실id, 고객id, 예약 날짜
    • 메소드:
  • 장바구니
    • 필드: 객실List
    • 메소드:

  • 패키지: data
    • 도메인들이 저장되는 클래스. 데이터베이스같은 느낌
    • 고객데이터
      • 필드:
    • 객실데이터
      • 필드:
    • 예약데이터
      • 필드:
    • 장바구니
      • 필드:
  • 패키지: domain
    • 실제로 저장될 데이터들의 집합
    • 고객
    • 객실
    • 호텔
    • 예약
  • 패키지: service
    • 객체들이 서로 상호작용하는 코드를 적는 공간

기능 정리

이종렬

  • 회원가입, 로그인
  • 관리자(전체 예약 조회)
    • 목록이 없으면 없다고 띄우기
  • 마이페이지
    • 목록이 없으면 없다고 띄우기

김한신 - Hotel /BasketService /RoomService /HotelLounge 엉뚱한데드가지말자;

  • 객실 목록 조회
  • 객실 예약
    • 객실, 고객의 이름, 고객의 전화번호, 예약 날짜, 고객의 소지금, 예약번호

이예진

  • 객실 예약 대기 목록(장바구니)
    • 최종 결제
    • 예약 대기 취소

강용수

  • 고객의 예약 확정 목록 조회
  • 예약 취소

UI 설계

💡 [https://www.figma.com/file/0VLDIJYRu4hbZjn0HRVxuc/[내배캠-팀-프로젝트]-호텔?type=design&node-id=0-1&mode=design&t=O9JYNnC45VPoSPQE-0](https://www.figma.com/file/0VLDIJYRu4hbZjn0HRVxuc/%5B%EB%82%B4%EB%B0%B0%EC%BA%A0-%ED%8C%80-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%5D-%ED%98%B8%ED%85%94?type=design&node-id=0-1&mode=design&t=O9JYNnC45VPoSPQE-0)
  • 시작 화면

    [ 뇌정지 호텔 ]
    
    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. 돌아가기
    

클래스 정리

💡 [https://www.figma.com/file/0VLDIJYRu4hbZjn0HRVxuc/[내배캠-팀-프로젝트]-호텔?type=design&node-id=0-1&mode=design&t=CDqUG9IYZ1iiAAaX-0](https://www.figma.com/file/0VLDIJYRu4hbZjn0HRVxuc/%5B%EB%82%B4%EB%B0%B0%EC%BA%A0-%ED%8C%80-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%5D-%ED%98%B8%ED%85%94?type=design&node-id=0-1&mode=design&t=CDqUG9IYZ1iiAAaX-0)

Untitled


코드 컨밴션

  • UI(입/출력)랑 비즈니스 로직(입출력에 관련된 코드를 제외한 모든 코드)은 분리시키기

  • 하나의 클래스는 하나의 역할만 가진다

  • 클래스 명은 대문자로 시작하여, 카멜 케이스를 지킨다.

  • 변수명과 메소드명은 소문자로 시작하며, 카멜 케이스를 지킨다.

    public class Customer {
        private String phoneNumber;
    
    		public void getPhoneNumber(){...}
    }
  • 메소드 명은 웬만해선 동사로 시작하며, 이름만 봐도 어떤 동작을 하는 지 쉽게 파악할 수 있어야 한다.

협업 툴

  • Github
    • branch 전략(git flow)
    • Pull Request
  • Github Actions
    • CI 용도(테스트 체크)

Git 컨벤션

Untitled

  • 예시(영어로 통일)
    • 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 추가


TODO

  • isReserved
  • 싱글톤 패턴
  • 리팩토링

hotel's People

Contributors

phdljr avatar dlwls423 avatar emost22 avatar kimhanshin4 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.