1+ package ru .practicum .statistics .client ;
2+
3+ import org .springframework .beans .factory .annotation .Value ;
4+ import org .springframework .boot .web .client .RestTemplateBuilder ;
5+ import org .springframework .http .*;
6+ import org .springframework .stereotype .Service ;
7+ import org .springframework .web .client .RestTemplate ;
8+ import org .springframework .web .util .UriComponentsBuilder ;
9+ import ru .practicum .statistics .dto .EndpointHit ;
10+ import ru .practicum .statistics .dto .ViewStats ;
11+
12+ import java .net .URLEncoder ;
13+ import java .nio .charset .StandardCharsets ;
14+ import java .time .LocalDateTime ;
15+ import java .time .format .DateTimeFormatter ;
16+ import java .util .Arrays ;
17+ import java .util .List ;
18+
19+ @ Service
20+ public class StatsClient {
21+ private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter .ofPattern ("yyyy-MM-dd HH:mm:ss" );
22+
23+ private final RestTemplate rest ;
24+ private final String serverUrl ;
25+
26+ public StatsClient (@ Value ("${stats-server.url:http://localhost:9090}" ) String serverUrl ,
27+ RestTemplateBuilder builder ) {
28+ this .serverUrl = serverUrl ;
29+ this .rest = builder .build ();
30+ }
31+
32+ public void sendHit (EndpointHit hit ) {
33+ HttpEntity <EndpointHit > requestEntity = new HttpEntity <>(hit );
34+ rest .exchange (serverUrl + "/hit" , HttpMethod .POST , requestEntity , Void .class );
35+ }
36+
37+ public List <ViewStats > getStats (LocalDateTime start , LocalDateTime end , List <String > uris , boolean unique ) {
38+ String startStr = URLEncoder .encode (start .format (DATE_TIME_FORMATTER ), StandardCharsets .UTF_8 );
39+ String endStr = URLEncoder .encode (end .format (DATE_TIME_FORMATTER ), StandardCharsets .UTF_8 );
40+
41+ UriComponentsBuilder builder = UriComponentsBuilder .fromHttpUrl (serverUrl + "/stats" )
42+ .queryParam ("start" , startStr )
43+ .queryParam ("end" , endStr )
44+ .queryParam ("unique" , unique );
45+ if (uris != null && !uris .isEmpty ()) {
46+ for (String uri : uris ) {
47+ builder .queryParam ("uris" , uri );
48+ }
49+ }
50+
51+ ResponseEntity <ViewStats []> response = rest .getForEntity (builder .build ().toUriString (), ViewStats [].class );
52+ return Arrays .asList (response .getBody ());
53+ }
54+ }
0 commit comments