Skip to content

seungh22/ReservationProject

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

매장 예약 서비스

개발 환경 및 제약 사항

  • JDK 11 사용
  • Spring Boot 2.6.5 버전 사용
  • Gradle 기반 프로젝트
  • DB는 MySQL을 사용

필수 요구사항

  • 공통 인증 구현
  • 매장의 점장은 예약 서비스 앱에 상점을 등록한다.(매장 명, 상점위치, 상점 설명 등)
  • 매장을 등록하기 위해서는 파트너 회원 가입이 되어야 한다.(따로 승인 조건은 없으며 가입 후 바로 이용 가능)
  • 매장 이용자는 앱을 통해서 매장을 검색하고 상세 정보를 확인한다.
  • 매장의 상세 정보를 보고, 예약을 진행한다.(예약을 진행하기 위해서는 회원 가입이 필수적으로 이루어져야 한다.)
  • 서비스를 통해서 예약한 이후에, 예약 10분전에 도착하여 키오스크를 통해서 방문 확인을 진행한다.
  • 예약 및 사용 이후에 리뷰를 작성할 수 있다.
  • 서비스를 이용하는 도중 점장의 애로사항 발생
    • 사용자의 예약이 들어오면 점장이 승인/거절을 할 수 있는 기능을 요구

API 명세

회원

1. 회원가입(POST, "/user/signup")
  - 파라미터 : 사용자 아이디, 비밀번호, 이름, 핸드폰 번호, 멤버 타입(파트너 or 사용자)
  - 정책 : 사용자 아이디가 이미 존재하는 경우 실패 응답
  - 성공 응답 정보 : 사용자 아이디, 암호화된 비밀번호, 이름, 핸드폰 번호, 멤버 타입
2. 로그인(POST, "/user/signin")
  - 파라미터 : 사용자 아이디, 비밀번호
  - 정책 : 해당 아이디가 없는 경우, 비밀번호가 일치하지 않는 경우 실패 응답
  - 성공 응답 정보 : 해당 사용자의 JWT 토큰 정보
3. 회원 탈퇴(DELETE, "/user/{memberId}")
  - 파라미터 : 회원 번호
  - 정책 : 로그인 된 사용자가 아닌 경우, 회원 번호에 해당하는 사용자가 없는 경우,
          로그인한 사용자와 회원 번호에 해당하는 사용자의 아이디가 다른 경우,
          매장을 운영 중인 점장인 경우 실패 응답
  - 성공 응답 정보 : 성공 응답 메시지

매장

1. 매장 등록(POST, "/store/regist")
  - 파라미터 : 매장명, 주소, 설명, 전화번호, 오픈시간, 마감시간
  - 정책 : 점장 정보를 매장 엔티티에 저장, 점장 정보는 로그인한 사용자의 아이디를 이용,
          매장을 생성했을 때 평점은 기본 값으로 0.0을 갖도록 함
          로그인하지 않은 경우, 멤버 타입이 파트너가 아닌 경우, 주소와 연락처가 같은 매장이 존재하는 경우 실패 응답
  - 성공 응답 정보 : 매장명, 주소, 설명, 전화번호, 오픈시간, 마감시간, 평점
2. 매장 정보 수정(PUT, "/store/{storeId}")
  - 파라미터 : 매장 번호, 매장명, 주소, 설명, 전화번호, 오픈시간, 마감시간
  - 정책 : 로그인하지 않은 경우, 멤버 타입이 파트너가 아닌 경우, 매장이 존재하지 않는 경우,
          로그인한 사용자의 매장이 아닌 경우 실패 응답
  - 성공 응답 정보 : 매장명, 주소, 설명, 전화번호, 오픈시간, 마감시간, 평점
3. 매장 삭제(DELETE, "/store/{storeId}")
  - 파라미터 : 매장 번호
  - 정책 : 로그인하지 않은 경우, 멤버 타입이 파트너가 아닌 경우, 매장이 존재하지 않는 경우
          삭제하려는 매장이 예약이 있는 경우 실패 응답
  - 성공 응답 정보 : 성공 응답 메시지
4. 매장 리스트(GET, "/store/list")
  - 파라미터 : 정렬 방식, pageable
  - 정책 : 이름, 평점, 리뷰 개수 순으로 매장 리스트를 보여줄 수 있음
          파라미터를 작성하지 않은 경우 이름을 기준으로 보여주도록 함
          잘못된 파라미터를 사용한 경우 실패 응답
  - 성공 응답 정보 : 매장명, 주소, 연락처, 설명, 오픈 시간, 마감 시간, 평점 리스트
5. 매장 검색(GET, "/store/search")
  - 파라미터 : 매장명
  - 정책 : 파라미터로 받은 매장명으로 시작하는 매장 리스트를 보여줌
  - 성공 응답 정보 : 매장명, 주소, 연락처, 설명, 오픈 시간, 마감 시간, 평점 리스트
6. 매장 상세 정보(GET, "/store/details/{id}")
  - 파라미터 : 매장 번호
  - 정책 : 매장이 존재하지 않는 경우 실패 응답
  - 성공 응답 정보 : 매장명, 주소, 연락처, 설명, 오픈 시간, 마감 시간, 평점

예약

1. 매장 예약(POST, "/reservation/{storeId}")
  - 파라미터 : 매장 번호, 예약 시간
  - 정책 : 로그인하지 않은 경우, 멤버 타입이 사용자가 아닌 경우, 사용자가 없는 경우, 매장이 없는 경우
          한 매장에 같은 시간대 예약이 있는 경우 실패 응답
  - 성공 응답 정보 : 예약 매장명, 예약자명, 매장 주소, 매장 연락처, 예약 날짜, 예약 상태
