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 final RestTemplate rest ;
22+ private final String serverUrl ;
23+
24+ public StatsClient (@ Value ("${stats-server.url:http://localhost:9090}" ) String serverUrl ,
25+ RestTemplateBuilder builder ) {
26+ this .serverUrl = serverUrl ;
27+ this .rest = builder .build ();
28+ }
29+
30+ public void sendHit (EndpointHit hit ) {
31+ HttpEntity <EndpointHit > requestEntity = new HttpEntity <>(hit );
32+ rest .exchange (serverUrl + "/hit" , HttpMethod .POST , requestEntity , Void .class );
33+ }
34+
35+ public List <ViewStats > getStats (LocalDateTime start , LocalDateTime end , List <String > uris , boolean unique ) {
36+ DateTimeFormatter formatter = DateTimeFormatter .ofPattern ("yyyy-MM-dd HH:mm:ss" );
37+ String startStr = URLEncoder .encode (start .format (formatter ), StandardCharsets .UTF_8 );
38+ String endStr = URLEncoder .encode (end .format (formatter ), StandardCharsets .UTF_8 );
39+
40+ UriComponentsBuilder builder = UriComponentsBuilder .fromHttpUrl (serverUrl + "/stats" )
41+ .queryParam ("start" , startStr )
42+ .queryParam ("end" , endStr )
43+ .queryParam ("unique" , unique );
44+ if (uris != null && !uris .isEmpty ()) {
45+ for (String uri : uris ) {
46+ builder .queryParam ("uris" , uri );
47+ }
48+ }
49+
50+ ResponseEntity <ViewStats []> response = rest .getForEntity (builder .build ().toUriString (), ViewStats [].class );
51+ return Arrays .asList (response .getBody ());
52+ }
53+ }
0 commit comments