#26 pharmacy: shorten url
This commit is contained in:
@@ -28,6 +28,8 @@ dependencies {
|
||||
implementation 'org.springframework.boot:spring-boot-starter-web'
|
||||
implementation 'org.springframework.retry:spring-retry'
|
||||
|
||||
implementation 'io.seruco.encoding:base62:0.1.3'
|
||||
|
||||
// handlebars
|
||||
implementation 'pl.allegro.tech.boot:handlebars-spring-boot-starter:0.3.4'
|
||||
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.example.road.direction.controller;
|
||||
|
||||
import com.example.road.direction.entity.Direction;
|
||||
import com.example.road.direction.service.DirectionService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.util.UriComponentsBuilder;
|
||||
|
||||
@Slf4j
|
||||
@Controller
|
||||
@RequiredArgsConstructor
|
||||
public class DirectionController {
|
||||
|
||||
private final DirectionService directionService;
|
||||
private static final String DIRECTION_BASE_URL = "https://map.kakao.com/link/map/";
|
||||
|
||||
@GetMapping("/dir/{encodedId}")
|
||||
public String searchDirection(@PathVariable("encodedId") String encodedId) {
|
||||
Direction resultDirection = directionService.findById(encodedId);
|
||||
|
||||
String directionParams = String.join(
|
||||
",",
|
||||
resultDirection.getTargetPharmacyName(),
|
||||
String.valueOf(resultDirection.getTargetLatitude()),
|
||||
String.valueOf(resultDirection.getTargetLongitude())
|
||||
);
|
||||
|
||||
String directionUrl = UriComponentsBuilder
|
||||
.fromHttpUrl(DIRECTION_BASE_URL + directionParams)
|
||||
.toUriString();
|
||||
|
||||
return "redirect:" + directionUrl;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.example.road.direction.service;
|
||||
|
||||
import io.seruco.encoding.base62.Base62;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class Base62Service {
|
||||
|
||||
private static final Base62 base62Instance = Base62.createInstance();
|
||||
|
||||
public String encodeDirectionId(Long directionId) {
|
||||
return new String(base62Instance.encode(String.valueOf(directionId).getBytes()));
|
||||
}
|
||||
|
||||
public Long decodeDirectionId(String encodeDirectionId) {
|
||||
String result = new String(base62Instance.decode(encodeDirectionId.getBytes()));
|
||||
return Long.valueOf(result);
|
||||
}
|
||||
}
|
||||
@@ -28,6 +28,7 @@ public class DirectionService {
|
||||
private final PharmacySearchService pharmacySearchService;
|
||||
private final DirectionRepository directionRepository;
|
||||
private final KakaoCategorySearchService kakaoCategorySearchService;
|
||||
private final Base62Service base62Service;
|
||||
|
||||
@Transactional
|
||||
public List<Direction> saveAll(List<Direction> directionList) {
|
||||
@@ -38,6 +39,11 @@ public class DirectionService {
|
||||
return directionRepository.saveAll(directionList);
|
||||
}
|
||||
|
||||
public Direction findById(String encodedId) {
|
||||
Long decodedId = base62Service.decodeDirectionId(encodedId);
|
||||
return directionRepository.findById(decodedId).orElse(null);
|
||||
}
|
||||
|
||||
public List<Direction> buildDirectionList(DocumentDto documentDto) {
|
||||
|
||||
if (Objects.isNull(documentDto)) {
|
||||
|
||||
@@ -5,9 +5,11 @@ import com.example.road.api.dto.KakaoApiResponseDto;
|
||||
import com.example.road.api.service.KakaoAddressSearchService;
|
||||
import com.example.road.direction.dto.OutputDto;
|
||||
import com.example.road.direction.entity.Direction;
|
||||
import com.example.road.direction.service.Base62Service;
|
||||
import com.example.road.direction.service.DirectionService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.web.util.UriComponentsBuilder;
|
||||
@@ -24,9 +26,12 @@ public class PharmacyRecommendationService {
|
||||
|
||||
private final KakaoAddressSearchService kakaoAddressSearchService;
|
||||
private final DirectionService directionService;
|
||||
private final Base62Service base62Service;
|
||||
|
||||
@Value("${pharmacy.recommendation.base.url}")
|
||||
private String baseUrl;
|
||||
|
||||
private static final String ROAD_VIEW_BASE_URL = "https://map.kakao.com/link/roadview/";
|
||||
private static final String DIRECTION_BASE_URL = "https://map.kakao.com/link/map/";
|
||||
|
||||
public List<OutputDto> recommendPharmacyList(String address) {
|
||||
|
||||
@@ -51,17 +56,6 @@ public class PharmacyRecommendationService {
|
||||
}
|
||||
|
||||
private OutputDto convertToOutputDto(Direction direction) {
|
||||
String directionParams = String.join(
|
||||
",",
|
||||
direction.getTargetPharmacyName(),
|
||||
String.valueOf(direction.getTargetLatitude()),
|
||||
String.valueOf(direction.getTargetLongitude())
|
||||
);
|
||||
|
||||
String directionUrl = UriComponentsBuilder
|
||||
.fromHttpUrl(DIRECTION_BASE_URL + directionParams)
|
||||
.toUriString();
|
||||
|
||||
String roadViewParams = String.join(
|
||||
",",
|
||||
String.valueOf(direction.getTargetLatitude()),
|
||||
@@ -75,7 +69,7 @@ public class PharmacyRecommendationService {
|
||||
return OutputDto.builder()
|
||||
.pharmacyName(direction.getTargetPharmacyName())
|
||||
.pharmacyAddress(direction.getTargetAddress())
|
||||
.directionUrl(directionUrl)
|
||||
.directionUrl(baseUrl + base62Service.encodeDirectionId(direction.getId()))
|
||||
.roadViewUrl(roadViewUrl)
|
||||
.distance(String.format("%.2f km", direction.getDistance()))
|
||||
.build();
|
||||
|
||||
@@ -36,6 +36,11 @@ spring:
|
||||
ddl-auto: validate
|
||||
show-sql: true
|
||||
|
||||
pharmacy:
|
||||
recommendation:
|
||||
base:
|
||||
url: http://localhost:8080/dir/
|
||||
|
||||
---
|
||||
spring:
|
||||
config:
|
||||
|
||||
Reference in New Issue
Block a user