숙박(펜션, 모텔, 호텔 등...) 예약 서비스
Use Case
https://github.com/f-lab-edu/jagoga/wiki/Use-Case
도메인 모델
https://github.com/f-lab-edu/jagoga/wiki/%EB%8F%84%EB%A9%94%EC%9D%B8-%EB%AA%A8%EB%8D%B8
[카카오, 오늘의집 합격] 연동된 곳 어디서나 바로 예약하고, 내 예약에서 모두 관리할 수 있는 서비스
숙박(펜션, 모텔, 호텔 등...) 예약 서비스
Use Case
https://github.com/f-lab-edu/jagoga/wiki/Use-Case
도메인 모델
https://github.com/f-lab-edu/jagoga/wiki/%EB%8F%84%EB%A9%94%EC%9D%B8-%EB%AA%A8%EB%8D%B8
회원가입한 사용자는 로그인을 통해 숙박시설 예약 서비스를 이용할 수 있다.
사용자는 로그인을 위해 필수 정보를 입력해야 한다.
필수 정보 : 이메일
, 비밀번호
로그인에 성공한 사용자는 Jwt 토큰
을 획득할 수 있다.
User 관련 Spring Data JPA
설정 및 사용
MemoryUserRepository → JpaUserRepository
사용자는 숙박시설 예약 서비스 이용을 위해 회원가입을 해야한다.
사용자는 회원가입을 위해 필수 정보를 입력해야 한다.
필수 정보 : 이메일
, 이름
, 비밀번호
, 전화번호
※ 비밀번호는 단방향 암호화
되어 저장된다.
회원가입을 위해 입력한 데이터는 아래 검증과정을 거친다.
github actions jobs.test 부분 추가
동일한 Json 규격으로 응답을 보낼 수 있도록 포맷 생성
숙소 관리자는 특정 RoomType에 Room을 등록할 수 있다.
숙소 관리자는 숙소에 roomType을 등록할 수 있다. (슈페리어 더블, 슈페리어 트윈, Standard, Premium, 파로나마 뷰, etc.)
등록한 roomType은 예약 기능의 기준이 된다.
Create
, Update
, Delete
에 User 권한을 추가한다.OWNER
, ADMIN
권한을 가진 User만 Create
, Update
, Delete
를 할 수 있다.github actions를 사용해서 CI 구축하기
인벤토리 신규 생성(with 재고 데이터)
기존에 인벤토리가 존재한다면 Exception 발생
기존 인벤토리에 재고 채우기
인벤토리가 존재하지 않으면 Exception 발생
숙박시설 예약시 선점 잠금(Pessimistic Lock) 방식을 적용(SELECT ~ FOR UPDATE)
로그인한 사용자에 대해서만 사용자 정보를 수정할 수 있다.
name
, phone
, password
정보를 수정할 수 있다.
name
은 빈 칸일 수 없고, 20자 이내로 입력해야한다.
phone
는 '000-0000-0000'과 같은 형식을 맞추어야 한다.
password
는 패스워드는 빈 칸일 수 없으며 대문자, 소문자, 특수문자가 적어도 하나씩은 있어야 하며 최소 8자리, 최대 20자리까지 가능하다.
현재 SELLER, ADMIN이 아닌 BASIC 멤버가 Accommodation, Room Type, Room을 생성할 수 있다.
(사용자가 가진 권한을 검사하는 로직을 빼놓았다)
로그인한 일반 사용자는 예약하길 원하는 roomType의 숙박시설을 예약할 수 있다.
{
"checkInDate": LocalDate,
"checkOutDate": LocalDate
}
상품(hotel, motel, ...) 생성하기
권한을 가진 사용자는 product(hotel)를 생성할 수 있다. (우선 권한 없이 구현)
상품번호
, 상품명
, 상품 전화번호
, 상품 주소
, 상품 타입
, 상품 등급
, 상품 설명
, 상품 정보
, 낮은 가격
, 생성일
, 수정일
낮은 가격
은 메인 화면에 호텔 정보를 띄울 때 필요하기 때문에 생성한다.기존 테이블 정보가 존재하기 때문에 빈 스크립트 파일 생성하였습니다.
스키마가 변경시 현 버전보다 높은 버전의 스크립트 파일을
src/main/resources/db/migration
하위 경로에 추가해야 합니다.
github actions에 lint 구성
MySQL 사용 및 Spring Data JPA로 repository 리팩토링
예외 일괄 처리 기능
accommodation 관련 로직들을 테스트 한다.
@GeneratedValue 어노테이션 속성 수정
@GeneratedValue
-> @GeneratedValue(strategy = GenerationType.IDENTITY)
기존 id 컬럼에 AUTO_INCREMENT 추가시 외래키 제약조건이 얽혀있어 기존 테이블 DROP 후 재 생성하도록 조치
checkstyle 적용 이전에 생성한 [#25] User 권한(Role) 추가
브랜치를 main 브랜치에 merge하면서 checkstyle이 깨진것같습니다.
checkstyle에 맞게 소스코드 수정 후 다시 main 브랜치에 merge하려고 합니다.
숙소 등록, 수정 시 유효성 검사 기능을 제공한다.
accommodationName
은 빈 칸일 수 없고, 20자 이내로 입력해야한다.phoneNumber
는 '000-0000-0000'과 같은 형식을 맞추어야 한다.address
는 빈 칸일 수 없다.accommdationType
은 여러가지 타입 중 선택되어야 한다. (jagoga 프로젝트에서는 default: PENSION)HandlerMethodArgumentResolver
를 사용하여 로그인한 사용자 정보를 파라미터에 바인딩 되도록 한다.(Service 레이어에서 권한 검사를 할 수 있도록)User는 권한을 가질 수 있다.
권한은 BASIC(로그인한 일반 서비스 사용자)
, OWNER(숙박 업소 주인)
, ADMIN(관리자)
로 나뉜다.
회원가입한 사용자는 BASIC
권한을 가진다.(권한 upgrade 방법은 추후 고민)
Accommodation의 address를 구현한다.
ADMIN 권한을 가진 사용자는 category를 생성 할 수 있다.
USER 테이블
관리자, 숙소 관리자는 숙소 정보를 수정할 수 있다.
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
}
(1) roomType 등록 API 규격 변경
/api/roomtype
-> /api/accommodation/accommodation_id}/room-type
(2) 가격 정보
roomType에 price 필드 추가
유효한 토큰인지 검증한다.
숙소 관리자는 본인이 등록한 RoomType의 roomInventory를 추가할 수 있다.
roomInventory에 재고가 있어야 예약이 가능하다.
적용 기간(최대 30일), 객실 수 필드 추가.
{
"startDate": LocalDate,
"endDate": LocalDate,
"availableCount" : Integer
}
초기 기술 스택에 맞춰 개발 환경을 설정한다.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.