Skip to content

Commit 258cfad

Browse files
committed
fix: handle pagination properly in openapi
1 parent bed1ca5 commit 258cfad

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

backend/src/main/java/io/papermc/hangar/config/SwaggerConfig.java

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import jakarta.servlet.http.HttpServletRequest;
2020
import java.lang.reflect.Field;
2121
import java.lang.reflect.Method;
22+
import java.math.BigDecimal;
2223
import java.util.ArrayList;
2324
import java.util.HashSet;
2425
import java.util.List;
@@ -132,8 +133,8 @@ public OpenApiCustomizer requiredByDefaultCustomizer() {
132133

133134
Method method = null;
134135
for (final String prefix : List.of("get", "is", "has", "")) {
135-
method = ReflectionUtils.findMethod(clazz, !prefix.isEmpty() ? prefix + key.substring(0, 1).toUpperCase() + key.substring(1) : key );
136-
if (method != null) break;
136+
method = ReflectionUtils.findMethod(clazz, !prefix.isEmpty() ? prefix + key.substring(0, 1).toUpperCase() + key.substring(1) : key);
137+
if (method != null) break;
137138
}
138139

139140
if (method != null && (method.getAnnotatedReturnType().isAnnotationPresent(Nullable.class) || method.getAnnotatedReturnType().isAnnotationPresent(jakarta.annotation.Nullable.class))) {
@@ -226,6 +227,27 @@ public Operation customize(final Operation operation, final HandlerMethod handle
226227
}
227228
}
228229

230+
final Parameter pagination = operation.getParameters() == null ? null : operation.getParameters().stream().filter(p -> p.getName().equals("pagination")).findFirst().orElse(null);
231+
if (pagination != null) {
232+
operation.getParameters().remove(pagination);
233+
operation.addParametersItem(new Parameter()
234+
.name("limit")
235+
.in("query")
236+
.description("The maximum amount of items to return")
237+
.style(Parameter.StyleEnum.FORM)
238+
.required(false)
239+
.schema(new StringSchema().minimum(new BigDecimal(1)).maximum(new BigDecimal(25)).example("1"))
240+
);
241+
operation.addParametersItem(new Parameter()
242+
.name("offset")
243+
.in("query")
244+
.description("Where to start searching")
245+
.style(Parameter.StyleEnum.FORM)
246+
.required(false)
247+
.schema(new StringSchema().minimum(new BigDecimal(0)).example("0"))
248+
);
249+
}
250+
229251
return operation;
230252
}
231253
}

backend/src/test/java/io/papermc/hangar/OpenApiTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ void testPublicOpenApi() throws Exception {
4747
assertThat(parameters).isNotNull();
4848
assertThat(parameters.stream().anyMatch(p -> "sort".equals(p.getName()))).isTrue();
4949
assertThat(parameters.stream().anyMatch(p -> "category".equals(p.getName()))).isTrue();
50-
assertThat(parameters.stream().anyMatch(p -> "pagination".equals(p.getName()))).isTrue();
5150
assertThat(parameters.stream().anyMatch(p -> "owner".equals(p.getName()))).isTrue();
51+
assertThat(parameters.stream().anyMatch(p -> "limit".equals(p.getName()))).isTrue();
52+
assertThat(parameters.stream().anyMatch(p -> "offset".equals(p.getName()))).isTrue();
5253
}
5354
}

0 commit comments

Comments
 (0)