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

[feat] 식당 검색을 위한 네이버 검색 api 연결 #57

Merged
merged 6 commits into from
Jul 13, 2024
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
2 changes: 1 addition & 1 deletion server-yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import org.hankki.hankkiserver.common.exception.NotFoundException;
import org.hankki.hankkiserver.common.exception.UnauthorizedException;

import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

Expand Down Expand Up @@ -39,6 +40,12 @@ public HankkiResponse<Void> handleConflictException(ConflictException e) {
return HankkiResponse.fail(e.getErrorCode());
}

@ExceptionHandler(MissingServletRequestParameterException.class)
public HankkiResponse<Void> handleMissingServletRequestParameterException(MissingServletRequestParameterException e) {
log.error("handleMissingServletRequestParameterException() in GlobalExceptionHandler throw MissingServletRequestParameterException : {}", e.getMessage());
return HankkiResponse.fail(BusinessErrorCode.BAD_REQUEST);
}

@ExceptionHandler(Exception.class)
public HankkiResponse<Void> handleException(Exception e) {
log.error("handleException() in GlobalExceptionHandler throw Exception : {}", e.getMessage());
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package org.hankki.hankkiserver.api.external.controller;

import lombok.RequiredArgsConstructor;
import org.hankki.hankkiserver.api.dto.HankkiResponse;
import org.hankki.hankkiserver.api.external.service.OpenApiService;
import org.hankki.hankkiserver.api.external.service.response.LocationsResponse;
import org.hankki.hankkiserver.common.code.CommonSuccessCode;
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/v1")
public class OpenApiController {

private final OpenApiService openApiService;

@GetMapping("/locations")
public HankkiResponse<LocationsResponse> getLocations(@RequestParam final String query) {
return HankkiResponse.success(CommonSuccessCode.OK, openApiService.getLocations(query));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package org.hankki.hankkiserver.api.external.service;

import lombok.RequiredArgsConstructor;
import org.hankki.hankkiserver.api.external.service.response.LocationResponse;
import org.hankki.hankkiserver.api.external.service.response.LocationsResponse;
import org.hankki.hankkiserver.external.openfeign.naver.dto.NaverLocationsDto;
import org.hankki.hankkiserver.external.openfeign.naver.NaverFeignClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class OpenApiService {

@Value("${naver.clientId}")
private String clientId;
@Value("${naver.clientSecret}")
private String clientSecret;
private static final int DEFAULT_SEARCH_SIZE = 5;

private final NaverFeignClient naverFeignClient;

public LocationsResponse getLocations(final String query) {
NaverLocationsDto locationsDto = naverFeignClient.getLocationInfo(clientId, clientSecret, query, DEFAULT_SEARCH_SIZE);
return LocationsResponse.of(locationsDto.items().stream()
.map(LocationResponse::of)
.toList());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package org.hankki.hankkiserver.api.external.service.response;

import org.hankki.hankkiserver.external.openfeign.naver.dto.NaverLocationInfo;

public record LocationResponse(double latitude, double longitude, String name, String address) {
private static final int RATIO = 10000000;
public static LocationResponse of(NaverLocationInfo location) {
return new LocationResponse(location.mapy()/RATIO, location.mapx()/RATIO, location.title(), location.address());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package org.hankki.hankkiserver.api.external.service.response;

import java.util.List;

public record LocationsResponse(
List<LocationResponse> locations
) {
public static LocationsResponse of(List<LocationResponse> locations) {
return new LocationsResponse(locations);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
@RequiredArgsConstructor
public enum BusinessErrorCode implements ErrorCode {

BAD_REQUEST(HttpStatus.BAD_REQUEST, "잘못된 요청입니다."),
INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "서버 내부 오류가 발생했습니다.");

private final HttpStatus httpStatus;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package org.hankki.hankkiserver.external.openfeign.naver;

import org.hankki.hankkiserver.external.openfeign.naver.dto.NaverLocationsDto;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestParam;

@FeignClient(name = "naverClient", url = "https://openapi.naver.com")
public interface NaverFeignClient {
@GetMapping("/v1/search/local.json")
NaverLocationsDto getLocationInfo(
@RequestHeader("X-Naver-Client-Id") String clientId,
@RequestHeader("X-Naver-Client-Secret") String clientSecret,
@RequestParam("query") String query,
@RequestParam("display") int display
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package org.hankki.hankkiserver.external.openfeign.naver.dto;

public record NaverLocationInfo(double mapy, double mapx, String title, String address) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package org.hankki.hankkiserver.external.openfeign.naver.dto;

import java.util.List;

public record NaverLocationsDto(List<NaverLocationInfo> items) {
}
Loading