Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
Expand All @@ -18,6 +19,7 @@
import com.sumte.apiPayload.exception.annotation.CheckPageSize;
import com.sumte.guesthouse.dto.GuesthousePreviewDTO;
import com.sumte.guesthouse.dto.GuesthouseRequestDTO;
import com.sumte.guesthouse.dto.GuesthouseResponseDTO;
import com.sumte.guesthouse.dto.GuesthouseSearchRequestDTO;
import com.sumte.guesthouse.service.GuesthouseCommandService;
import com.sumte.guesthouse.service.GuesthouseQueryService;
Expand All @@ -39,11 +41,11 @@ public class GuesthouseController {

@Operation(summary = "게스트하우스 등록", description = "게스트하우스를 등록합니다.")
@PostMapping
public ApiResponse<Void> registerGuesthouse(
public ResponseEntity<ApiResponse<GuesthouseResponseDTO.Register>> registerGuesthouse(
@RequestBody @Valid GuesthouseRequestDTO.Register dto) {
guesthouseCommandService.registerGuesthouse(dto);
GuesthouseResponseDTO.Register result = guesthouseCommandService.registerGuesthouse(dto);

return ApiResponse.successWithNoData();
return ResponseEntity.ok(ApiResponse.success(result));
}

@DeleteMapping("/{guesthouseId}")
Expand Down Expand Up @@ -72,6 +74,18 @@ public ApiResponse<Void> updateGuesthouse(

}

@GetMapping("/{guesthouseId}")
@Operation(summary = "게스트하우스 조회", description = "id기반으로 게스트하우스를 조회하는 api입니다")
@Parameters({
@Parameter(name = "guesthouseId", description = "게스트하우스 아이디를 넘겨주세요.")
})
public ResponseEntity<ApiResponse<GuesthouseResponseDTO.GetHouseResponse>> getRoom(
@PathVariable Long guesthouseId
) {
GuesthouseResponseDTO.GetHouseResponse result = guesthouseQueryService.getHouseById(guesthouseId);
return ResponseEntity.ok(ApiResponse.success(result));
}

@PostMapping("/search")
@Operation(summary = "게스트 하우스 필터링 조회", description = "게스트 하우스를 검색 조건에 맞게 조회합니다.")
@Parameters({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,16 @@ public Guesthouse toRegisterEntity(GuesthouseRequestDTO.Register dto) {

public GuesthouseResponseDTO.Register toRegisterResponseDTO(Guesthouse guesthouse) {
return GuesthouseResponseDTO.Register.builder()
.id(guesthouse.getId())
.name(guesthouse.getName())
.addressRegion(guesthouse.getAddressRegion())
.build();

}

public GuesthouseResponseDTO.Update toUpdateResponseDTO(Guesthouse guesthouse, List<String> optionServices,
List<String> targetAudience) {
return GuesthouseResponseDTO.Update.builder()
.id(guesthouse.getId())
.name(guesthouse.getName())
.addressRegion(guesthouse.getAddressRegion())
.addressDetail(guesthouse.getAddressDetail())
Expand Down
26 changes: 24 additions & 2 deletions src/main/java/com/sumte/guesthouse/dto/GuesthouseResponseDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

import java.util.List;

import com.sumte.guesthouse.entity.AdType;
import com.sumte.room.dto.RoomResponseDTO;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
Expand All @@ -13,16 +16,16 @@ public class GuesthouseResponseDTO {
@NoArgsConstructor
@AllArgsConstructor
public static class Register {

Long id;
String name;
String addressRegion;
}

@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
public static class Update {
Long id;
String name;
String addressRegion;
String addressDetail;
Expand All @@ -40,4 +43,23 @@ public static class delete {
String addressDetail;
}

@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
public static class GetHouseResponse {
Long id;
String name;
String addressRegion;
String addressDetail;
String information;
String imageUrl;
AdType advertisement;

List<String> optionServices;
List<String> targetAudience;
List<RoomResponseDTO.GetRoomResponse> rooms;

}

}
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
package com.sumte.guesthouse.repository;

import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import com.sumte.guesthouse.entity.mapping.GuesthouseOptionServices;

public interface GuesthouseOptionServicesRepository extends JpaRepository<GuesthouseOptionServices, Long> {
Boolean existsByGuesthouseIdAndOptionServicesId(Long guesthouseId, Long optionServicesId);

void deleteByGuesthouseId(Long guesthouseId);

@Query("SELECT gos.optionServices.name FROM GuesthouseOptionServices gos WHERE gos.guesthouse.id = :guesthouseId")
List<String> findTargetAudienceNamesByGuesthouseId(@Param("guesthouseId") Long guesthouseId);
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
package com.sumte.guesthouse.repository;

import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import com.sumte.guesthouse.entity.mapping.GuesthouseTargetAudience;

public interface GuesthouseTargetAudienceRepository extends JpaRepository<GuesthouseTargetAudience, Long> {
void deleteByGuesthouseId(Long guesthouseId);

@Query("SELECT gta.targetAudience.name FROM GuesthouseTargetAudience gta WHERE gta.guesthouse.id = :guesthouseId")
List<String> findTargetAudienceNamesByGuesthouseId(@Param("guesthouseId") Long guesthouseId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@

@Service
@RequiredArgsConstructor
@Transactional
public class GuesthouseCommandServiceImpl implements GuesthouseCommandService {

private final GuesthouseRepository guesthouseRepository;
Expand All @@ -46,27 +47,31 @@ public GuesthouseResponseDTO.Register registerGuesthouse(GuesthouseRequestDTO.Re

guesthouseRepository.save(guesthouse);

dto.getOptionServices().forEach(optionService -> {
OptionServices optionServices = optionServicesRepository.findByName(optionService).orElseThrow(
() -> new SumteException(CommonErrorCode.OPTIONSERVICE_NOT_EXIST)
);
if (dto.getOptionServices() != null) {
dto.getOptionServices().forEach(optionService -> {
OptionServices optionServices = optionServicesRepository.findByName(optionService).orElseThrow(
() -> new SumteException(CommonErrorCode.OPTIONSERVICE_NOT_EXIST)
);

GuesthouseOptionServices guesthouseOptionServices = new GuesthouseOptionServices();
guesthouseOptionServices.setGuesthouse(guesthouse);
guesthouseOptionServices.setOptionServices(optionServices);
guesthouseOptionServicesRepository.save(guesthouseOptionServices);
});
GuesthouseOptionServices guesthouseOptionServices = new GuesthouseOptionServices();
guesthouseOptionServices.setGuesthouse(guesthouse);
guesthouseOptionServices.setOptionServices(optionServices);
guesthouseOptionServicesRepository.save(guesthouseOptionServices);
});
}

dto.getTargetAudience().forEach(targetAudience -> {
TargetAudience ta = targetAudienceRepository.findByName(targetAudience)
.orElseThrow(() -> new SumteException(CommonErrorCode.TARGETAUDIENCE_NOT_EXIST));
if (dto.getTargetAudience() != null) {
dto.getTargetAudience().forEach(targetAudience -> {
TargetAudience ta = targetAudienceRepository.findByName(targetAudience)
.orElseThrow(() -> new SumteException(CommonErrorCode.TARGETAUDIENCE_NOT_EXIST));

GuesthouseTargetAudience guesthouseTargetAudience = new GuesthouseTargetAudience();
guesthouseTargetAudience.setGuesthouse(guesthouse);
guesthouseTargetAudience.setTargetAudience(ta);
GuesthouseTargetAudience guesthouseTargetAudience = new GuesthouseTargetAudience();
guesthouseTargetAudience.setGuesthouse(guesthouse);
guesthouseTargetAudience.setTargetAudience(ta);

guesthouseTargetAudienceRepository.save(guesthouseTargetAudience);
});
guesthouseTargetAudienceRepository.save(guesthouseTargetAudience);
});
}

GuesthouseResponseDTO.Register result = guesthouseConverter.toRegisterResponseDTO(guesthouse);
return result;
Expand Down Expand Up @@ -138,6 +143,8 @@ public GuesthouseResponseDTO.delete deleteGuesthouse(Long guesthouseId) {
if (guesthouse == null) {
throw new SumteException(CommonErrorCode.NOT_EXIST);
} else {
guesthouseOptionServicesRepository.deleteByGuesthouseId(guesthouseId);
guesthouseTargetAudienceRepository.deleteByGuesthouseId(guesthouseId);
guesthouseRepository.delete(guesthouse);
return GuesthouseResponseDTO.delete.builder()
.name(guesthouse.getName())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,12 @@
import org.springframework.data.domain.Pageable;

import com.sumte.guesthouse.dto.GuesthousePreviewDTO;
import com.sumte.guesthouse.dto.GuesthouseResponseDTO;
import com.sumte.guesthouse.dto.GuesthouseSearchRequestDTO;

public interface GuesthouseQueryService {
GuesthouseResponseDTO.GetHouseResponse getHouseById(Long id);

Page<GuesthousePreviewDTO> getFilteredGuesthouse(GuesthouseSearchRequestDTO dto, Pageable pageable);

}
Original file line number Diff line number Diff line change
@@ -1,19 +1,72 @@
package com.sumte.guesthouse.service;

import java.util.List;
import java.util.stream.Collectors;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

import com.sumte.apiPayload.code.error.CommonErrorCode;
import com.sumte.apiPayload.exception.SumteException;
import com.sumte.guesthouse.dto.GuesthousePreviewDTO;
import com.sumte.guesthouse.dto.GuesthouseResponseDTO;
import com.sumte.guesthouse.dto.GuesthouseSearchRequestDTO;
import com.sumte.guesthouse.entity.Guesthouse;
import com.sumte.guesthouse.repository.GuesthouseOptionServicesRepository;
import com.sumte.guesthouse.repository.GuesthouseRepository;
import com.sumte.guesthouse.repository.GuesthouseRepositoryCustom;
import com.sumte.guesthouse.repository.GuesthouseTargetAudienceRepository;
import com.sumte.room.dto.RoomResponseDTO;

import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;

@Service
@RequiredArgsConstructor
public class GuesthouseQueryServiceImpl implements GuesthouseQueryService {
private final GuesthouseRepository guesthouseRepository;
private final GuesthouseTargetAudienceRepository guesthouseTargetAudienceRepository;
private final GuesthouseOptionServicesRepository guesthouseOptionServicesRepository;

@Override
@Transactional
public GuesthouseResponseDTO.GetHouseResponse getHouseById(Long id) {

Guesthouse guesthouse = guesthouseRepository.findById(id).orElseThrow(
() -> new SumteException(CommonErrorCode.NOT_EXIST)
);

List<String> targetAudiences = guesthouseTargetAudienceRepository.findTargetAudienceNamesByGuesthouseId(id);
List<String> optionServices = guesthouseOptionServicesRepository.findTargetAudienceNamesByGuesthouseId(id);

List<RoomResponseDTO.GetRoomResponse> roomDtos = guesthouse.getRooms().stream()
.map(room -> RoomResponseDTO.GetRoomResponse.builder()
.id(room.getId())
.name(room.getName())
.content(room.getContents())
.price(room.getPrice())
.checkin(room.getCheckin())
.checkout(room.getCheckout())
.standardCount(room.getStandardCount())
.totalCount(room.getTotalCount())
.imageUrl(room.getImageUrl())
.build())
.collect(Collectors.toList());

return GuesthouseResponseDTO.GetHouseResponse.builder()
.id(guesthouse.getId())
.name(guesthouse.getName())
.addressDetail(guesthouse.getAddressDetail())
.addressRegion(guesthouse.getAddressRegion())
.information(guesthouse.getInformation())
.imageUrl(guesthouse.getImageUrl())
.targetAudience(targetAudiences)
.optionServices(optionServices)
.rooms(roomDtos)
.build();
}

private final GuesthouseRepositoryCustom guesthouseRepositoryCustom;

@Override
Expand Down
17 changes: 17 additions & 0 deletions src/main/java/com/sumte/room/controller/RoomController.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.sumte.room.controller;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
Expand All @@ -10,7 +12,9 @@

import com.sumte.apiPayload.ApiResponse;
import com.sumte.room.dto.RoomRequestDTO;
import com.sumte.room.dto.RoomResponseDTO;
import com.sumte.room.service.RoomCommandService;
import com.sumte.room.service.RoomQueryService;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
Expand All @@ -25,6 +29,7 @@
@RequestMapping("/guesthouse")
public class RoomController {
private final RoomCommandService roomCommandService;
private final RoomQueryService roomQueryService;

@PostMapping("/{guesthouseId}/room")
@Operation(summary = "방 추가 api", description = "숙소에 방을 추가하는 api 입니다.")
Expand Down Expand Up @@ -69,4 +74,16 @@ public ApiResponse<Void> updateRoom(
return ApiResponse.successWithNoData();
}

@GetMapping("/room/{roomId}")
@Operation(summary = "방 조회", description = "id기반으로 room을 조회하는 api입니다")
@Parameters({
@Parameter(name = "roomId", description = "방 아이디를 넘겨주세요.")
})
public ResponseEntity<ApiResponse<RoomResponseDTO.GetRoomResponse>> getRoom(
@PathVariable Long roomId
) {
RoomResponseDTO.GetRoomResponse result = roomQueryService.getRoomById(roomId);
return ResponseEntity.ok(ApiResponse.success(result));
}

}
4 changes: 2 additions & 2 deletions src/main/java/com/sumte/room/dto/RoomRequestDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public static class RegisterRoom {
LocalTime checkout;

@NotNull(message = "기준 인원을 입력해주세요")
Long standartCount;
Long standardCount;

@NotNull(message = "최대 인원을 입력해주세요")
Long totalCount;
Expand All @@ -46,7 +46,7 @@ public static class UpdateRoom {
LocalTime checkin;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm:ss")
LocalTime checkout;
Long standartCount;
Long standardCount;
Long totalCount;
String imageUrl;
}
Expand Down
18 changes: 18 additions & 0 deletions src/main/java/com/sumte/room/dto/RoomResponseDTO.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.sumte.room.dto;

import java.time.LocalTime;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
Expand Down Expand Up @@ -31,4 +33,20 @@ public static class Deleted {
String name;
}

@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
public static class GetRoomResponse {
Long id;
String name;
Long price;
Long standardCount;
Long totalCount;
String content;
LocalTime checkin;
LocalTime checkout;
String imageUrl;
}

}
Loading