일전의 공부한 내용을 실제로 구현해보면서 공부해보고자 시작한 프로젝트다.

1. 프로젝트 시작

주제 선정

  • ‘캐치 테이블’을 모델로 간단한 프로그램 작성
    • 자주 사용해서 친숙한 프로그램을 만들어보기 위해서

      목표로 하는 것

  • 일전에 공부해 본 것을 직접 구현하면서 실제로 맞딱뜨리면서 검증하는 것
  • 직접 진행하면서 미처 고민하지 못했던 것들을 되짚어보는 시간을 갖는 것
  • 새롭게 공부하는 것을 그 때 그 때 변경하면서 더 나은 방향으로의 고민을 투사해 보는 것
  • 자바 뿐만 아니라 코틀린에 대한 친숙도를 높이는 것

목표로 하지 않는 것

  • 지나친 세부 구현을 하는 것

2. 요청 사항 작성

사용자 관리 및 로그인

  • 사용자를 등록한다.
    • 일반 사용자가 있다.
      • 사용자는 회원 가입을 할 수 있다.
        • 아이디는 영문, 숫자 포함 8글자에서 12글자이다.
        • 비밀번호는 영문, 숫자, 특수문자 필수 포함 12글자에서 20글자이다.
        • 이메일은 필수 항목이다.
        • 닉네임은 필수 항목이다.
    • 매장 사용자가 있다.
  • 사용자는 로그인 할 수 있다.
    • 사용자는 로그인이 5회 실패하면 30분간 로그인 시도를 할 수 없다.
    • 사용자의 로그인 기록은 별도 기록된다.
  • 사용자는 아이디를 찾을 수 있다.
    • 사용자 아이디는 이메일 정보로 조회한다.
    • 아이디 찾기 결과는 60% 마스킹되어 출력된다.
  • 사용자는 비밀번호를 찾을 수 있다.
    • 비밀번호 찾기는 아이디, 이메일을 대조하여 진행한다.
    • 임시 비밀번호를 발급하며, 변경된 비밀번호를 이메일로 발송한다.
    • 임시 비밀번호로 로그인한 경우 비밀번호 변경을 요구한다.
  • 사용자는 비밀번호를 변경할 수 있다.
  • 사용자는 정보를 변경할 수 있다.
    • 사용자는 비밀번호를 변경할 수 있다.
    • 사용자는 닉네임을 변경할 수 있다.
  • 사용자는 로그아웃을 할 수 있다.
  • 사용자는 탈퇴할 수 있다.

매장 및 메뉴 관리

  • 매장을 검색/조회할 수 있다.
    • 카테고리에 따라 검색할 수 있다.
    • 태그에 따라 검색할 수 있다.
    • 지리적 위치를 기반으로 기본 검색이 된다.
    • 미리 지정된 카테고리 내에서 선택하여 검색할 수 있다.
    • 미리 지정된 태그에 따라서 선택하여 검색할 수 있다.
    • 매장의 이름을 검색할 수 있다.
  • 매장을 단건 조회할 수 있다.
    • 매장의 별점을 확인할 수 있다.
    • 매장의 리뷰를 확인할 수 있다.
    • 매장의 기본 정보를 확인할 수 있다.
    • 매장의 메뉴를 확인할 수 있다.
  • 일반사용자는
    • 매장을 좋아요 할 수 있다.
    • 매장을 찜하기 할 수 있다.
  • 매장 사용자는
    • 매장을 등록한다.
    • 매장 정보를 편집할 수 있다.
      • 매장의 이름을 변경할 수 있다.
        • 매장의 이름은 최소 1글자에서 최대 20글자이다.
      • 매장의 위치를 설정할 수 있다.
        • 매장의 위치는 대한민국 이내로 설정할 수 있다.
      • 매장의 영업 시간을 설정할 수 있다.
        • 매장의 영업시간은 월~일, 00:00 ~ 23:59으로 선택할 수 있다.
        • 선택한 시간과 현재 날짜를 기반으로 영업 상태를 표시할 수 있다.
      • 매장의 소개를 편집할 수 있다.
        • 매장 소개는 0글자 초과 2000자 미만 이다.
    • 메뉴를 등록할 수 있다.
      • 이미지를 등록할 수 있다.
      • 메뉴명을 등록할 수 있다.
    • 메뉴를 편집할 수 있다.
    • 메뉴를 비공개할 수 있다.
    • 메뉴를 삭제할 수 있다.
    • 예약 시간 편집
      • 매장은 예약 가능한 날짜를 편집할 수 있다.
      • 예약 가능한 시간은 영업 시간에 따른다.
      • 매장 예약 스케쥴은 해당 달의 마지막에 일괄적으로 기본 값으로 생성된다.
      • 매장 예약 스케쥴은 공휴일을 고려하지 않는다.

사용자 예약 및 예약 내역

  • 사용자는 매장 방문을 예약할 수 있다.
  • 사용자는 매장 예약 시간 이후에 방문을 확정할 수 있다.
    • 만약 7일 이내에 확정하지 않으면 자동 확정 처리가 된다.
  • 사용자는 방문할 예약을 확인할 수 있다.
  • 사용자는 방문한 예약을 확인할 수 있다.
  • 사용자는 예약을 취소할 수 있다.
    • 사용자의 예약 취소는 방문 3일 전까지만 가능하다.
  • 매장 사용자는 예약을 취소할 수 있다.
    • 매장 사용자의 예약취소는 방문일시를 넘지 않으면 가능하다.
    • 예약 취소에 대한 사유를 작성해야만 한다.
      • 사유는 30글자 이상 200글자 미만이다.

리뷰 및 별점

  • 사용자는 방문한 식당에 리뷰와 별점을 제출할 수 있다.
    • 0.5 ~ 5.0이다.
    • 리뷰는 최소 30자 이상 500자 미만이다.
    • 리뷰에 사진을 올릴 수 있다.
    • 사진은 최소 0장에서 최대 5장이다.
  • 사용자는 방문한 식당에 리뷰와 별점을 수정할 수 있다.
    • 작성한지 일 주일 이내에 수정할 수 있다.
    • 삭제는 불가하다.
  • 사용자는 제출한 리뷰와 별점을 확인할 수 있다.
    • 기존 작성한 내용을 열람할 수 있으며 최신 순서대로 보인다.

포인트

  • 사용자는 방문 확정 후 포인트를 얻는다.
  • 사용자는 리뷰를 작성하면 포인트를 얻는다.
  • 사용자는 포인트 총 점을 확인할 수 있다.
  • 사용자는 포인드 획득 내역을 확인할 수 있다.