hair dryer
오늘 할 일!!
- Task별 이슈화
- 해보고 결정하자~!
- API 명세
- 프로젝트 초기 설정
- PR template
Intellij 깃허브 연동
git remote add upstream https://github.com/prgrms-be-devcourse/BEDV2_Amabnb.git git pull --rebase upstream develop
Basic Entity 설계


- POST /rooms
- [header] authorization: {id}
request
// 숙소 정보
{ price: 100000, description: "blah blah", max_guest_num: 11, room_type: "apartment", room_scope: "allRoom, privateRoom, publicRoom", address: "", bed_cnt: 1, bed_room_cnt: 1, bath_room_cnt: 1 }
form-data
response (상태코드: 201 created)
201
- POST /rooms/images
- GET /rooms/{roomId}
request - none
response (상태코드: 200)
{ "id" : 1, "price": 100000, "description": "방설명", "max_guest_num": 10, "room_type": "apart", "room_scope": "private", "address": "seoul ,,,", "bed_cnt": 1, "bed_room_cnt": 1, "bath_room_cnt" : 1, }
- GET /rooms/images/detail/{roomId}
- 세부정보 페이지에 보이는 5개의 사진을 보내준다.
response (상태코드: 200)
{ "room_id": 1, "images": [ "s3://user/first-image-1", "s3://user/first-image-2", "s3://user/first-image-3", "s3://user/first-image-4", "s3://user/first-image-5" ] }
- GET /rooms/images/{roomId}
- 사용자가 등록한 숙소의 전체 이미지를 가져온다.
response (상태코드: 200)
{ "room_id": 1, "images": [ "s3://user/first-image-1", "s3://user/first-image-2", "s3://user/first-image-3", "s3://user/first-image-4", "s3://user/first-image-5", ... ] }

