Skip to content

Commit

Permalink
Added support for PATCH and query params (#40)
Browse files Browse the repository at this point in the history
* Added PATCH to list of supported methods

* Added support for PATCH and query params to builder

* Added gradle wrapper
  • Loading branch information
surajkumar authored Apr 7, 2024
1 parent 7d7bcf9 commit 1e65c43
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 13 deletions.
Binary file added gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
7 changes: 7 additions & 0 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,20 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.net.URLEncoder;
import java.net.http.HttpRequest;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;

public class DiscordRequestBuilder {
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
private final DiscordResponseFuture future = new DiscordResponseFuture();
private final Map<String, Object> headers = new HashMap<>();
private final Map<String, Object> queryParameters = new HashMap<>();
private HttpMethod method;
private String url;
private String path;
private HttpRequest.BodyPublisher body;
private DiscordResponseFuture future = new DiscordResponseFuture();
private final Map<String, Object> headers = new HashMap<>();

public DiscordRequestBuilder putHeader(String name, Object value) {
this.headers.put(name, value);
Expand All @@ -25,8 +28,18 @@ public DiscordRequestBuilder putHeaders(Map<String, Object> headers) {
return this;
}

public DiscordRequestBuilder url(String url) {
this.url = url;
public DiscordRequestBuilder url(String path) {
this.path = path;
return this;
}

public DiscordRequestBuilder queryParam(String name, Object value) {
queryParameters.put(name, value);
return this;
}

public DiscordRequestBuilder queryParams(Map<String, Object> queryParameters) {
this.queryParameters.putAll(queryParameters);
return this;
}

Expand Down Expand Up @@ -59,8 +72,29 @@ public DiscordRequestBuilder put() {
return this;
}

protected String getUrl() {
return url;
public DiscordRequestBuilder patch() {
this.method = HttpMethod.PATCH;
return this;
}

protected String getQueryParameters() {
StringBuilder encodedParams = new StringBuilder();
for (Map.Entry<String, Object> entry : queryParameters.entrySet()) {
if (encodedParams.isEmpty()) {
encodedParams.append("?");
} else {
encodedParams.append("&");
}
encodedParams.append(URLEncoder.encode(entry.getKey(), StandardCharsets.UTF_8));
encodedParams.append("=");
encodedParams.append(
URLEncoder.encode(String.valueOf(entry.getValue()), StandardCharsets.UTF_8));
}
return encodedParams.toString();
}

protected String getPath() {
return path;
}

HttpMethod getMethod() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,17 @@ private void sendRequest(DiscordRequestBuilder discordRequestBuilder) {
HttpRequest.newBuilder()
.uri(
URI.create(
"%s%s"
"%s%s%s"
.formatted(
BASE_URL,
discordRequestBuilder.getUrl())))
.header("Authorization", "Bot " + botToken)
.headers("Content-Type", "application/json");
discordRequestBuilder.getPath(),
discordRequestBuilder
.getQueryParameters())))
.header("Authorization", "Bot " + botToken);

if (!discordRequestBuilder.getHeaders().containsKey("Content-Type")) {
requestBuilder.headers("Content-Type", "application/json");
}

if (!discordRequestBuilder.getHeaders().isEmpty()) {
requestBuilder.headers(headerMapToStringArr(discordRequestBuilder.getHeaders()));
Expand All @@ -86,6 +91,9 @@ private void sendRequest(DiscordRequestBuilder discordRequestBuilder) {
case HttpMethod.PUT:
requestBuilder.PUT(discordRequestBuilder.getBody());
break;
case HttpMethod.PATCH:
requestBuilder.method(HttpMethod.PATCH.name(), discordRequestBuilder.getBody());
break;
default:
throw new IllegalArgumentException(
"Unsupported HTTP method: " + discordRequestBuilder.getMethod());
Expand All @@ -105,7 +113,7 @@ private void sendRequest(DiscordRequestBuilder discordRequestBuilder) {

} catch (Exception e) {
LOGGER.error(
"Failed to send request to {}{}", BASE_URL, discordRequestBuilder.getUrl(), e);
"Failed to send request to {}{}", BASE_URL, discordRequestBuilder.getPath(), e);
discordRequestBuilder.setFailureError(e);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@ enum HttpMethod {
GET,
POST,
PUT,
DELETE
DELETE,
PATCH
}

0 comments on commit 1e65c43

Please sign in to comment.