Skip to content
This repository was archived by the owner on Feb 1, 2025. It is now read-only.

Commit 9d51cbf

Browse files
committed
added tags filter
1 parent 03ce681 commit 9d51cbf

File tree

5 files changed

+35
-6
lines changed

5 files changed

+35
-6
lines changed

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ plugins {
55
apply(from = "spikedev.gradle.kts")
66

77
group = "diruptio"
8-
version = "0.4.3"
8+
version = "0.4.4"
99

1010
repositories {
1111
mavenCentral()

src/main/java/diruptio/dynamite/Dynamite.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import com.google.gson.JsonArray;
44
import com.google.gson.JsonElement;
55
import com.google.gson.JsonStreamParser;
6-
import diruptio.dynamite.project.CreateServlet;
6+
import diruptio.dynamite.project.ProjectCreateServlet;
77
import diruptio.dynamite.project.version.VerisonCreateServlet;
88
import diruptio.dynamite.project.version.VersionDownloadServlet;
99
import diruptio.dynamite.project.version.VersionUploadServlet;
@@ -51,7 +51,7 @@ public void onLoad(@NotNull Module self) {
5151

5252
Spikedog.addServlet("/projects", new ProjectsServlet());
5353
Spikedog.addServlet("/project", new ProjectServlet());
54-
Spikedog.addServlet("/project/create", new CreateServlet());
54+
Spikedog.addServlet("/project/create", new ProjectCreateServlet());
5555
Spikedog.addServlet("/project/version/create", new VerisonCreateServlet());
5656
Spikedog.addServlet("/project/version/download", new VersionDownloadServlet());
5757
Spikedog.addServlet("/project/version/upload", new VersionUploadServlet());

src/main/java/diruptio/dynamite/Project.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,25 @@
44
import com.google.gson.JsonElement;
55
import com.google.gson.JsonObject;
66
import java.util.ArrayList;
7+
import java.util.Comparator;
78
import java.util.List;
9+
import java.util.function.Predicate;
810
import org.jetbrains.annotations.NotNull;
911

1012
public record Project(@NotNull String name, @NotNull List<Version> versions) {
1113
public @NotNull JsonObject toJson() {
14+
return toJson(version -> true);
15+
}
16+
17+
public @NotNull JsonObject toJson(Predicate<Version> filter) {
1218
JsonObject json = new JsonObject();
1319
json.addProperty("name", name);
20+
versions.sort(Comparator.comparing(Version::name));
1421
JsonArray versions = new JsonArray();
1522
for (Version version : this.versions) {
16-
versions.add(version.toJson());
23+
if (filter.test(version)) {
24+
versions.add(version.toJson());
25+
}
1726
}
1827
json.add("versions", versions);
1928
return json;

src/main/java/diruptio/dynamite/ProjectServlet.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@
33
import com.google.gson.JsonObject;
44
import diruptio.spikedog.HttpRequest;
55
import diruptio.spikedog.HttpResponse;
6+
import java.util.HashSet;
7+
import java.util.List;
68
import java.util.Optional;
79
import java.util.function.BiConsumer;
10+
import java.util.function.Predicate;
811

912
public class ProjectServlet implements BiConsumer<HttpRequest, HttpResponse> {
1013
public void accept(HttpRequest request, HttpResponse response) {
@@ -33,8 +36,25 @@ public void accept(HttpRequest request, HttpResponse response) {
3336
return;
3437
}
3538

39+
// Get filter parameter
40+
String filterParam = request.getParameter("filter");
41+
Predicate<Project.Version> filter;
42+
if (filterParam == null) {
43+
filter = version -> true;
44+
} else if (filterParam.startsWith("tags:")) {
45+
filterParam = filterParam.replaceFirst("tags:", "");
46+
List<String> tags = filterParam.isBlank() ? List.of() : List.of(filterParam.split(","));
47+
filter = version -> new HashSet<>(version.tags()).containsAll(tags);
48+
} else {
49+
response.setStatus(400, "Bad Request");
50+
JsonObject content = new JsonObject();
51+
content.addProperty("error", "Invalid filter");
52+
response.setContent(content.toString());
53+
return;
54+
}
55+
3656
// Success
3757
response.setStatus(200, "OK");
38-
response.setContent(project.get().toJson().toString());
58+
response.setContent(project.get().toJson(filter).toString());
3959
}
4060
}

src/main/java/diruptio/dynamite/project/CreateServlet.java renamed to src/main/java/diruptio/dynamite/project/ProjectCreateServlet.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import java.util.Base64;
1111
import java.util.function.BiConsumer;
1212

13-
public class CreateServlet implements BiConsumer<HttpRequest, HttpResponse> {
13+
public class ProjectCreateServlet implements BiConsumer<HttpRequest, HttpResponse> {
1414
public void accept(HttpRequest request, HttpResponse response) {
1515
response.setHeader("Content-Type", "application/json");
1616

0 commit comments

Comments
 (0)