Skip to content
This repository was archived by the owner on Dec 27, 2024. It is now read-only.

Commit 824c2a6

Browse files
dev/codeforces/ Добавил DTO для api
1 parent 123c991 commit 824c2a6

File tree

3 files changed

+74
-0
lines changed

3 files changed

+74
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.cf.cfteam.services.client;
2+
3+
4+
import com.cf.cfteam.exceptions.client.ClientErrorException;
5+
import com.cf.cfteam.exceptions.client.ServerErrorException;
6+
import lombok.RequiredArgsConstructor;
7+
8+
import org.springframework.beans.factory.annotation.Value;
9+
import org.springframework.http.ResponseEntity;
10+
import org.springframework.stereotype.Service;
11+
import org.springframework.web.client.RestClient;
12+
13+
@Service
14+
@RequiredArgsConstructor
15+
public class CodeforcesClient {
16+
17+
private final RestClient restClient;
18+
19+
@Value("${codeforces.api.player.url}")
20+
private String playerUrl;
21+
22+
public Double fetchRatingFromApi(String login) {
23+
ResponseEntity<UserInfoResponse> playerResponse = restClient.get()
24+
.uri(uriBuilder -> uriBuilder
25+
.path(playerUrl)
26+
.queryParam("handles", login)
27+
.queryParam("checkHistoricHandles", false)
28+
.build())
29+
.retrieve()
30+
.toEntity(UserInfoResponse.class);
31+
if (playerResponse.getStatusCode().is2xxSuccessful() && playerResponse.getBody() != null &&
32+
playerResponse.getBody().getResult().size() == 1 && playerResponse.getBody().getResult().getFirst() != null) {
33+
return playerResponse.getBody().getResult().getFirst().getRating() != null ?
34+
playerResponse.getBody().getResult().getFirst().getRating() : 0.;
35+
}
36+
if (playerResponse.getStatusCode().is4xxClientError()) {
37+
throw new ClientErrorException(playerResponse.getStatusCode().toString());
38+
}
39+
if (playerResponse.getStatusCode().is5xxServerError()) {
40+
throw new ServerErrorException(playerResponse.getStatusCode().toString());
41+
}
42+
throw new RuntimeException("Error: " + playerResponse.getStatusCode());
43+
}
44+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.cf.cfteam.services.client;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import lombok.Getter;
5+
import lombok.Setter;
6+
7+
@Getter
8+
@Setter
9+
public class CodeforcesPlayerResponse {
10+
11+
@JsonProperty("handle")
12+
private String handle;
13+
14+
@JsonProperty("rating")
15+
private Double rating;
16+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.cf.cfteam.transfer.responses.codeforces;
2+
3+
import lombok.Builder;
4+
5+
import java.util.List;
6+
7+
@Builder
8+
public record GroupResponse(
9+
Long id,
10+
String name,
11+
String description,
12+
List<TeamResponse> teams
13+
) {
14+
}

0 commit comments

Comments
 (0)