#26 pharmacy: shorten url

This commit is contained in:
haerong22
2023-01-04 02:56:50 +09:00
parent 0207344263
commit e30964612a
6 changed files with 80 additions and 13 deletions

View File

@@ -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'

View File

@@ -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;
}
}

View File

@@ -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);
}
}

View File

@@ -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)) {

View File

@@ -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();

View File

@@ -36,6 +36,11 @@ spring:
ddl-auto: validate
show-sql: true
pharmacy:
recommendation:
base:
url: http://localhost:8080/dir/
---
spring:
config: