From f45d1bec531a38ca8820804c7438c15b50f08bb2 Mon Sep 17 00:00:00 2001 From: younggyo Date: Sat, 27 Jan 2024 16:22:35 +0900 Subject: [PATCH] feat : create SearchController, Service --- .../controller/SearchController.java | 33 +++++++++++++++++ .../reddiserver/service/SearchService.java | 36 +++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 src/main/java/com/example/reddiserver/controller/SearchController.java create mode 100644 src/main/java/com/example/reddiserver/service/SearchService.java diff --git a/src/main/java/com/example/reddiserver/controller/SearchController.java b/src/main/java/com/example/reddiserver/controller/SearchController.java new file mode 100644 index 0000000..c0f1063 --- /dev/null +++ b/src/main/java/com/example/reddiserver/controller/SearchController.java @@ -0,0 +1,33 @@ +package com.example.reddiserver.controller; + +import com.example.reddiserver.common.ApiResponse; +import com.example.reddiserver.dto.post.response.PostResponseDto; +import com.example.reddiserver.dto.search.response.SearchResponseDto; +import com.example.reddiserver.service.NotionService; +import com.example.reddiserver.service.PostService; +import com.example.reddiserver.service.SearchService; +import io.swagger.v3.oas.annotations.Operation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.PageRequest; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/search") +@Slf4j +public class SearchController { + + private final SearchService searchService; + + @Operation(summary = "검색") + @GetMapping("/") + public ApiResponse getSearchList(@RequestParam String keyword, @RequestParam(defaultValue = "0") int page, @RequestParam(defaultValue = "10") int size) { + SearchResponseDto searchResponseDtoList = searchService.getSearchList(keyword, PageRequest.of(page, size)); + return ApiResponse.successResponse(searchResponseDtoList, "검색 완료"); + } +} diff --git a/src/main/java/com/example/reddiserver/service/SearchService.java b/src/main/java/com/example/reddiserver/service/SearchService.java new file mode 100644 index 0000000..90e12fb --- /dev/null +++ b/src/main/java/com/example/reddiserver/service/SearchService.java @@ -0,0 +1,36 @@ +package com.example.reddiserver.service; + +import com.example.reddiserver.dto.search.response.SearchBrands; +import com.example.reddiserver.dto.search.response.SearchPosts; +import com.example.reddiserver.dto.search.response.SearchResponseDto; +import com.example.reddiserver.repository.BrandRepository; +import com.example.reddiserver.repository.PostRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class SearchService { + private final BrandRepository brandRepository; + private final PostRepository postRepository; + + public SearchResponseDto getSearchList(String keyword, Pageable pageable) { + List posts = postRepository.findByTitleContainingOrContentContaining("%"+keyword+"%", pageable).getContent().stream() + .map(SearchPosts::convertPostToSearchPosts) + .collect(Collectors.toList()); + List brands = brandRepository.findByNameContainingOrContentContaining("%"+keyword+"%", pageable).getContent().stream() + .map(SearchBrands::convertBrandToSearchBrands) + .collect(Collectors.toList()); + + return SearchResponseDto.builder() + .posts(posts) + .brands(brands) + .build(); + } +}