Skip to content

Commit af67cc8

Browse files
authored
deploy 1.17
배포 1.17
2 parents 78047d0 + 5b77f42 commit af67cc8

File tree

5 files changed

+122
-12
lines changed

5 files changed

+122
-12
lines changed

src/main/java/com/day_walk/backend/domain/click_log/controller/ClickLogController.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.day_walk.backend.domain.click_log.data.in.SaveClickLogDto;
44
import com.day_walk.backend.domain.click_log.data.out.SaveClickLogByElkDto;
55
import com.day_walk.backend.domain.click_log.service.ClickLogService;
6+
import com.day_walk.backend.domain.place.data.out.GetPlaceByTop4;
67
import io.swagger.v3.oas.annotations.Operation;
78
import io.swagger.v3.oas.annotations.tags.Tag;
89
import lombok.RequiredArgsConstructor;
@@ -11,6 +12,7 @@
1112
import org.springframework.web.bind.annotation.*;
1213

1314
import java.util.HashMap;
15+
import java.util.List;
1416
import java.util.Map;
1517

1618
@RequestMapping("/api/click-log")
@@ -33,4 +35,18 @@ public ResponseEntity<Map<String, Object>> saveClickLog(@RequestBody SaveClickLo
3335

3436
return ResponseEntity.status(HttpStatus.OK).body(response);
3537
}
38+
39+
@Operation(summary = "가장 많이 클릭된 장소 조회", description = "당일 새벽 5시 이후 가장 많이 클릭된 장소 Top4를 조회합니다.")
40+
@GetMapping("/place")
41+
public ResponseEntity<Map<String, Object>> getPlaceByClickLog() {
42+
List<GetPlaceByTop4> getPlaceByTop4List = clickLogService.getPlaceByClickLog();
43+
boolean success = getPlaceByTop4List != null;
44+
45+
Map<String, Object> response = new HashMap<>();
46+
response.put("success", success);
47+
response.put("message", success ? "장소 Top4 조회 성공!" : "장소 Top4 조회 실패..");
48+
response.put("searchData", getPlaceByTop4List);
49+
50+
return ResponseEntity.status(HttpStatus.OK).body(response);
51+
}
3652
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.day_walk.backend.domain.click_log.data.in;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
import lombok.NoArgsConstructor;
6+
7+
import java.util.UUID;
8+
9+
@AllArgsConstructor
10+
@NoArgsConstructor
11+
@Getter
12+
public class GetClickLogByTop4 {
13+
private UUID uuid;
14+
private int clicks;
15+
}

src/main/java/com/day_walk/backend/domain/click_log/service/ClickLogService.java

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,44 @@
11
package 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;
36
import com.day_walk.backend.domain.click_log.data.in.SaveClickLogDto;
47
import 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;
513
import com.day_walk.backend.global.error.CustomException;
614
import com.day_walk.backend.global.error.ErrorCode;
715
import lombok.RequiredArgsConstructor;
816
import lombok.extern.slf4j.Slf4j;
917
import org.springframework.beans.factory.annotation.Value;
18+
import org.springframework.core.ParameterizedTypeReference;
1019
import org.springframework.http.*;
1120
import org.springframework.stereotype.Service;
1221
import org.springframework.web.client.HttpStatusCodeException;
1322
import org.springframework.web.client.RestTemplate;
1423
import org.springframework.web.util.UriComponents;
1524
import org.springframework.web.util.UriComponentsBuilder;
1625

26+
import java.time.ZoneId;
1727
import java.time.ZoneOffset;
1828
import java.time.ZonedDateTime;
1929
import java.time.format.DateTimeFormatter;
30+
import java.util.List;
31+
import java.util.Objects;
2032

2133
@Slf4j
2234
@RequiredArgsConstructor
2335
@Service
2436
public 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
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.day_walk.backend.domain.place.data.out;
2+
3+
import com.day_walk.backend.domain.place.data.PlaceEntity;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Builder;
6+
import lombok.Getter;
7+
import lombok.NoArgsConstructor;
8+
9+
import java.util.UUID;
10+
11+
@AllArgsConstructor
12+
@NoArgsConstructor
13+
@Getter
14+
public class GetPlaceByTop4 {
15+
private UUID placeId;
16+
private String name;
17+
private String address;
18+
private String imgUrl;
19+
private String category;
20+
private String subCategory;
21+
private int clickNum;
22+
23+
@Builder
24+
public GetPlaceByTop4(PlaceEntity place, String category, String subCategory, int clickNum) {
25+
this.placeId = place.getId();
26+
this.name = place.getName();
27+
this.address = place.getAddress();
28+
this.imgUrl = place.getImgList().isEmpty() ? null : place.getImgList().get(0);
29+
this.category = category;
30+
this.subCategory = subCategory;
31+
this.clickNum = clickNum;
32+
}
33+
}

src/main/java/com/day_walk/backend/domain/place/service/PlaceService.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.day_walk.backend.domain.category.bean.GetCategoryEntityBean;
44
import com.day_walk.backend.domain.category.data.CategoryEntity;
5-
import com.day_walk.backend.domain.crowd_level.data.out.MlCrowdResponseDto;
65
import com.day_walk.backend.domain.place.bean.GetPlaceEntityBean;
76
import com.day_walk.backend.domain.place.data.PlaceEntity;
87
import com.day_walk.backend.domain.place.data.in.GetPlaceByMlDto;
@@ -20,23 +19,13 @@
2019
import com.day_walk.backend.domain.user.data.UserEntity;
2120
import com.day_walk.backend.global.error.CustomException;
2221
import com.day_walk.backend.global.error.ErrorCode;
23-
import com.fasterxml.jackson.core.JsonProcessingException;
24-
import com.fasterxml.jackson.databind.ObjectMapper;
2522
import lombok.RequiredArgsConstructor;
2623
import org.springframework.beans.factory.annotation.Value;
27-
import org.springframework.http.HttpEntity;
28-
import org.springframework.http.HttpHeaders;
29-
import org.springframework.http.HttpMethod;
30-
import org.springframework.http.ResponseEntity;
3124
import org.springframework.stereotype.Service;
3225
import org.springframework.web.client.RestTemplate;
3326
import org.springframework.web.util.UriComponents;
3427
import org.springframework.web.util.UriComponentsBuilder;
3528

36-
import java.io.UnsupportedEncodingException;
37-
import java.net.URI;
38-
import java.net.URLEncoder;
39-
import java.nio.charset.StandardCharsets;
4029
import java.util.*;
4130
import java.util.stream.Collectors;
4231

0 commit comments

Comments
 (0)