프로젝트/네이버 api를 이용한 검색사이트
네이버 api를 이용한 검색 사이트 (4)
lroot
2022. 10. 6. 02:27
728x90
반응형
1. service 구현
- WishListService
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | package com.example.search.wishlist.service; import com.example.search.naver.NaverClient; import com.example.search.naver.dto.SearchImageReq; import com.example.search.naver.dto.SearchLocalReq; import com.example.search.wishlist.dto.WishListDto; import com.example.search.wishlist.entity.WishListEntity; import com.example.search.wishlist.repository.WishListRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.List; import java.util.stream.Collectors; @Service @RequiredArgsConstructor public class WishListService { private final NaverClient naverClient; private final WishListRepository wishListRepository; public WishListDto search(String query){ // 지역 검색 var searchLocalReq = new SearchLocalReq(); searchLocalReq.setQuery(query); var searchLocalRes = naverClient.searchLocal(searchLocalReq); if(searchLocalRes.getTotal() > 0) { var localItem = searchLocalRes.getItems().stream().findFirst().get(); // 이미지 검색 var imageQuery = localItem.getTitle().replaceAll("<[^>]*>", ""); var searchImageReq = new SearchImageReq(); searchImageReq.setQuery(imageQuery); var searchImageRes = naverClient.searchImage(searchImageReq); if(searchImageRes.getTotal() > 0) { var imageItem = searchImageRes.getItems().stream().findFirst().get(); // 결과를 리턴 var result = new WishListDto(); result.setTitle(localItem.getTitle()); result.setCategory(localItem.getCategory()); result.setAddress(localItem.getAddress()); result.setRoadAddress(localItem.getRoadAddress()); result.setHomePageLink(localItem.getLink()); result.setImageLink(imageItem.getLink()); return result; } } return new WishListDto(); } // db에 있는 MemoryDbEntity에 데이터 등록 public WishListDto add(WishListDto wishListDto) { var entity = dtoToEntity(wishListDto); var saveEntity = wishListRepository.save(entity); return entityToDto(saveEntity); } private WishListEntity dtoToEntity(WishListDto wishListDto) { var entity = new WishListEntity(); entity.setIndex(wishListDto.getIndex()); entity.setTitle(wishListDto.getTitle()); entity.setCategory(wishListDto.getCategory()); entity.setAddress(wishListDto.getAddress()); entity.setRoadAddress(wishListDto.getRoadAddress()); entity.setHomePageLink(wishListDto.getHomePageLink()); entity.setImageLink(wishListDto.getImageLink()); entity.setVisit(wishListDto.isVisit()); entity.setVisitCount(wishListDto.getVisitCount()); entity.setLastVisitDate(wishListDto.getLastVisitDate()); return entity; } private WishListDto entityToDto(WishListEntity wishListEntity) { var dto = new WishListDto(); dto.setIndex(wishListEntity.getIndex()); dto.setTitle(wishListEntity.getTitle()); dto.setCategory(wishListEntity.getCategory()); dto.setAddress(wishListEntity.getAddress()); dto.setRoadAddress(wishListEntity.getRoadAddress()); dto.setHomePageLink(wishListEntity.getHomePageLink()); dto.setImageLink(wishListEntity.getImageLink()); dto.setVisit(wishListEntity.isVisit()); dto.setVisitCount(wishListEntity.getVisitCount()); dto.setLastVisitDate(wishListEntity.getLastVisitDate()); return dto; } public List<WishListDto> findAll() { return wishListRepository.findAll() .stream() .map(it -> entityToDto(it)) .collect(Collectors.toList()); } public void delete(int index) { wishListRepository.deleteById(index); } public void addVisit(int index) { var wishItem = wishListRepository.findById(index); if(wishItem.isPresent()) { var item = wishItem.get(); item.setVisit(true); item.setVisitCount(item.getVisitCount()+1); } } } | cs |
2. controller 구현
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | package com.example.search.wishlist.controller; import com.example.search.wishlist.dto.WishListDto; import com.example.search.wishlist.service.WishListService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import java.util.List; @Slf4j @RestController @RequestMapping("/api") @RequiredArgsConstructor public class ApiController { private final WishListService wishListService; @GetMapping("/search") public WishListDto search(@RequestParam String query){ return wishListService.search(query); } @PostMapping("") public WishListDto add(@RequestBody WishListDto wishListDto) { log.info("{}", wishListDto); return wishListService.add(wishListDto); } @GetMapping("/all") public List<WishListDto> findAll() { return wishListService.findAll(); } @DeleteMapping("/{index}") public void delete(@PathVariable int index) { wishListService.delete(index); } @PostMapping("/{index}") public void addVisit(@PathVariable int index) { wishListService.addVisit(index); } } | cs |