Coder Social home page Coder Social logo

f-lab-edu / jagoga Goto Github PK

View Code? Open in Web Editor NEW
9.0 2.0 4.0 291 KB

[카카오, 오늘의집 합격] 연동된 곳 어디서나 바로 예약하고, 내 예약에서 모두 관리할 수 있는 서비스

Java 100.00%
bright java-backend unicorn decacorn graduate

jagoga's Introduction

jagoga's People

Contributors

baesuyeon avatar kakao-gray-great avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

jagoga's Issues

[feature/login] 로그인 기능

기능

  • 로그인

상세 내용

회원가입한 사용자는 로그인을 통해 숙박시설 예약 서비스를 이용할 수 있다.

  • 사용자는 로그인을 위해 필수 정보를 입력해야 한다.
    필수 정보 : 이메일, 비밀번호

  • 로그인에 성공한 사용자는 Jwt 토큰을 획득할 수 있다.

[feature/signup] 회원가입

기능

  • 회원가입

상세 내용

사용자는 숙박시설 예약 서비스 이용을 위해 회원가입을 해야한다.

  • 사용자는 회원가입을 위해 필수 정보를 입력해야 한다.
    필수 정보 : 이메일, 이름, 비밀번호, 전화번호
    ※ 비밀번호는 단방향 암호화되어 저장된다.

  • 회원가입을 위해 입력한 데이터는 아래 검증과정을 거친다.

  1. 필수 정보를 모두 입력하였는지 검증
  2. 이메일 포맷 검증
  3. 이메일 중복 검사

[feature/room] room 등록 기능

기능

  • room 등록

상세 내용

숙소 관리자는 특정 RoomType에 Room을 등록할 수 있다.

  • 숙소 관리자는 본인이 등록한 숙소에 Room을 등록할 수 있다.

[feature/roomtype] roomType 등록 기능

기능

  • roomType 등록

상세 내용

숙소 관리자는 숙소에 roomType을 등록할 수 있다. (슈페리어 더블, 슈페리어 트윈, Standard, Premium, 파로나마 뷰, etc.)
등록한 roomType은 예약 기능의 기준이 된다.

  • 숙소 관리자는 본인이 등록한 숙소에 roomType을 등록할 수 있다.
  • 존재하는 숙소에 roomType을 등록할 수 있다.

[refactor/inventory] 인벤토리 & 예약 기능 개선

상세내용

  1. 인벤토리 신규 생성(with 재고 데이터)
    기존에 인벤토리가 존재한다면 Exception 발생

  2. 기존 인벤토리에 재고 채우기
    인벤토리가 존재하지 않으면 Exception 발생

  3. 숙박시설 예약시 선점 잠금(Pessimistic Lock) 방식을 적용(SELECT ~ FOR UPDATE)

[feature/update-user] 사용자 정보 수정 기능 추가 및 유효성 검사

기능

  • 사용자 정보 수정 기능
  • 유효성 검사 추가

상세 내용

로그인한 사용자에 대해서만 사용자 정보를 수정할 수 있다.

name, phone, password 정보를 수정할 수 있다.

name은 빈 칸일 수 없고, 20자 이내로 입력해야한다.
phone는 '000-0000-0000'과 같은 형식을 맞추어야 한다.
password는 패스워드는 빈 칸일 수 없으며 대문자, 소문자, 특수문자가 적어도 하나씩은 있어야 하며 최소 8자리, 최대 20자리까지 가능하다.

[bug/permission] 권한 이슈

상세 내용

현재 SELLER, ADMIN이 아닌 BASIC 멤버가 Accommodation, Room Type, Room을 생성할 수 있다.
(사용자가 가진 권한을 검사하는 로직을 빼놓았다)

[feature/booking] 숙박업소 예약 기능

기능

  • 숙박업소 예약 기능

상세 내용

로그인한 일반 사용자는 예약하길 원하는 roomType의 숙박시설을 예약할 수 있다.

 {
    "checkInDate": LocalDate,
    "checkOutDate": LocalDate
}
  1. roomInventory에서 예약하길 원하는 roomType의 숙박시설을 예약할 수 있는지 확인한다.
  2. Booking 테이블에 예약 정보를 추가한다.
  3. 체크인~체크아웃까지의 roomInventory 잔여 객실 수를 1 줄인다.

[feature/create-product] 상품 생성, 삭제하기

