Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

숙박 옵션 등록, 객실 옵셥 등록 API 구현 #16

Merged
merged 12 commits into from
Jan 7, 2024
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,12 @@

import java.util.List;
import kr.co.fastcampus.yanabada.common.response.ResponseBody;
import kr.co.fastcampus.yanabada.domain.accommodation.dto.request.AccommodationOptionSaveRequest;
import kr.co.fastcampus.yanabada.domain.accommodation.dto.request.AccommodationSaveRequest;
import kr.co.fastcampus.yanabada.domain.accommodation.dto.request.RoomOptionSaveRequest;
import kr.co.fastcampus.yanabada.domain.accommodation.dto.request.RoomSaveRequest;
import kr.co.fastcampus.yanabada.domain.accommodation.entity.AccommodationOption;
import kr.co.fastcampus.yanabada.domain.accommodation.entity.RoomOption;
import kr.co.fastcampus.yanabada.domain.accommodation.service.AccommodationService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
Expand All @@ -26,9 +30,23 @@ public ResponseBody<Void> addAccommodations(
return ResponseBody.ok();
}

@PostMapping("/options")
public ResponseBody<Void> addAccommodationOptions(
@RequestBody List<AccommodationOptionSaveRequest> requests
) {
accommodationService.saveAccommodationOptions(requests);
return ResponseBody.ok();
}

@PostMapping("/rooms")
public ResponseBody<Void> addRoom(@RequestBody List<RoomSaveRequest> requests) {
accommodationService.saveRooms(requests);
return ResponseBody.ok();
}

