#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.boot:spring-boot-starter-web'
|
||||||
implementation 'org.springframework.retry:spring-retry'
|
implementation 'org.springframework.retry:spring-retry'
|
||||||
|
|
||||||
|
implementation 'io.seruco.encoding:base62:0.1.3'
|
||||||
|
|
||||||
// handlebars
|
// handlebars
|
||||||
implementation 'pl.allegro.tech.boot:handlebars-spring-boot-starter:0.3.4'
|
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 PharmacySearchService pharmacySearchService;
|
||||||
private final DirectionRepository directionRepository;
|
private final DirectionRepository directionRepository;
|
||||||
private final KakaoCategorySearchService kakaoCategorySearchService;
|
private final KakaoCategorySearchService kakaoCategorySearchService;
|
||||||
|
private final Base62Service base62Service;
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public List<Direction> saveAll(List<Direction> directionList) {
|
public List<Direction> saveAll(List<Direction> directionList) {
|
||||||
@@ -38,6 +39,11 @@ public class DirectionService {
|
|||||||
return directionRepository.saveAll(directionList);
|
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) {
|
public List<Direction> buildDirectionList(DocumentDto documentDto) {
|
||||||
|
|
||||||
if (Objects.isNull(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.api.service.KakaoAddressSearchService;
|
||||||
import com.example.road.direction.dto.OutputDto;
|
import com.example.road.direction.dto.OutputDto;
|
||||||
import com.example.road.direction.entity.Direction;
|
import com.example.road.direction.entity.Direction;
|
||||||
|
import com.example.road.direction.service.Base62Service;
|
||||||
import com.example.road.direction.service.DirectionService;
|
import com.example.road.direction.service.DirectionService;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
import org.springframework.web.util.UriComponentsBuilder;
|
import org.springframework.web.util.UriComponentsBuilder;
|
||||||
@@ -24,9 +26,12 @@ public class PharmacyRecommendationService {
|
|||||||
|
|
||||||
private final KakaoAddressSearchService kakaoAddressSearchService;
|
private final KakaoAddressSearchService kakaoAddressSearchService;
|
||||||
private final DirectionService directionService;
|
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 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) {
|
public List<OutputDto> recommendPharmacyList(String address) {
|
||||||
|
|
||||||
@@ -51,17 +56,6 @@ public class PharmacyRecommendationService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private OutputDto convertToOutputDto(Direction direction) {
|
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 roadViewParams = String.join(
|
||||||
",",
|
",",
|
||||||
String.valueOf(direction.getTargetLatitude()),
|
String.valueOf(direction.getTargetLatitude()),
|
||||||
@@ -75,7 +69,7 @@ public class PharmacyRecommendationService {
|
|||||||
return OutputDto.builder()
|
return OutputDto.builder()
|
||||||
.pharmacyName(direction.getTargetPharmacyName())
|
.pharmacyName(direction.getTargetPharmacyName())
|
||||||
.pharmacyAddress(direction.getTargetAddress())
|
.pharmacyAddress(direction.getTargetAddress())
|
||||||
.directionUrl(directionUrl)
|
.directionUrl(baseUrl + base62Service.encodeDirectionId(direction.getId()))
|
||||||
.roadViewUrl(roadViewUrl)
|
.roadViewUrl(roadViewUrl)
|
||||||
.distance(String.format("%.2f km", direction.getDistance()))
|
.distance(String.format("%.2f km", direction.getDistance()))
|
||||||
.build();
|
.build();
|
||||||
|
|||||||
@@ -36,6 +36,11 @@ spring:
|
|||||||
ddl-auto: validate
|
ddl-auto: validate
|
||||||
show-sql: true
|
show-sql: true
|
||||||
|
|
||||||
|
pharmacy:
|
||||||
|
recommendation:
|
||||||
|
base:
|
||||||
|
url: http://localhost:8080/dir/
|
||||||
|
|
||||||
---
|
---
|
||||||
spring:
|
spring:
|
||||||
config:
|
config:
|
||||||
|
|||||||
Reference in New Issue
Block a user