기능

상품(hotel, motel, ...) 생성하기

상세 내용

권한을 가진 사용자는 product(hotel)를 생성할 수 있다. (우선 권한 없이 구현)

  • 상품번호, 상품명, 상품 전화번호, 상품 주소, 상품 타입, 상품 등급, 상품 설명, 상품 정보, 낮은 가격, 생성일, 수정일
  • 상품을 생성하고 볼 수 있다.
  • 상품을 삭제할 수 있다.
  • 낮은 가격은 메인 화면에 호텔 정보를 띄울 때 필요하기 때문에 생성한다.

[config/flyway] flyway

상세 내용

기존 테이블 정보가 존재하기 때문에 빈 스크립트 파일 생성하였습니다.

참고사항

스키마가 변경시 현 버전보다 높은 버전의 스크립트 파일을
src/main/resources/db/migration 하위 경로에 추가해야 합니다.

[refactor/id] @GeneratedValue 어노테이션 속성 수정

상세내용

@GeneratedValue 어노테이션 속성 수정
@GeneratedValue -> @GeneratedValue(strategy = GenerationType.IDENTITY)

참고

기존 id 컬럼에 AUTO_INCREMENT 추가시 외래키 제약조건이 얽혀있어 기존 테이블 DROP 후 재 생성하도록 조치

[feature/accommodation-validate] 숙소 등록, 수정 시 유효성 검사 기능

상세 내용

숙소 등록, 수정 시 유효성 검사 기능을 제공한다.

요구사항

  • accommodationName은 빈 칸일 수 없고, 20자 이내로 입력해야한다.
  • phoneNumber는 '000-0000-0000'과 같은 형식을 맞추어야 한다.
  • address는 빈 칸일 수 없다.
  • accommdationType은 여러가지 타입 중 선택되어야 한다. (jagoga 프로젝트에서는 default: PENSION)
  • description, information은 정보가 비어있어도 된다.
  • AccommodationExceptionHandler를 생성하여 accommodation exception에 관련된 예외를 처리해준다.

[feature/authority] User 권한(Role) 추가

기능

  • User 권한(Role) 추가
  • HandlerMethodArgumentResolver를 사용하여 로그인한 사용자 정보를 파라미터에 바인딩 되도록 한다.(Service 레이어에서 권한 검사를 할 수 있도록)

상세 내용

User는 권한을 가질 수 있다.
권한은 BASIC(로그인한 일반 서비스 사용자), OWNER(숙박 업소 주인), ADMIN(관리자)로 나뉜다.
회원가입한 사용자는 BASIC권한을 가진다.(권한 upgrade 방법은 추후 고민)

[feature/address] 주소 도메인 구현

상세 내용

Accommodation의 address를 구현한다.

요구 사항

  • state (광역 지방 자치 단체 ex. 서울시, 광역시 등...), city(강남구, 안산시, 옥포동 등...)로 나눈다.
  • city는 '강남/역삼/삼성/신라/청담'과 같이 주변 지역을 묶을 수 있다.
  • state와 city는 1:N 관계이다.
  • city와 accommodation은 1:N 관계이다.
  • 사용자는 state로 조회 불가능하고 city의 PK로 해당 지역 숙소 조회가 가능하다.

[refactor/accommodation] AccommodationRequestDto의 ownerId 필드 삭제

상세내용

Accommodation 생성을 요청하는 AccommodationRequestDto의 ownerId 필드를 삭제하려고 합니다.
(현재 Accommodation 생성시마다 User 조회 쿼리가 호출됩니다.)

Accommodation 생성시 서비스 레이어에서 현재 로그인한 유저의 id 정보를 ownerId에 할당합니다.

 {
    "accommodationName" : String,
    "ownerId": Long,
    "phoneNumber" : String,
    "city" : {
        "id": Long,
        "name" : String
    },
    "accommodationType" : String,
    "description" : String,
    "information" : String
}

[feature/room-inventory] roomInventory 추가 기능

기능

  • roomInventory 추가 기능

상세 내용

숙소 관리자는 본인이 등록한 RoomType의 roomInventory를 추가할 수 있다.
roomInventory에 재고가 있어야 예약이 가능하다.

적용 기간(최대 30일), 객실 수 필드 추가.

 {
    "startDate": LocalDate,
    "endDate": LocalDate,
    "availableCount" : Integer
}

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.