Skip to content

Commit

Permalink
Merge pull request #29 from HongikGraduationProject/geocode
Browse files Browse the repository at this point in the history
Geocode
  • Loading branch information
qjvk2880 authored Aug 1, 2024
2 parents 15c49d0 + b86b579 commit f0df598
Show file tree
Hide file tree
Showing 11 changed files with 181 additions and 54 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.hongik.graduationproject.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestClient;

@Configuration
public class RestClientConfig {
@Bean
public RestClient restClient(RestClient.Builder builder) {
return builder.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.hongik.graduationproject.domain.dto.geocode;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@JsonIgnoreProperties(ignoreUnknown = true)
@AllArgsConstructor
@NoArgsConstructor
public class Address {
@JsonProperty("x")
String x;
@JsonProperty("y")
String y;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.hongik.graduationproject.domain.dto.geocode;

import java.util.List;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@JsonIgnoreProperties(ignoreUnknown = true)
@AllArgsConstructor
@NoArgsConstructor
public class NaverGeocodeResponse {
@JsonProperty("addresses")
private List<Address> addresses;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.hongik.graduationproject.domain.dto.video;

import lombok.AllArgsConstructor;
import lombok.Getter;

@AllArgsConstructor
@Getter
public class Coordinate {
private Double latitude;
private Double longitude;
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.hongik.graduationproject.domain.entity.VideoSummary;
import com.hongik.graduationproject.domain.entity.VideoSummaryCategory;
import com.hongik.graduationproject.enums.Platform;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
Expand All @@ -18,51 +19,55 @@
@NoArgsConstructor
@Builder
public class VideoSummaryDto {
@JsonProperty("video_code")
String videoCode;
String title;
String description;
List<String> keywords;
String url;
String summary;
String address;
LocalDateTime createdAt;
Platform platform;
String mainCategory;
int mainCategoryIndex;
String subCategory;
Long subCategoryId;
@JsonProperty("video_code")
String videoCode;
String title;
String description;
List<String> keywords;
String url;
String summary;
String address;
LocalDateTime createdAt;
Platform platform;
String mainCategory;
int mainCategoryIndex;
String subCategory;
Long subCategoryId;
Double latitude;
Double longitude;

public static VideoSummaryDto from(VideoSummary videoSummary) {
return VideoSummaryDto.builder()
.videoCode(videoSummary.getVideoCode())
.title(videoSummary.getTitle())
.description(videoSummary.getDescription())
.keywords(Arrays.stream(videoSummary.getKeywords().split(",")).toList())
.url(videoSummary.getUrl())
.summary(videoSummary.getSummary())
.address(videoSummary.getAddress())
.createdAt(videoSummary.getCreatedAt().minusHours(9))
.platform(videoSummary.getPlatform())
.mainCategory(videoSummary.getGeneratedMainCategory().getName())
.build();
}
public static VideoSummaryDto from(VideoSummary videoSummary) {
return VideoSummaryDto.builder()
.videoCode(videoSummary.getVideoCode())
.title(videoSummary.getTitle())
.description(videoSummary.getDescription())
.keywords(Arrays.stream(videoSummary.getKeywords().split(",")).toList())
.url(videoSummary.getUrl())
.summary(videoSummary.getSummary())
.address(videoSummary.getAddress())
.createdAt(videoSummary.getCreatedAt().minusHours(9))
.platform(videoSummary.getPlatform())
.mainCategory(videoSummary.getGeneratedMainCategory().getName())
.build();
}

public static VideoSummaryDto from(VideoSummaryCategory videoSummaryCategory) {
return VideoSummaryDto.builder()
.videoCode(videoSummaryCategory.getVideoSummary().getVideoCode())
.title(videoSummaryCategory.getVideoSummary().getTitle())
.description(videoSummaryCategory.getVideoSummary().getDescription())
.keywords(Arrays.stream(videoSummaryCategory.getVideoSummary().getKeywords().split(",")).toList())
.url(videoSummaryCategory.getVideoSummary().getUrl())
.summary(videoSummaryCategory.getVideoSummary().getSummary())
.address(videoSummaryCategory.getVideoSummary().getAddress())
.createdAt(videoSummaryCategory.getVideoSummary().getCreatedAt().minusHours(9))
.platform(videoSummaryCategory.getVideoSummary().getPlatform())
.mainCategory(videoSummaryCategory.getVideoSummary().getGeneratedMainCategory().getName())
.mainCategoryIndex(videoSummaryCategory.getVideoSummary().getGeneratedMainCategory().getIndex())
.subCategory(videoSummaryCategory.getCategory().getSubCategory())
.subCategoryId(videoSummaryCategory.getCategory().getId())
.build();
}
public static VideoSummaryDto from(VideoSummaryCategory videoSummaryCategory) {
return VideoSummaryDto.builder()
.videoCode(videoSummaryCategory.getVideoSummary().getVideoCode())
.title(videoSummaryCategory.getVideoSummary().getTitle())
.description(videoSummaryCategory.getVideoSummary().getDescription())
.keywords(Arrays.stream(videoSummaryCategory.getVideoSummary().getKeywords().split(",")).toList())
.url(videoSummaryCategory.getVideoSummary().getUrl())
.summary(videoSummaryCategory.getVideoSummary().getSummary())
.address(videoSummaryCategory.getVideoSummary().getAddress())
.createdAt(videoSummaryCategory.getVideoSummary().getCreatedAt().minusHours(9))
.platform(videoSummaryCategory.getVideoSummary().getPlatform())
.mainCategory(videoSummaryCategory.getVideoSummary().getGeneratedMainCategory().getName())
.mainCategoryIndex(videoSummaryCategory.getVideoSummary().getGeneratedMainCategory().getIndex())
.subCategory(videoSummaryCategory.getCategory().getSubCategory())
.subCategoryId(videoSummaryCategory.getCategory().getId())
.latitude(videoSummaryCategory.getVideoSummary().getLatitude())
.longitude(videoSummaryCategory.getVideoSummary().getLongitude())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ public class VideoSummary extends BaseTimeEntity {
private boolean isDeleted = false;
@Column(name = "deleted_at")
private LocalDateTime deletedAt;
private Double latitude;
private Double longitude;

public static VideoSummary of(VideoSummaryMessage videoSummaryMessage) {
return VideoSummary
Expand Down Expand Up @@ -75,4 +77,12 @@ public void restore() {
this.isDeleted = false;
this.deletedAt = null;
}

public void updateLatitude(Double latitude) {
this.latitude = latitude;
}

public void updateLongitude(Double longitude) {
this.longitude = longitude;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,5 @@ public static MainCategory find(String name) {
}
}
return OTHER;
// if (name == null) {
// return MainCategory.OTHER;
// }
// return Arrays.stream(values())
// .filter(accountStatus -> accountStatus.name.equals(name))
// .findAny()
// .orElseThrow(RuntimeException::new);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.hongik.graduationproject.service;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestClient;

import com.hongik.graduationproject.domain.dto.geocode.NaverGeocodeResponse;
import com.hongik.graduationproject.domain.dto.video.Coordinate;

import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
@Service
public class GeocodeService {
private final RestClient restClient;

@Value("${naver.geocode.url}")
private String naverGeocodeUrl;
@Value("${naver.geocode.id}")
private String naverGeocodeId;
@Value("${naver.geocode.secret}")
private String naverGeocodeSecret;

public Coordinate getCoordinateByAddress(String address) {
NaverGeocodeResponse result = restClient.get()
.uri(naverGeocodeUrl + "?query=" + address)
.header("X-NCP-APIGW-API-KEY-ID", naverGeocodeId)
.header("X-NCP-APIGW-API-KEY", naverGeocodeSecret)
.retrieve()
.body(NaverGeocodeResponse.class);

System.out.println("result = " + result);

if (result.getAddresses() == null || result.getAddresses().isEmpty()) {
return null;
}

return new Coordinate(
Double.valueOf(result.getAddresses().get(0).getY()),
Double.valueOf(result.getAddresses().get(0).getX())
);
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.hongik.graduationproject.service;

import com.hongik.graduationproject.domain.dto.video.Coordinate;
import com.hongik.graduationproject.domain.dto.video.VideoSummaryInitiateMessage;
import com.hongik.graduationproject.domain.dto.video.VideoSummaryMessage;
import com.hongik.graduationproject.domain.entity.Category;
import com.hongik.graduationproject.domain.entity.VideoSummary;
import com.hongik.graduationproject.domain.entity.cache.VideoSummaryStatusCache;
import com.hongik.graduationproject.enums.MainCategory;
Expand All @@ -29,6 +29,7 @@ public class MessageService {
private final RabbitTemplate rabbitTemplate;
private final VideoSummaryStatusCacheRepository videoSummaryStatusCacheRepository;
private final VideoSummaryRepository videoSummaryRepository;
private final GeocodeService geocodeService;

public void sendVideoUrlToQueue(VideoSummaryInitiateMessage videoSummaryInitiateMessage) {
log.info("Sent url: {}, videoCode: {}", videoSummaryInitiateMessage.getUrl(), videoSummaryInitiateMessage.getVideoCode());
Expand All @@ -42,6 +43,14 @@ public void receiveVideoUrlFromQueue(VideoSummaryMessage videoSummaryMessage) {

VideoSummary savedVideoSummary = videoSummaryRepository.save(VideoSummary.of(videoSummaryMessage));

Coordinate coordinate = null;
if (savedVideoSummary.getAddress() != null && !savedVideoSummary.getAddress().isEmpty()) {
coordinate = geocodeService.getCoordinateByAddress(savedVideoSummary.getAddress());
System.out.println("savedVideoSummary = " + savedVideoSummary.getAddress());
}
savedVideoSummary.updateLatitude(coordinate.getLatitude());
savedVideoSummary.updateLongitude(coordinate.getLongitude());

updateStatusCache(videoSummaryMessage, savedVideoSummary);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,6 @@ private boolean checkDuplicateSummarizing(String videoCode, Long userId) {
summaryStatusCacheRepository.existsByVideoCodeAndUserId(videoCode, userId);
}

// 무조건 중복허용이 안되는 로직
public VideoSummaryDto getSummaryByVideoSummaryId(Long videoSummaryId, Long userId) {
VideoSummary videoSummary = videoSummaryRepository.getReferenceById(videoSummaryId);
User user = userRepository.getReferenceById(userId);
Expand Down
6 changes: 6 additions & 0 deletions src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,3 +46,9 @@ rabbitmq:
url.routing.key: url.key
summary.queue.name: summary.queue
summary.routing.key: summary.key

naver:
geocode:
url: https://naveropenapi.apigw.ntruss.com/map-geocode/v2/geocode
id: ${X-NCP-APIGW-API-KEY-ID}
secret: ${X-NCP-APIGW-API-KEY}

0 comments on commit f0df598

Please sign in to comment.