Skip to content

Commit

Permalink
[Feat] Accommodation 검색 pagination 구현
Browse files Browse the repository at this point in the history
[Feat] Accommodation 검색 pagination 구현
  • Loading branch information
MoonInbae authored Oct 13, 2024
2 parents 2c7f686 + 9284b76 commit a75d660
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 24 deletions.
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
package org.alongtheblue.alongtheblue_server.global.data.accommodation;

import org.alongtheblue.alongtheblue_server.global.data.global.SimpleInformation;
import org.alongtheblue.alongtheblue_server.global.data.search.SearchInformation;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;
import java.util.Optional;

@Repository
public interface AccommodationRepository extends JpaRepository<Accommodation, Long> {
Expand Down Expand Up @@ -44,6 +43,7 @@ public interface AccommodationRepository extends JpaRepository<Accommodation, Lo
+ "ORDER BY RAND()", nativeQuery = true)
List<AccommodationDTO> findAccommodationsWithTwoImages();

List<Accommodation> findByTitleContaining(String keyword);
@Query("SELECT a FROM Accommodation a JOIN a.images i WHERE a.title LIKE %:keyword% GROUP BY a HAVING COUNT(i) > 0")
Page<SearchInformation> findByTitleContaining(String keyword, Pageable pageable);
}

Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.alongtheblue.alongtheblue_server.global.data.global.SimpleInformation;
import org.alongtheblue.alongtheblue_server.global.data.global.dto.response.DetailResponseDto;
import org.alongtheblue.alongtheblue_server.global.data.global.dto.response.HomeResponseDto;
import org.alongtheblue.alongtheblue_server.global.data.search.SearchInformation;
import org.alongtheblue.alongtheblue_server.global.data.weather.WeatherRepository;
import org.alongtheblue.alongtheblue_server.global.data.weather.WeatherResponseDto;
import org.alongtheblue.alongtheblue_server.global.data.weather.WeatherService;
Expand Down Expand Up @@ -466,23 +467,34 @@ private Mono<Void> fetchAndSaveAccommodationImage(Accommodation accommodation) {
.then();
}

public ApiResponse<List<AccommodationResponseDto>> getAccommodationsByKeyword(String keyword) {
List<Accommodation> accommodations = accommodationRepository.findByTitleContaining(keyword);
List<AccommodationResponseDto> accommodationResponseDtoList = new ArrayList<>();
for(Accommodation accommodation : accommodations) {
String[] arr = accommodation.getAddress().substring(8).split(" ");
AccommodationResponseDto accommodationResponseDto = new AccommodationResponseDto(
arr[0] + " " + arr[1],
accommodation.getTitle(),
accommodation.getContentId(),
accommodation.getImages().isEmpty() ? null : accommodation.getImages().get(0).getOriginimgurl(),
accommodation.getXMap(),
accommodation.getYMap(),
"tourData"
);
accommodationResponseDtoList.add(accommodationResponseDto);
}
return ApiResponse.ok("숙박 정보를 성공적으로 검색했습니다.", accommodationResponseDtoList);
public ApiResponse<CustomPage<SearchInformation>> getAccommodationsByKeyword(String keyword, int page, int size) {
Pageable pageable = PageRequest.of(page, size);

// 1. Restaurant 기준으로 페이징 처리된 데이터를 조회
Page<SearchInformation> accommodationPage = accommodationRepository.findByTitleContaining(keyword, pageable);

// CustomPage 객체로 변환 (기존 페이지네이션 정보와 category를 함께 담음)
CustomPage<SearchInformation> customPage = new CustomPage<>(
accommodationPage.getContent(), pageable, accommodationPage.getTotalElements(), Category.ACCOMMODATION.getValue());

// ApiResponse로 반환
return ApiResponse.ok("숙소 목록을 성공적으로 조회했습니다.", customPage);
// List<Accommodation> accommodations = accommodationRepository.findByTitleContaining(keyword);
// List<AccommodationResponseDto> accommodationResponseDtoList = new ArrayList<>();
// for(Accommodation accommodation : accommodations) {
// String[] arr = accommodation.getAddress().substring(8).split(" ");
// AccommodationResponseDto accommodationResponseDto = new AccommodationResponseDto(
// arr[0] + " " + arr[1],
// accommodation.getTitle(),
// accommodation.getContentId(),
// accommodation.getImages().isEmpty() ? null : accommodation.getImages().get(0).getOriginimgurl(),
// accommodation.getXMap(),
// accommodation.getYMap(),
// "tourData"
// );
// accommodationResponseDtoList.add(accommodationResponseDto);
// }
// return ApiResponse.ok("숙박 정보를 성공적으로 검색했습니다.", accommodationResponseDtoList);
}

// API 응답을 매핑하기 위한 클래스
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,8 @@ public ApiResponse<List<TourDataResponseDto>> getTourDataList() {

@GetMapping("/tourData")
public ApiResponse<CustomPage<SearchInformation>> getTourDataListByKeyword(@RequestParam String keyword,
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size) {
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size) {
return tourDataService.getTourDataListByKeyword(keyword, page, size);
}

Expand All @@ -94,8 +94,10 @@ public ApiResponse<List<AccommodationResponseDto>> getAccommodationHome() {
}

@GetMapping("/accommodation")
public ApiResponse<List<AccommodationResponseDto>> getAccommodationsByKeyword(@RequestParam String keyword) {
return accommodationService.getAccommodationsByKeyword(keyword);
public ApiResponse<CustomPage<SearchInformation>> getAccommodationsByKeyword(@RequestParam String keyword,
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size) {
return accommodationService.getAccommodationsByKeyword(keyword, page, size);
}

}

0 comments on commit a75d660

Please sign in to comment.