HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
[New] 아만드팀
[New] 아만드팀
/
🌟
팀프로젝트
/
📃
2022.06.16. (목)
📃

2022.06.16. (목)

회의날짜
Jun 16, 2022
Tags
프로젝트 세팅
API 설계
컨벤션
참석자
Subin kim
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 설계

notion image
notion image
 
 
 

호스트는 숙소를 등록하고 싶다
  • 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", ... ] }
notion image
유저는 자신이 원하는 숙소들을 찾고 싶다
  • 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 형식으로 받는다.
      • 이메일 : 이메일 형식을 만족해야 한다.
      • 아이디, 패스워드 ????
        • notion image
 
  • 유저는 회원정보를 수정할 수 있다.
    • 허용되는 값만 수정가능하다.
 
  • 유저를 삭제할 수 있다.
 
  • 게스트는 예약현황을 확인하고 싶다.
    • 게스트는 자신의 예약현황을 볼 수 있다.
      • 예정 중
      • 진행 중
      • 끝남?
 
  • 게스트는 숙소들을 조회하고 싶다.
    • 조회 결과가 x건 이상인 경우 무한 스크롤로 조회한다.
      • 대표 사진
      • 숙소 이름
      • 평점
      • 가격
 
  • 게스트는 숙소를 상세 조회하고 싶다.
     

    예약(게스트)

    • 게스트는 숙소를 예약할 수 있다.
      • 날짜의 경우 숙소가 비어있을 때와 게스트가 예약한 숙소가 없다면 가능하다.
      • 인원은 숙소의 최대 숙박 인원을 넘지 말아야 한다.
        • 성인
        • 어린이
        • 유아
        • 반려동물
      • 요금에 대한 정보를 볼 수 있다.
      • 결제 수단을 입력한다. (옵션)
      • 쿠폰을 입력한다. (옵션)
      • 호스트에게 메시지를 보낼 수 있다. (옵션)
     
     
     
     

    호스트(유저)

    • 호스트는 숙소를 등록한다.
     
     

    숙소

    • 숙소를 등록할 수 있다.
      • 등록할 호스트의 id를 알아야한다.
      • 숙소의 정보를 입력해야한다.
        • 가격: 1만원 이상이고 1천만원 이하여야한다.
        • 최대 인원수: 음수와 0이 되면 안된다.
        • 숙소 유형
          • 아파트, 주택, 레디던스, 호스텔
        • 이용 범위
          • 개인실, 다인실, 전체
        • 주소
          • 우편번호: 음수가 되면 안된다.
          • 주소: NOT BLANK
        • 침대수
          • 0 이상
          • 마루바닥에서 잘 수도 있으니깐
        • 침실수
          • 1 이상
        • 욕실 수
          • 0 이상 ,
          • notion image
          • 만약 공용 욕실이라면? - 공용 욕실 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
    • 숙소 상세 정보를 조회할 수 있다.
      • notion image
        notion image
    notion image
    notion image

    유저스토리 (손님)

    • 방예약
    1. 접속
    1. 로그인
      1. 선택/ 필수
    1. 예약가능 리스트보기
      1. 필터링 - 확장
    1. 방 세부정보
      1. 연락하기 버튼
      2. 예약하기 버튼
        1. 예약은 유저 권한 필요
    1. 예약 요청페이지
      1. 예약 정보
      2. 요금 세부정보
      3. 결제 수단 선택
      4. 예약 요청
     
    계정 통합하고 - 호스팅 기능 가능하고, 예약 기능 가능
     

    유저스토리 (호스트)

    • 방등록
    1. 접속
    1. 로그인
      1. 필수
    1. 숙소 등록하기
      1. 정보의 경우 조사 해야함
    1. 호스팅 정보 확인
    1. 등록
     
    • 올린 방 관리
    1. 내정보
    1. 올린 방목록 조회
    1. 수정버튼
    1. 수정
    1. 등록
     

    다음 회의때 할 일!!!

    • 내일 스크럼 전까지 API 스펙 만들어오기 (validation, 시나리오도 같이 생각해보기!!)
    • 패키지 네이밍
      • domain - api, application, infra, entity
      • domain - controller, service, repository, entity
    • 빌더관련 정하기
      • id까지 잡는걸로
    • 예약 status 상태 변경 어떻게 할건지?
    • https://www.airbnb.co.kr/help/article/363/예약-상태에-대한-정보
    • https://www.airbnb.co.kr/help/article/234/예약-상태-확인하기
    • https://www.airbnb.co.kr/help/article/169/숙소-예약-취소하기
    • 예약이 완료되어야 정확한 주소 보이기
      • 그 전까진 대략적으로?
    • 시나리오 정리
    • RestApi에서 카카오 OAuth2가 어떻게 진행될지
      •  
     
    • 무한 스크롤 페이징에 관한 request, response 와 방식 알아오기…..