2. 예약 수정(PATCH, "/reservation/{reservationId}")
  - 파라미터 : 예약 번호, 예약 시간
  - 정책 : 로그인하지 않은 경우, 예약 정보가 없는 경우, 예약자와 사용자 정보가 다른 경우, 
          한 매장의 같은 시간에 예약이 있는 경우,
          이미 방문처리된 상태이거나 예약 시간 30분전이 지난 경우 실패 응답
  - 성공 응답 정보 : 예약 매장명, 예약자명, 매장 주소, 매장 연락처, 예약 날짜, 예약 상태
3. 예약 취소(DELETE, "/reservation/{reservationId}")
  - 파라미터 : 예약 번호
  - 정책 : 로그인하지 않은 경우, 예약 정보가 없는 경우, 예약자와 사용자 정보가 다른 경우,
          이미 방문처리된 상태이거나 예약 시간 30분전이 지난 경우 실패 응답
  - 성공 응답 정보 : 성공 응답 메시지
4. 예약 내역 - 사용자(GET, "/reservation/list")
  - 파라미터 : pageable
  - 정책 : 로그인하지 않은 경우, 멤버 타입이 사용자가 아닌 경우, 사용자가 없는 경우 실패 응답
  - 성공 응답 정보 : 예약 매장명, 예약자명, 매장 주소, 매장 연락처, 예약 날짜, 예약 상태 리스트
5. 예약 내역 - 파트너(GET, "/reservation/list/{storeId}")
  - 파라미터 : 날짜, 매장 번호, pageable
  - 정책 : 로그인하지 않은 경우, 멤버 타입이 파트너가 아닌 경우, 매장이 없는 경우, 사용자가 없는 경우,
          매장의 점장과 사용자가 다른 경우 실패 응답
  - 성공 응답 정보 : 입력받은 날짜에 해당하는 예약 정보
                  예약자명, 예약자 핸드폰 번호, 예약 날짜, 예약 상태
6. 예약 승인(PATCH, "/reservation/approval/{reservationId}")
  - 파라미터 : 예약 번호
  - 정책 : 로그인하지 않은 경우, 멤버 타입이 파트너가 아닌 경우, 사용자가 존재하지 않는 경우,
          예약 정보가 없는 경우, 예약된 매장의 점장과 사용자가 일치하지 않는 경우 실패 응답
  - 성공 응답 정보 : 예약자명, 예약자 핸드폰 번호, 예약 날짜, 예약 상태
7. 예약 거절(PATCH, "/reservation/refusal/{reservationId}")
  - 파라미터 : 예약 번호
  - 정책 : 로그인하지 않은 경우, 멤버 타입이 파트너가 아닌 경우, 사용자가 존재하지 않는 경우,
          예약 정보가 없는 경우, 예약된 매장의 점장과 사용자가 일치하지 않는 경우 실패 응답
  - 성공 응답 정보 : 예약자명, 예약자 핸드폰 번호, 예약 날짜, 예약 상태

리뷰

1. 리뷰 작성(POST, "/review/{reservationId}")
  - 파라미터 : 예약 번호, 리뷰 내용, 평점
  - 정책 : 로그인하지 않은 경우, 사용자가 존재하지 않는 경우, 예약 정보가 없는 경우,
          매장 정보가 없는 경우, 예약자와 로그인한 사용자가 다른 경우, 예약 상태가 리뷰 완료 상태인 경우,
          예약 상태가 승인 상태가 아니거나 방문처리된 상태가 아닌 경우 실패 응답
  - 성공 응답 정보 : 리뷰 작성자 아이디, 리뷰 작성 매장명, 리뷰 내용, 평점
2. 리뷰 수정(PUT, "/review/{reviewId}")
  - 파라미터 : 리뷰 번호, 리뷰 내용, 평점
  - 평점 : 로그인하지 않은 경우, 리뷰 정보가 없는 경우, 리뷰 작성자와 사용자가 일치하지 않는 경우 실패 응답
  - 성공 응답 정보 : 리뷰 작성자 아이디, 리뷰 작성 매장명, 리뷰 내용, 평점
3. 리뷰 삭제(DELETE, "/review/{reviewId}")
  - 파라미터 : 리뷰 번호
  - 정책 : 로그인하지 않은 경우, 리뷰 정보가 없는 경우, 리뷰 작성자와 사용자가 일치하지 않는 경우 실패 응답
  - 성공 응답 정보 : 성공 응답 메시지
4. 리뷰 리스트(GET, "/review/{storeId}")
  - 파라미터 : 매장 번호
  - 정책 : 매장이 존재하지 않는 경우 실패 응답
  - 성공 응답 정보 : 최근에 작성된 리뷰 순으로 리뷰 작성자 아이디, 리뷰 작성 매장명, 리뷰 내용, 평점 리스트

키오스크

1. 방문 확인(PATCH, "/kiosk/confirm/{reservationId}")
  - 파라미터 : 예약 번호, 사용자 아이디, 사용자 이름, 휴대폰 번호
  - 정책 : 예약 정보가 없는 경우, 입력받은 아이디・이름・휴대폰 번호가 예약 정보와 다른 경우,
          예약이 승인상태가 아닌 경우, 이미 방문처리된 예약인 경우,
          예약 시간 10분 전보다 일찍 도착한 경우, 예약 시간 10분 전보다 늦게 도착한 경우 실패 응답
  - 성공 응답 정보 : 성공 응답 메시지

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages