Skip to content

Commit 908d899

Browse files
committed
Release 0.1.7
1 parent fe46460 commit 908d899

File tree

155 files changed

+6982
-12634
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

155 files changed

+6982
-12634
lines changed

.github/workflows/ci.yml

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,24 @@ jobs:
2020
- name: Compile
2121
run: ./gradlew compileJava
2222

23-
publish:
23+
test:
2424
needs: [ compile ]
25+
runs-on: ubuntu-latest
26+
steps:
27+
- name: Checkout repo
28+
uses: actions/checkout@v3
29+
30+
- name: Set up Java
31+
id: setup-jre
32+
uses: actions/setup-java@v1
33+
with:
34+
java-version: "11"
35+
architecture: x64
36+
37+
- name: Test
38+
run: ./gradlew test
39+
publish:
40+
needs: [ compile, test ]
2541
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
2642
runs-on: ubuntu-latest
2743

build.gradle

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,17 @@ repositories {
1212
}
1313

1414
dependencies {
15-
api 'io.github.fern-api:jersey-utils:0.0.82'
15+
api 'com.squareup.okhttp3:okhttp:4.9.3'
1616
api 'com.fasterxml.jackson.core:jackson-databind:2.13.0'
1717
api 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.12.3'
18-
api 'io.github.openfeign:feign-jackson:11.8'
19-
api 'io.github.openfeign:feign-core:11.8'
20-
api 'io.github.openfeign:feign-jaxrs2:11.8'
18+
api 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.3'
19+
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2'
20+
testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.8.2'
2121
}
2222

2323
spotless {
2424
java {
25-
googleJavaFormat()
25+
palantirJavaFormat()
2626
}
2727
}
2828

@@ -31,12 +31,16 @@ java {
3131
withJavadocJar()
3232
}
3333

34+
test {
35+
useJUnitPlatform()
36+
}
37+
3438
publishing {
3539
publications {
3640
maven(MavenPublication) {
37-
groupId = 'io.github.fern-api'
38-
artifactId = 'codecombat'
39-
version = '0.0.9'
41+
groupId = 'com.codecombat'
42+
artifactId = 'codecombat-java'
43+
version = '0.1.7'
4044
from components.java
4145
}
4246
}
Lines changed: 101 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,118 @@
11
package com.codecombat.api;
22

3-
import com.codecombat.api.client.auth.authServiceClient;
4-
import com.codecombat.api.client.clans.clansServiceClient;
5-
import com.codecombat.api.client.classrooms.classroomsServiceClient;
6-
import com.codecombat.api.client.stats.statsServiceClient;
7-
import com.codecombat.api.client.users.usersServiceClient;
8-
import com.codecombat.api.core.BasicAuth;
9-
import com.codecombat.api.core.Environment;
10-
import java.util.Objects;
11-
import java.util.concurrent.atomic.AtomicReference;
3+
import com.codecombat.api.core.ApiError;
4+
import com.codecombat.api.core.ClientOptions;
5+
import com.codecombat.api.core.ObjectMappers;
6+
import com.codecombat.api.core.RequestOptions;
7+
import com.codecombat.api.core.Suppliers;
8+
import com.codecombat.api.requests.PostUsersHandleOAuthIdentitiesRequest;
9+
import com.codecombat.api.resources.auth.AuthClient;
10+
import com.codecombat.api.resources.clans.ClansClient;
11+
import com.codecombat.api.resources.classrooms.ClassroomsClient;
12+
import com.codecombat.api.resources.stats.StatsClient;
13+
import com.codecombat.api.resources.users.UsersClient;
14+
import com.codecombat.api.types.UserResponse;
15+
import java.io.IOException;
16+
import java.util.HashMap;
17+
import java.util.Map;
1218
import java.util.function.Supplier;
19+
import okhttp3.Headers;
20+
import okhttp3.HttpUrl;
21+
import okhttp3.MediaType;
22+
import okhttp3.Request;
23+
import okhttp3.RequestBody;
24+
import okhttp3.Response;
1325

14-
public final class CodecombatApiClient {
15-
private final Supplier<authServiceClient> authServiceClient;
26+
public class CodecombatApiClient {
27+
protected final ClientOptions clientOptions;
1628

17-
private final Supplier<clansServiceClient> clansServiceClient;
29+
protected final Supplier<AuthClient> authClient;
1830

19-
private final Supplier<classroomsServiceClient> classroomsServiceClient;
31+
protected final Supplier<ClansClient> clansClient;
2032

21-
private final Supplier<statsServiceClient> statsServiceClient;
33+
protected final Supplier<ClassroomsClient> classroomsClient;
2234

23-
private final Supplier<usersServiceClient> usersServiceClient;
35+
protected final Supplier<StatsClient> statsClient;
2436

25-
public CodecombatApiClient(BasicAuth auth) {
26-
this(Environment.PRODUCTION, auth);
27-
}
37+
protected final Supplier<UsersClient> usersClient;
2838

29-
public CodecombatApiClient(Environment environment, BasicAuth auth) {
30-
this.authServiceClient = memoize(() -> new authServiceClient(environment.getUrl(), auth));
31-
this.clansServiceClient = memoize(() -> new clansServiceClient(environment.getUrl(), auth));
32-
this.statsServiceClient = memoize(() -> new statsServiceClient(environment.getUrl(), auth));
33-
this.classroomsServiceClient = memoize(() -> new classroomsServiceClient(environment.getUrl(), auth));
34-
this.usersServiceClient = memoize(() -> new usersServiceClient(environment.getUrl(), auth));
35-
}
39+
public CodecombatApiClient(ClientOptions clientOptions) {
40+
this.clientOptions = clientOptions;
41+
this.authClient = Suppliers.memoize(() -> new AuthClient(clientOptions));
42+
this.clansClient = Suppliers.memoize(() -> new ClansClient(clientOptions));
43+
this.classroomsClient = Suppliers.memoize(() -> new ClassroomsClient(clientOptions));
44+
this.statsClient = Suppliers.memoize(() -> new StatsClient(clientOptions));
45+
this.usersClient = Suppliers.memoize(() -> new UsersClient(clientOptions));
46+
}
3647

37-
public final authServiceClient auth() {
38-
return this.authServiceClient.get();
39-
}
48+
public UserResponse postUsersHandleOAuthIdentities(String handle, PostUsersHandleOAuthIdentitiesRequest request) {
49+
return postUsersHandleOAuthIdentities(handle, request, null);
50+
}
4051

41-
public final clansServiceClient clans() {
42-
return this.clansServiceClient.get();
43-
}
52+
public UserResponse postUsersHandleOAuthIdentities(
53+
String handle, PostUsersHandleOAuthIdentitiesRequest request, RequestOptions requestOptions) {
54+
HttpUrl _httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl())
55+
.newBuilder()
56+
.addPathSegments("users")
57+
.addPathSegment(handle)
58+
.addPathSegments("o-auth-identities")
59+
.build();
60+
Map<String, Object> _requestBodyProperties = new HashMap<>();
61+
_requestBodyProperties.put("provider", request.getProvider());
62+
if (request.getAccessToken().isPresent()) {
63+
_requestBodyProperties.put("accessToken", request.getAccessToken());
64+
}
65+
if (request.getCode().isPresent()) {
66+
_requestBodyProperties.put("code", request.getCode());
67+
}
68+
RequestBody _requestBody;
69+
try {
70+
_requestBody = RequestBody.create(
71+
ObjectMappers.JSON_MAPPER.writeValueAsBytes(_requestBodyProperties),
72+
MediaType.parse("application/json"));
73+
} catch (Exception e) {
74+
throw new RuntimeException(e);
75+
}
76+
Request.Builder _requestBuilder = new Request.Builder()
77+
.url(_httpUrl)
78+
.method("POST", _requestBody)
79+
.headers(Headers.of(clientOptions.headers(requestOptions)))
80+
.addHeader("Content-Type", "application/json");
81+
Request _request = _requestBuilder.build();
82+
try {
83+
Response _response = clientOptions.httpClient().newCall(_request).execute();
84+
if (_response.isSuccessful()) {
85+
return ObjectMappers.JSON_MAPPER.readValue(_response.body().string(), UserResponse.class);
86+
}
87+
throw new ApiError(
88+
_response.code(),
89+
ObjectMappers.JSON_MAPPER.readValue(_response.body().string(), Object.class));
90+
} catch (IOException e) {
91+
throw new RuntimeException(e);
92+
}
93+
}
4494

45-
public final classroomsServiceClient classrooms() {
46-
return this.classroomsServiceClient.get();
47-
}
95+
public AuthClient auth() {
96+
return this.authClient.get();
97+
}
4898

49-
public final statsServiceClient stats() {
50-
return this.statsServiceClient.get();
51-
}
99+
public ClansClient clans() {
100+
return this.clansClient.get();
101+
}
52102

53-
public final usersServiceClient users() {
54-
return this.usersServiceClient.get();
55-
}
103+
public ClassroomsClient classrooms() {
104+
return this.classroomsClient.get();
105+
}
56106

57-
private static <T> Supplier<T> memoize(Supplier<T> delegate) {
58-
AtomicReference<T> value = new AtomicReference<>();
59-
return () -> {
60-
T val = value.get();
61-
if (val == null) {
62-
val = value.updateAndGet(cur -> cur == null ? Objects.requireNonNull(delegate.get()) : cur);
63-
}
64-
return val;
65-
} ;
66-
}
107+
public StatsClient stats() {
108+
return this.statsClient.get();
109+
}
110+
111+
public UsersClient users() {
112+
return this.usersClient.get();
113+
}
114+
115+
public static CodecombatApiClientBuilder builder() {
116+
return new CodecombatApiClientBuilder();
117+
}
67118
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.codecombat.api;
2+
3+
import com.codecombat.api.core.ClientOptions;
4+
import com.codecombat.api.core.Environment;
5+
import java.util.Base64;
6+
7+
public final class CodecombatApiClientBuilder {
8+
private ClientOptions.Builder clientOptionsBuilder = ClientOptions.builder();
9+
10+
private Environment environment = Environment.DEFAULT;
11+
12+
public CodecombatApiClientBuilder credentials(String username, String password) {
13+
String unencodedToken = username + ":" + password;
14+
String encodedToken = Base64.getEncoder().encodeToString(unencodedToken.getBytes());
15+
this.clientOptionsBuilder.addHeader("Authorization", "Basic " + encodedToken);
16+
return this;
17+
}
18+
19+
public CodecombatApiClientBuilder environment(Environment environment) {
20+
this.environment = environment;
21+
return this;
22+
}
23+
24+
public CodecombatApiClientBuilder url(String url) {
25+
this.environment = Environment.custom(url);
26+
return this;
27+
}
28+
29+
public CodecombatApiClient build() {
30+
clientOptionsBuilder.environment(this.environment);
31+
return new CodecombatApiClient(clientOptionsBuilder.build());
32+
}
33+
}

src/main/java/com/codecombat/api/client/auth/authService.java

Lines changed: 0 additions & 39 deletions
This file was deleted.

src/main/java/com/codecombat/api/client/auth/authServiceClient.java

Lines changed: 0 additions & 34 deletions
This file was deleted.

src/main/java/com/codecombat/api/client/auth/authServiceErrorDecoder.java

Lines changed: 0 additions & 31 deletions
This file was deleted.

0 commit comments

Comments
 (0)