@PostMapping("/rooms/options")
public ResponseBody<Void> addRoomOptions(@RequestBody List<RoomOptionSaveRequest> requests) {
accommodationService.saveRoomOptions(requests);
return ResponseBody.ok();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package kr.co.fastcampus.yanabada.domain.accommodation.dto.request;

import kr.co.fastcampus.yanabada.domain.accommodation.entity.Accommodation;
import kr.co.fastcampus.yanabada.domain.accommodation.entity.AccommodationOption;

public record AccommodationOptionSaveRequest(
Long accommodationId,
Boolean hasSauna,
Boolean hasRooftop,
Boolean hasPool,
Boolean hasGym,
Boolean hasLoungeBar
) {

public AccommodationOption toEntity(Accommodation accommodation) {
return AccommodationOption.create(
accommodation,
hasSauna,
hasRooftop,
hasPool,
hasGym,
hasLoungeBar
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package kr.co.fastcampus.yanabada.domain.accommodation.dto.request;

import kr.co.fastcampus.yanabada.domain.accommodation.entity.Room;
import kr.co.fastcampus.yanabada.domain.accommodation.entity.RoomOption;

public record RoomOptionSaveRequest(
Long roomId,
Boolean canPark,
Boolean isPartyRoom,
Boolean canAccompanyPet,
Boolean isKidsRoom,
Boolean isCityView,
Boolean isOceanView,
Boolean hasPc,
Boolean hasOtt,
Boolean hasBathtub,
Boolean hasAmenity,
Boolean hasBreakfast,
Boolean canCook,
Boolean isNoKids
) {

public RoomOption toEntity(Room room) {
return RoomOption.create(
room,
canPark,
isPartyRoom,
canAccompanyPet,
isKidsRoom,
isCityView,
isOceanView,
hasPc,
hasOtt,
hasBathtub,
hasAmenity,
hasBreakfast,
canCook,
isNoKids
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ public record RoomSaveRequest(
String description,
Integer minHeadCount,
Integer maxHeadCount,
Double rating
Double rating,
String image
) {

public Room toEntity(Accommodation accommodation) {
Expand All @@ -27,7 +28,8 @@ public Room toEntity(Accommodation accommodation) {
description,
minHeadCount,
maxHeadCount,
rating
rating,
image
);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package kr.co.fastcampus.yanabada.domain.accommodation.entity;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
Expand All @@ -25,4 +26,53 @@ public class AccommodationOption {
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "accommodation_id")
private Accommodation accommodation;

@Column(nullable = false)
private Boolean hasSauna;

@Column(nullable = false)
private Boolean hasRooftop;

@Column(nullable = false)
private Boolean hasPool;

@Column(nullable = false)
private Boolean hasGym;

@Column(nullable = false)
private Boolean hasLoungeBar;

private AccommodationOption(
Accommodation accommodation,
Boolean hasSauna,
Boolean hasRooftop,
Boolean hasPool,
Boolean hasGym,
Boolean hasLoungeBar
) {
this.accommodation = accommodation;
this.hasSauna = hasSauna;
this.hasRooftop = hasRooftop;
this.hasPool = hasPool;
this.hasGym = hasGym;
this.hasLoungeBar = hasLoungeBar;
}

public static AccommodationOption create(
Accommodation accommodation,
Boolean hasSauna,
Boolean hasRooftop,
Boolean hasPool,
Boolean hasGym,
Boolean hasLoungeBar
) {
return new AccommodationOption(
accommodation,
hasSauna,
hasRooftop,
hasPool,
hasGym,
hasLoungeBar
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ public class Room extends BaseEntity {
@Column(nullable = false)
private Double rating;

@Column(nullable = false)
private String image;

@OneToOne(
fetch = FetchType.LAZY, mappedBy = "room",
cascade = CascadeType.ALL, orphanRemoval = true
Expand All @@ -73,7 +76,8 @@ private Room(
String description,
Integer minHeadCount,
Integer maxHeadCount,
Double rating
Double rating,
String image
) {
this.accommodation = accommodation;
this.name = name;
Expand All @@ -84,6 +88,7 @@ private Room(
this.minHeadCount = minHeadCount;
this.maxHeadCount = maxHeadCount;
this.rating = rating;
this.image = image;
}

public static Room create(
Expand All @@ -95,7 +100,8 @@ public static Room create(
String description,
Integer minHeadCount,
Integer maxHeadCount,
Double rating
Double rating,
String image
) {
return new Room(
accommodation,
Expand All @@ -106,7 +112,8 @@ public static Room create(
description,
minHeadCount,
maxHeadCount,
rating
rating,
image
);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package kr.co.fastcampus.yanabada.domain.accommodation.entity;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
Expand All @@ -25,4 +26,109 @@ public class RoomOption {
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "room_id")
private Room room;

@Column(nullable = false)
private Boolean canPark;

@Column(nullable = false)
private Boolean isPartyRoom;

@Column(nullable = false)
private Boolean canAccompanyPet;

@Column(nullable = false)
private Boolean isKidsRoom;

@Column(nullable = false)
private Boolean isCityView;

@Column(nullable = false)
private Boolean isOceanView;

@Column(nullable = false)
private Boolean hasPc;

@Column(nullable = false)
private Boolean hasOtt;

@Column(nullable = false)
private Boolean hasBathtub;

@Column(nullable = false)
private Boolean hasAmenity;

@Column(nullable = false)
private Boolean hasBreakfast;

@Column(nullable = false)
private Boolean canCook;

@Column(nullable = false)
private Boolean isNoKids;

private RoomOption(
Room room,
Boolean canPark,
Boolean isPartyRoom,
Boolean canAccompanyPet,
Boolean isKidsRoom,
Boolean isCityView,
Boolean isOceanView,
Boolean hasPc,
Boolean hasOtt,
Boolean hasBathtub,
Boolean hasAmenity,
Boolean hasBreakfast,
Boolean canCook,
Boolean isNoKids
) {
this.room = room;
this.canPark = canPark;
this.isPartyRoom = isPartyRoom;
this.canAccompanyPet = canAccompanyPet;
this.isKidsRoom = isKidsRoom;
this.isCityView = isCityView;
this.isOceanView = isOceanView;
this.hasPc = hasPc;
this.hasOtt = hasOtt;
this.hasBathtub = hasBathtub;
this.hasAmenity = hasAmenity;
this.hasBreakfast = hasBreakfast;
this.canCook = canCook;
this.isNoKids = isNoKids;
}

public static RoomOption create(
Room room,
Boolean canPark,
Boolean isPartyRoom,
Boolean canAccompanyPet,
Boolean isKidsRoom,
Boolean isCityView,
Boolean isOceanView,
Boolean hasPc,
Boolean hasOtt,
Boolean hasBathtub,
Boolean hasAmenity,
Boolean hasBreakfast,
Boolean canCook,
Boolean isNoKids
) {
return new RoomOption(
room,
canPark,
isPartyRoom,
canAccompanyPet,
isKidsRoom,
isCityView,
isOceanView,
hasPc,
hasOtt,
hasBathtub,
hasAmenity,
hasBreakfast,
canCook,
isNoKids
);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
package kr.co.fastcampus.yanabada.domain.accommodation.entity.enums;

public enum Category {
HOTEL
HOTEL_RESORT,
MOTEL,
PENSION,
GUESTHOUSE,
POOL_VILLA

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,22 @@
package kr.co.fastcampus.yanabada.domain.accommodation.entity.enums;

import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
public enum Region {
SEOUL
SEOUL("서울"),
GYEONGGI("경기"),
INCHEON("인천"),
GANGWON("강원"),
CHUNGCHEONG("충청"),
DAEJEON("대전"),
JEOLLA("전라"),
GWANGJU("광주"),
GYEONGSANG("경상"),
DAEGU("대구"),
ULSAN("울산"),
BUSAN("부산"),
JEJU("제주");

private final String value;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package kr.co.fastcampus.yanabada.domain.accommodation.repository;

import kr.co.fastcampus.yanabada.domain.accommodation.entity.AccommodationOption;
import org.springframework.data.jpa.repository.JpaRepository;

public interface AccommodationOptionRepository extends JpaRepository<AccommodationOption, Long> {
}
Loading
Loading