- GET /rooms?조건들….
- 파라미터로 조건을 받는 다
- 필터를 통해 검색을 하겠다.
- 조건으로 받을 파라미터
- min_beds
- min_bedrooms
- min_price
- max_price
- room_types[]
- room_scopes[]
- checkin
- checkout
response (상태코드: 200)
[ { "roomId":1, "price": 20000, "address":"창원시", "bed_cnt":3, "images": [10개] }, { "roomId":2, "price": 111111, "address":"창원시", "bed_cnt":3, "images": [] }, { "roomId":3, "price": 30000, "address":"창원시", "bed_cnt":3, "images": [] }, ... ]
유저는 회원가입을 통해 서비스를 이용하고 싶다 (게스트, 호스트)
- POST /users
어떻게 흐름이 흘러가는지 조사(공부)해오기!!!!
게스트는 숙소을 예약하고 싶다
POST /reservations
[header] authorization: {jwtToken}
Request body
// 예약을 위한 숙소정보, 결제수단, 사용일 info { "room_id" : 1, "check_in": "2022-06-01", "check_out": "2022-06-10", "geust_num": 1, "payment": 100000, //option "card_number":, //"option", "exp":"11/22", "CVV" : "123", "postcode" : "12345", "region": "seoul/korea", }
Resoponse body (상태코드 : 200) ← 넘겨줄 필요가 있을까? 생각해보자
// 예약 확인 정보 { "reservation_id" : 1 "room_id" : 1, "check_in": "2022-06-01", "check_out": "2022-06-10", "payment": 100000 }
- 200!! 성공
- 즉시 결제? 승인 결제 할건지?
- 예약 status 상태 변경 어떻게 할건지?
- 201이면 ⇒ header의 Location으로 1넘겨주기
- 예외
- 숙소가 이미 예약되어 있다
- 금액이 부족하다
- 카드가 invalid 하다 - 결제실패 (옵션)
게스트는 예약을 수정하고 싶다.
PUT /reservations/{reservationId}
[header] authorization: {jwtToken}
- 변경에 따른 예약을 → 새로 생성
- 예약변경(~10) → (10~n까지)일자선택하고 → 결제하기 → 변경요청 → 수락
- 승인완료(호스트가 승인 시) 시 기간은 추가만 가능하고 추가 결제실시 , (체크인 날짜 전에)줄일려면 환불 정책에 따라 취소
- 만약 인원만 변경 시
1~10 // 수정 → 기간을 줄이는거는 X (예약 취소후 → 재 결재)
/ 기간을 늘리는 수정만 O
Request body
// 예약 수정을 위한 숙소정보, 사용일 info { "reservationId" : 1 "check_out": "2022-06-11", // (optional - 생각 포인트) "geust_num": 2, "payment": 20000, // 추가 결제 금액 사항 }
수정 → 취소하고 새로 생성
- 추가결제?
- 기존결제를 취소하고 → 새로운 금액 결제
- 기존결제와 비교하여 더 결제하던가 환불하던가
- 환불정책 (옵션)
- 7일 이내 100% 환불
- 나중에 한다면 작성하겠습니다 ㅎㅎ
Resoponse body (상태코드 : 200)
// 예약 확인 정보 { "reservation_id" : 1 "room_id" : 1, "check_in": "2022-06-01", "check_out": "2022-06-10", "payment": 120000 }
게스트는 예약을 취소하고 싶다.
DELETE /reservations/{reservationId}
[header] authorization: {jwtToken}
Request body
- 없음
Resoponse body (상태코드 : 204 - no content)
- 없음
호스트는 하나의 예약현황을 조회한다.
GET hosts/revervations/{reservationId}
[header] authorization: {jwt}
Resoponse body (상태코드 : 200)
{ "check_in" : 2022-01-01 "check_out" : 2022-01-20 "guest_num" : 2 "payment" : 120000 "status" : "approve" "review_id" : 1 "user_id" : 1 "room_id" : 2 }
호스트는 모든(필터링포함) 숙소의 예약현황을 조회한다. (무한스크롤 처리?)
GET hosts/rooms/revervations
?
[header] authorization: {jwtToken}
Request Param
- startDate = 2022-01-01
- endDate = 2022-01-10
- roomId = 1 (옵션) ← 가지고 있는 숙소들중
- status = all, A, B, C (전체, 대기중, 예정 , 진행 중 )
Resoponse body (상태코드 : 200)
{ "pageable": { "reservations":[ "reservation":{ // 호스트한테 보여줄 reservation dto }, "reservation":{ // 호스트한테 보여줄 reservation dto }, "reservation":{ // 호스트한테 보여줄 reservation dto } ] } }
게스트는 모든(필터링포함) 예약현황을 확인하고 싶다
GET /guests/revervations/
- [header] authorization: {id}
Request Param
- status = 이전 숙소 , 진행중인 숙소 , 예정인 숙소
게스트는 특정 한가지 숙소의 예약현황을 확인하고 싶다
GET /guests/revervations/{reservationId}
[header] authorization: {jwt}
Resoponse body (상태코드 : 200)
{ "reservation_id" : 1 "check_in" : 2022-01-01 "check_out" : 2022-01-20 "guest_num" : 2 "payment" : 120000 "status" : "approve" "review_id" : 1 "room" : { "room_id" : 2 // 이름, 썸네일 정도 } // <- ? "host" :{ "name" : "subin", "descrption" : "삐삒 AI 수빈입니다." } }
시나리오
게스트(유저)
- 유저는 회원가입을 할 수 있다. (카카오 OAuth - 가능하다면)
- 유저 정보가 알맞을 때만 가능하다.
- 이름 : 1글자 이상이여야 하고, 공백이면 안된다.
- 휴대폰 번호 : 01x-xxx(x)-xxxx 형식을 만족해야 한다.
- Embedded로 하면 국가번호 이런것도 넣을 수 있습니다
- 국내로 한정 - 국가번호 x
- 생년월일(선택사항) : yyyy-mm-dd 형식으로 받는다.
- 이메일 : 이메일 형식을 만족해야 한다.
- 아이디, 패스워드 ????

- 유저는 회원정보를 수정할 수 있다.
- 허용되는 값만 수정가능하다.
- 유저를 삭제할 수 있다.
- 게스트는 예약현황을 확인하고 싶다.
- 게스트는 자신의 예약현황을 볼 수 있다.
- 예정 중
- 진행 중
- 끝남?
- 게스트는 숙소들을 조회하고 싶다.
- 조회 결과가 x건 이상인 경우 무한 스크롤로 조회한다.
- 대표 사진
- 숙소 이름
- 평점
- 가격
- 게스트는 숙소를 상세 조회하고 싶다.
예약(게스트)
- 게스트는 숙소를 예약할 수 있다.
- 날짜의 경우 숙소가 비어있을 때와 게스트가 예약한 숙소가 없다면 가능하다.
- 인원은 숙소의 최대 숙박 인원을 넘지 말아야 한다.
- 성인
- 어린이
- 유아
- 반려동물
- 요금에 대한 정보를 볼 수 있다.
- 결제 수단을 입력한다. (옵션)
- 쿠폰을 입력한다. (옵션)
- 호스트에게 메시지를 보낼 수 있다. (옵션)
호스트(유저)
- 호스트는 숙소를 등록한다.
숙소
- 숙소를 등록할 수 있다.
- 등록할 호스트의 id를 알아야한다.
- 숙소의 정보를 입력해야한다.
- 가격: 1만원 이상이고 1천만원 이하여야한다.
- 최대 인원수: 음수와 0이 되면 안된다.
- 숙소 유형
- 아파트, 주택, 레디던스, 호스텔
- 이용 범위
- 개인실, 다인실, 전체
- 주소
- 우편번호: 음수가 되면 안된다.
- 주소: NOT BLANK
- 침대수
- 0 이상
- 마루바닥에서 잘 수도 있으니깐
- 침실수
- 1 이상
- 욕실 수
- 0 이상 ,
- 만약 공용 욕실이라면? - 공용 욕실 1개라고 표현.
- 상태
- 사용할 수 있는 지, 예약이 다 차있는 지
- usable, full
- 편의 시설 칼럼
- 필수
- wifi
- Washer
- Air conditioning
- Heating
- tv
- iron
- Kitchen
- Dryer
- Dedicated workspace
- Hair dryer
- swimming pool
- 특징
- Pool
- Hot tub - 자쿠지 or 온수욕조
- Free parking on premises
- EV charger
- Gym
- Crib - 어린이 침대
- BBQ grill
- Breakfast
- Smoking allowed
- Indoor fireplace - 실내 벽난로
- 위치
- Beachfront - 해변에 인접
- Waterfront - 수변에 인접
- 안전
- Smoke alarm
- Carbon monoxide alarm

- 숙소 상세 정보를 조회할 수 있다.




유저스토리 (손님)
- 방예약
- 접속
- 로그인
- 선택/ 필수
- 예약가능 리스트보기
- 필터링 - 확장
- 방 세부정보
- 연락하기 버튼
- 예약하기 버튼
- 예약은 유저 권한 필요
- 예약 요청페이지
- 예약 정보
- 요금 세부정보
- 결제 수단 선택
- 예약 요청
계정 통합하고 - 호스팅 기능 가능하고, 예약 기능 가능
유저스토리 (호스트)
- 방등록
- 접속
- 로그인
- 필수
- 숙소 등록하기
- 정보의 경우 조사 해야함
- 호스팅 정보 확인
- 등록
- 올린 방 관리
- 내정보
- 올린 방목록 조회
- 수정버튼
- 수정
- 등록
다음 회의때 할 일!!!
- 내일 스크럼 전까지 API 스펙 만들어오기 (validation, 시나리오도 같이 생각해보기!!)
- 패키지 네이밍
- domain - api, application, infra, entity
- domain - controller, service, repository, entity
- 빌더관련 정하기
- id까지 잡는걸로
- 예약 status 상태 변경 어떻게 할건지?
- 예약이 완료되어야 정확한 주소 보이기
- 그 전까진 대략적으로?
- 시나리오 정리
- RestApi에서 카카오 OAuth2가 어떻게 진행될지
- 무한 스크롤 페이징에 관한 request, response 와 방식 알아오기…..