11package com .day_walk .backend .domain .click_log .service ;
22
3+ import com .day_walk .backend .domain .category .bean .GetCategoryEntityBean ;
4+ import com .day_walk .backend .domain .category .data .CategoryEntity ;
5+ import com .day_walk .backend .domain .click_log .data .in .GetClickLogByTop4 ;
36import com .day_walk .backend .domain .click_log .data .in .SaveClickLogDto ;
47import com .day_walk .backend .domain .click_log .data .out .SaveClickLogByElkDto ;
8+ import com .day_walk .backend .domain .place .bean .GetPlaceEntityBean ;
9+ import com .day_walk .backend .domain .place .data .PlaceEntity ;
10+ import com .day_walk .backend .domain .place .data .out .GetPlaceByTop4 ;
11+ import com .day_walk .backend .domain .sub_category .bean .GetSubCategoryEntityBean ;
12+ import com .day_walk .backend .domain .sub_category .data .SubCategoryEntity ;
513import com .day_walk .backend .global .error .CustomException ;
614import com .day_walk .backend .global .error .ErrorCode ;
715import lombok .RequiredArgsConstructor ;
816import lombok .extern .slf4j .Slf4j ;
917import org .springframework .beans .factory .annotation .Value ;
18+ import org .springframework .core .ParameterizedTypeReference ;
1019import org .springframework .http .*;
1120import org .springframework .stereotype .Service ;
1221import org .springframework .web .client .HttpStatusCodeException ;
1322import org .springframework .web .client .RestTemplate ;
1423import org .springframework .web .util .UriComponents ;
1524import org .springframework .web .util .UriComponentsBuilder ;
1625
26+ import java .time .ZoneId ;
1727import java .time .ZoneOffset ;
1828import java .time .ZonedDateTime ;
1929import java .time .format .DateTimeFormatter ;
30+ import java .util .List ;
31+ import java .util .Objects ;
2032
2133@ Slf4j
2234@ RequiredArgsConstructor
2335@ Service
2436public class ClickLogService {
2537
2638 private final RestTemplate restTemplate ;
39+ private final GetPlaceEntityBean getPlaceEntityBean ;
40+ private final GetSubCategoryEntityBean getSubCategoryEntityBean ;
41+ private final GetCategoryEntityBean getCategoryEntityBean ;
2742
2843 @ Value ("${elk-server-uri}" )
2944 private String ELK_SERVER_URI ;
@@ -37,10 +52,13 @@ public SaveClickLogByElkDto saveClickLog(SaveClickLogDto saveClickLogDto) {
3752 HttpHeaders headers = new HttpHeaders ();
3853 headers .setContentType (MediaType .APPLICATION_JSON );
3954
55+ ZonedDateTime nowKST = ZonedDateTime .now (ZoneId .of ("Asia/Seoul" ));
56+ String timestamp = nowKST .format (DateTimeFormatter .ISO_OFFSET_DATE_TIME );
57+
4058 SaveClickLogByElkDto saveClickLogByElkDto = SaveClickLogByElkDto .builder ()
4159 .userId (saveClickLogDto .getUserId ())
4260 .placeId (saveClickLogDto .getPlaceId ())
43- .timestamp (ZonedDateTime . now ( ZoneOffset . UTC ). format ( DateTimeFormatter . ISO_INSTANT ) )
61+ .timestamp (timestamp )
4462 .build ();
4563
4664 HttpEntity <SaveClickLogByElkDto > requestEntity = new HttpEntity <>(saveClickLogByElkDto , headers );
@@ -72,4 +90,43 @@ public SaveClickLogByElkDto saveClickLog(SaveClickLogDto saveClickLogDto) {
7290
7391 return null ;
7492 }
93+
94+ public List <GetPlaceByTop4 > getPlaceByClickLog () {
95+ UriComponents uri = UriComponentsBuilder
96+ .fromUriString (ELK_SERVER_URI + "/most-click-place" )
97+ .build ()
98+ .encode ();
99+
100+ ResponseEntity <List <GetClickLogByTop4 >> response = restTemplate .exchange (
101+ uri .toUri (),
102+ HttpMethod .GET ,
103+ null ,
104+ new ParameterizedTypeReference <List <GetClickLogByTop4 >>() {}
105+ );
106+
107+ List <GetClickLogByTop4 > body = response .getBody ();
108+ if (body == null ) {
109+ return null ;
110+ }
111+
112+ return body .stream ()
113+ .map (value -> {
114+ PlaceEntity place = getPlaceEntityBean .exec (value .getUuid ());
115+ if (place == null ) {
116+ return null ;
117+ }
118+
119+ SubCategoryEntity subCategory = getSubCategoryEntityBean .exec (place .getSubCategoryId ());
120+ CategoryEntity category = getCategoryEntityBean .exec (subCategory .getCategoryId ());
121+
122+ return GetPlaceByTop4 .builder ()
123+ .place (place )
124+ .subCategory (subCategory .getName ())
125+ .category (category .getName ())
126+ .clickNum (value .getClicks ())
127+ .build ();
128+ })
129+ .filter (Objects ::nonNull )
130+ .toList ();
131+ }
75132}
0 commit comments