diff --git a/README.md b/README.md index 8c34843..67f4867 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ Filter JPA entities directly in database queries. The module converts filter exp com.turkraft.springfilter jpa - 3.2.4 + 3.2.5 ``` @@ -114,7 +114,7 @@ Filter MongoDB documents using Spring Data MongoDB queries. com.turkraft.springfilter mongo - 3.2.4 + 3.2.5 ``` @@ -150,7 +150,7 @@ Filter in-memory collections using Java Predicates. Works with any POJO, no data com.turkraft.springfilter predicate - 3.2.4 + 3.2.5 ``` @@ -222,7 +222,7 @@ Build filter expressions programmatically instead of writing filter strings manu com.turkraft.springfilter core - 3.2.4 + 3.2.5 ``` @@ -268,7 +268,7 @@ Add automatic Swagger documentation for endpoints with `@Filter` parameters. com.turkraft.springfilter openapi - 3.2.4 + 3.2.5 ``` @@ -290,7 +290,7 @@ The `page-sort` module provides annotations for pagination, sorting, and field s com.turkraft.springfilter page-sort - 3.2.4 + 3.2.5 ``` @@ -298,7 +298,7 @@ The `page-sort` module provides annotations for pagination, sorting, and field s ```java @GetMapping("/cars") -Page search(@Filter Specification spec, @Page Pageable page) { +Page search(@Filter Specification spec, @Pagination Pageable page) { return repository.findAll(spec, page); } ``` @@ -310,7 +310,7 @@ Usage: `?page=0&size=20&sort=-year` (prefix `-` for descending) ```java @GetMapping("/cars") Page search( - @Page(pageParameter = "p", sizeParameter = "limit", sortParameter = "order") Pageable page) { + @Pagination(pageParameter = "p", sizeParameter = "limit", sortParameter = "order") Pageable page) { return repository.findAll(page); } ``` @@ -361,7 +361,7 @@ Use `?fields=id,brand.name,year` to return only specified fields. Uses Jackson's @GetMapping("/cars") Page search( @Filter Specification spec, - @Page Pageable page) { + @Pagination Pageable page) { return repository.findAll(spec, page); } ``` diff --git a/core/src/main/java/com/turkraft/springfilter/language/InOperator.java b/core/src/main/java/com/turkraft/springfilter/language/InOperator.java index 7779bfc..2d392b4 100644 --- a/core/src/main/java/com/turkraft/springfilter/language/InOperator.java +++ b/core/src/main/java/com/turkraft/springfilter/language/InOperator.java @@ -17,7 +17,7 @@ public String getDescription() { @Override public String getExample() { - return "status in ('active', 'pending')"; + return "status in ['active', 'pending']"; } } diff --git a/jpa-example/src/main/java/com/turkraft/springfilter/example/SpringFilterJpaExampleApplication.java b/jpa-example/src/main/java/com/turkraft/springfilter/example/SpringFilterJpaExampleApplication.java index 46e6083..8a9e261 100644 --- a/jpa-example/src/main/java/com/turkraft/springfilter/example/SpringFilterJpaExampleApplication.java +++ b/jpa-example/src/main/java/com/turkraft/springfilter/example/SpringFilterJpaExampleApplication.java @@ -3,7 +3,7 @@ import com.github.javafaker.Faker; import com.turkraft.springfilter.boot.Fields; import com.turkraft.springfilter.boot.Filter; -import com.turkraft.springfilter.boot.Page; +import com.turkraft.springfilter.boot.Pagination; import com.turkraft.springfilter.converter.FilterSpecification; import com.turkraft.springfilter.example.model.Address; import com.turkraft.springfilter.example.model.Company; @@ -170,7 +170,7 @@ public void index(HttpServletResponse response) @Fields public List getIndustries( @Filter FilterSpecification filter, - @Page Pageable pageable) { + @Pagination Pageable pageable) { return industryRepository .findAll(filter, pageable) .getContent(); @@ -180,7 +180,7 @@ public List getIndustries( @Fields public List getCompanies( @Filter FilterSpecification filter, - @Page Pageable pageable) { + @Pagination Pageable pageable) { return companyRepository .findAll(filter, pageable) .getContent(); @@ -190,7 +190,7 @@ public List getCompanies( @Fields public List getEmployees( @Filter FilterSpecification filter, - @Page Pageable pageable) { + @Pagination Pageable pageable) { return employeeRepository .findAll(filter, pageable) .getContent(); @@ -200,7 +200,7 @@ public List getEmployees( @Fields public List getPayslips( @Filter FilterSpecification filter, - @Page Pageable pageable) { + @Pagination Pageable pageable) { return payslipRepository .findAll(filter, pageable) .getContent(); diff --git a/mongo-example/src/main/java/com/turkraft/springfilter/example/SpringFilterMongoExampleApplication.java b/mongo-example/src/main/java/com/turkraft/springfilter/example/SpringFilterMongoExampleApplication.java index d6ba645..b864b54 100644 --- a/mongo-example/src/main/java/com/turkraft/springfilter/example/SpringFilterMongoExampleApplication.java +++ b/mongo-example/src/main/java/com/turkraft/springfilter/example/SpringFilterMongoExampleApplication.java @@ -3,7 +3,7 @@ import com.github.javafaker.Faker; import com.turkraft.springfilter.boot.Fields; import com.turkraft.springfilter.boot.Filter; -import com.turkraft.springfilter.boot.Page; +import com.turkraft.springfilter.boot.Pagination; import com.turkraft.springfilter.example.model.Company; import com.turkraft.springfilter.example.model.Employee; import com.turkraft.springfilter.example.model.Employee.MaritalStatus; @@ -183,7 +183,7 @@ public void index(HttpServletResponse response) @Fields public List getIndustries( @Filter(entityClass = Industry.class) Document filter, - @Page Pageable pageable) { + @Pagination Pageable pageable) { Query query = new BasicQuery(filter); query.with(pageable); return mongoTemplate.find(query, Industry.class); @@ -193,7 +193,7 @@ public List getIndustries( @Fields public List getCompanies( @Filter(entityClass = Company.class) Document filter, - @Page Pageable pageable) { + @Pagination Pageable pageable) { Query query = new BasicQuery(filter); query.with(pageable); return mongoTemplate.find(query, Company.class); @@ -203,7 +203,7 @@ public List getCompanies( @Fields public List getEmployees( @Filter(entityClass = Employee.class) Document filter, - @Page Pageable pageable) { + @Pagination Pageable pageable) { Query query = new BasicQuery(filter); query.with(pageable); return mongoTemplate.find(query, Employee.class); @@ -213,7 +213,7 @@ public List getEmployees( @Fields public List getPayslips( @Filter(entityClass = Payslip.class) Document filter, - @Page Pageable pageable) { + @Pagination Pageable pageable) { Query query = new BasicQuery(filter); query.with(pageable); return mongoTemplate.find(query, Payslip.class); diff --git a/openapi/src/main/java/com/turkraft/springfilter/openapi/FilterOpenApiAutoConfiguration.java b/openapi/src/main/java/com/turkraft/springfilter/openapi/FilterOpenApiAutoConfiguration.java index 71bf97f..94578c9 100644 --- a/openapi/src/main/java/com/turkraft/springfilter/openapi/FilterOpenApiAutoConfiguration.java +++ b/openapi/src/main/java/com/turkraft/springfilter/openapi/FilterOpenApiAutoConfiguration.java @@ -72,7 +72,7 @@ public FilterParameterCustomizer filterParameterCustomizer( @ConditionalOnMissingBean @ConditionalOnClass(name = { "com.turkraft.springfilter.boot.Sort", - "com.turkraft.springfilter.boot.Page", + "com.turkraft.springfilter.boot.Pagination", "com.turkraft.springfilter.boot.Fields" }) public PageSortParameterCustomizer pageSortParameterCustomizer( diff --git a/openapi/src/main/java/com/turkraft/springfilter/openapi/springdoc/PageSortParameterCustomizer.java b/openapi/src/main/java/com/turkraft/springfilter/openapi/springdoc/PageSortParameterCustomizer.java index 921c413..56a4768 100644 --- a/openapi/src/main/java/com/turkraft/springfilter/openapi/springdoc/PageSortParameterCustomizer.java +++ b/openapi/src/main/java/com/turkraft/springfilter/openapi/springdoc/PageSortParameterCustomizer.java @@ -57,7 +57,7 @@ public Operation customize(@Nullable Operation operation, @Nullable HandlerMetho try { Class sortAnnotation = Class.forName("com.turkraft.springfilter.boot.Sort"); - Class pageAnnotation = Class.forName("com.turkraft.springfilter.boot.Page"); + Class pageAnnotation = Class.forName("com.turkraft.springfilter.boot.Pagination"); Object sort = parameter.getAnnotation((Class) sortAnnotation); Object page = parameter.getAnnotation((Class) pageAnnotation); diff --git a/openapi/src/test/java/com/turkraft/springfilter/openapi/PageSortParameterCustomizerTest.java b/openapi/src/test/java/com/turkraft/springfilter/openapi/PageSortParameterCustomizerTest.java index 3ef1761..0cc0966 100644 --- a/openapi/src/test/java/com/turkraft/springfilter/openapi/PageSortParameterCustomizerTest.java +++ b/openapi/src/test/java/com/turkraft/springfilter/openapi/PageSortParameterCustomizerTest.java @@ -8,7 +8,7 @@ import static org.mockito.Mockito.when; import com.turkraft.springfilter.boot.Fields; -import com.turkraft.springfilter.boot.Page; +import com.turkraft.springfilter.boot.Pagination; import com.turkraft.springfilter.boot.Sort; import com.turkraft.springfilter.openapi.introspection.EntityIntrospector; import com.turkraft.springfilter.openapi.springdoc.PageSortParameterCustomizer; @@ -357,18 +357,18 @@ public String withSortAnnotation(@Sort(parameter = "customSort", required = true } @GetMapping("/page") - public String withPage(@Page Pageable page) { + public String withPage(@Pagination Pageable page) { return "ok"; } @GetMapping("/page-annotation") public String withPageAnnotation( - @Page(pageParameter = "p", sizeParameter = "s", sortParameter = "order", defaultPage = 1, defaultSize = 50, maxSize = 200) Pageable page) { + @Pagination(pageParameter = "p", sizeParameter = "s", sortParameter = "order", defaultPage = 1, defaultSize = 50, maxSize = 200) Pageable page) { return "ok"; } @GetMapping("/page-no-sort") - public String withPageNoSort(@Page(enableSort = false) Pageable page) { + public String withPageNoSort(@Pagination(enableSort = false) Pageable page) { return "ok"; } @@ -388,7 +388,7 @@ public String withFieldsAnnotation() { @GetMapping("/all") public String withAllAnnotations( @Sort org.springframework.data.domain.Sort sort, - @Page Pageable page) { + @Pagination Pageable page) { return "ok"; } diff --git a/page-sort/src/main/java/com/turkraft/springfilter/boot/PageArgumentResolver.java b/page-sort/src/main/java/com/turkraft/springfilter/boot/PageArgumentResolver.java index 050621f..1173c22 100644 --- a/page-sort/src/main/java/com/turkraft/springfilter/boot/PageArgumentResolver.java +++ b/page-sort/src/main/java/com/turkraft/springfilter/boot/PageArgumentResolver.java @@ -21,7 +21,7 @@ public PageArgumentResolver(SortParser sortParser) { @Override public boolean supportsParameter(MethodParameter parameter) { - return parameter.hasParameterAnnotation(Page.class) + return parameter.hasParameterAnnotation(Pagination.class) && Pageable.class.isAssignableFrom(parameter.getParameterType()); } @@ -30,9 +30,9 @@ public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) { - Page pageAnnotation = parameter.getParameterAnnotation(Page.class); + Pagination pageAnnotation = parameter.getParameterAnnotation(Pagination.class); if (pageAnnotation == null) { - return PageRequest.of(Page.DEFAULT_PAGE, Page.DEFAULT_SIZE); + return PageRequest.of(Pagination.DEFAULT_PAGE, Pagination.DEFAULT_SIZE); } String pageParam = webRequest.getParameter(pageAnnotation.pageParameter()); diff --git a/page-sort/src/main/java/com/turkraft/springfilter/boot/Page.java b/page-sort/src/main/java/com/turkraft/springfilter/boot/Pagination.java similarity index 96% rename from page-sort/src/main/java/com/turkraft/springfilter/boot/Page.java rename to page-sort/src/main/java/com/turkraft/springfilter/boot/Pagination.java index b372ab8..92ae738 100644 --- a/page-sort/src/main/java/com/turkraft/springfilter/boot/Page.java +++ b/page-sort/src/main/java/com/turkraft/springfilter/boot/Pagination.java @@ -7,7 +7,7 @@ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.PARAMETER) -public @interface Page { +public @interface Pagination { String DEFAULT_PAGE_PARAMETER = "page"; diff --git a/page-sort/src/test/java/com/turkraft/springfilter/boot/PageArgumentResolverTest.java b/page-sort/src/test/java/com/turkraft/springfilter/boot/PageArgumentResolverTest.java index d7ebfb0..6019da4 100644 --- a/page-sort/src/test/java/com/turkraft/springfilter/boot/PageArgumentResolverTest.java +++ b/page-sort/src/test/java/com/turkraft/springfilter/boot/PageArgumentResolverTest.java @@ -28,7 +28,7 @@ void setUp() { @Test void testSupportsParameterWithPageAnnotation() { - when(parameter.hasParameterAnnotation(Page.class)).thenReturn(true); + when(parameter.hasParameterAnnotation(Pagination.class)).thenReturn(true); when(parameter.getParameterType()).thenReturn((Class) Pageable.class); assertTrue(resolver.supportsParameter(parameter)); @@ -36,14 +36,14 @@ void testSupportsParameterWithPageAnnotation() { @Test void testSupportsParameterWithoutPageAnnotation() { - when(parameter.hasParameterAnnotation(Page.class)).thenReturn(false); + when(parameter.hasParameterAnnotation(Pagination.class)).thenReturn(false); assertFalse(resolver.supportsParameter(parameter)); } @Test void testSupportsParameterWithWrongType() { - when(parameter.hasParameterAnnotation(Page.class)).thenReturn(true); + when(parameter.hasParameterAnnotation(Pagination.class)).thenReturn(true); when(parameter.getParameterType()).thenReturn((Class) String.class); assertFalse(resolver.supportsParameter(parameter)); @@ -51,9 +51,9 @@ void testSupportsParameterWithWrongType() { @Test void testResolveArgumentWithDefaults() throws Exception { - Page pageAnnotation = createPageAnnotation( + Pagination pageAnnotation = createPageAnnotation( "page", "size", "sort", 0, 20, 100, 10); - when(parameter.getParameterAnnotation(Page.class)).thenReturn(pageAnnotation); + when(parameter.getParameterAnnotation(Pagination.class)).thenReturn(pageAnnotation); when(webRequest.getParameter("page")).thenReturn(null); when(webRequest.getParameter("size")).thenReturn(null); when(webRequest.getParameter("sort")).thenReturn(null); @@ -68,9 +68,9 @@ void testResolveArgumentWithDefaults() throws Exception { @Test void testResolveArgumentWithCustomPageAndSize() throws Exception { - Page pageAnnotation = createPageAnnotation( + Pagination pageAnnotation = createPageAnnotation( "page", "size", "sort", 0, 20, 100, 10); - when(parameter.getParameterAnnotation(Page.class)).thenReturn(pageAnnotation); + when(parameter.getParameterAnnotation(Pagination.class)).thenReturn(pageAnnotation); when(webRequest.getParameter("page")).thenReturn("2"); when(webRequest.getParameter("size")).thenReturn("50"); when(webRequest.getParameter("sort")).thenReturn(null); @@ -85,9 +85,9 @@ void testResolveArgumentWithCustomPageAndSize() throws Exception { @Test void testResolveArgumentWithSort() throws Exception { - Page pageAnnotation = createPageAnnotation( + Pagination pageAnnotation = createPageAnnotation( "page", "size", "sort", 0, 20, 100, 10); - when(parameter.getParameterAnnotation(Page.class)).thenReturn(pageAnnotation); + when(parameter.getParameterAnnotation(Pagination.class)).thenReturn(pageAnnotation); when(webRequest.getParameter("page")).thenReturn("0"); when(webRequest.getParameter("size")).thenReturn("20"); when(webRequest.getParameter("sort")).thenReturn("name"); @@ -106,9 +106,9 @@ void testResolveArgumentWithSort() throws Exception { @Test void testResolveArgumentWithDescendingSort() throws Exception { - Page pageAnnotation = createPageAnnotation( + Pagination pageAnnotation = createPageAnnotation( "page", "size", "sort", 0, 20, 100, 10); - when(parameter.getParameterAnnotation(Page.class)).thenReturn(pageAnnotation); + when(parameter.getParameterAnnotation(Pagination.class)).thenReturn(pageAnnotation); when(webRequest.getParameter("page")).thenReturn("1"); when(webRequest.getParameter("size")).thenReturn("10"); when(webRequest.getParameter("sort")).thenReturn("-createdAt"); @@ -127,9 +127,9 @@ void testResolveArgumentWithDescendingSort() throws Exception { @Test void testResolveArgumentWithMultipleSortFields() throws Exception { - Page pageAnnotation = createPageAnnotation( + Pagination pageAnnotation = createPageAnnotation( "page", "size", "sort", 0, 20, 100, 10); - when(parameter.getParameterAnnotation(Page.class)).thenReturn(pageAnnotation); + when(parameter.getParameterAnnotation(Pagination.class)).thenReturn(pageAnnotation); when(webRequest.getParameter("page")).thenReturn("0"); when(webRequest.getParameter("size")).thenReturn("20"); when(webRequest.getParameter("sort")).thenReturn("-year,name"); @@ -151,9 +151,9 @@ void testResolveArgumentWithMultipleSortFields() throws Exception { @Test void testResolveArgumentWithCustomParameterNames() throws Exception { - Page pageAnnotation = createPageAnnotation( + Pagination pageAnnotation = createPageAnnotation( "p", "s", "order", 0, 20, 100, 10); - when(parameter.getParameterAnnotation(Page.class)).thenReturn(pageAnnotation); + when(parameter.getParameterAnnotation(Pagination.class)).thenReturn(pageAnnotation); when(webRequest.getParameter("p")).thenReturn("3"); when(webRequest.getParameter("s")).thenReturn("15"); when(webRequest.getParameter("order")).thenReturn("name"); @@ -168,9 +168,9 @@ void testResolveArgumentWithCustomParameterNames() throws Exception { @Test void testResolveArgumentThrowsOnNegativePage() { - Page pageAnnotation = createPageAnnotation( + Pagination pageAnnotation = createPageAnnotation( "page", "size", "sort", 0, 20, 100, 10); - when(parameter.getParameterAnnotation(Page.class)).thenReturn(pageAnnotation); + when(parameter.getParameterAnnotation(Pagination.class)).thenReturn(pageAnnotation); when(webRequest.getParameter("page")).thenReturn("-1"); assertThrows(IllegalArgumentException.class, @@ -179,9 +179,9 @@ void testResolveArgumentThrowsOnNegativePage() { @Test void testResolveArgumentThrowsOnZeroSize() { - Page pageAnnotation = createPageAnnotation( + Pagination pageAnnotation = createPageAnnotation( "page", "size", "sort", 0, 20, 100, 10); - when(parameter.getParameterAnnotation(Page.class)).thenReturn(pageAnnotation); + when(parameter.getParameterAnnotation(Pagination.class)).thenReturn(pageAnnotation); when(webRequest.getParameter("page")).thenReturn("0"); when(webRequest.getParameter("size")).thenReturn("0"); @@ -191,9 +191,9 @@ void testResolveArgumentThrowsOnZeroSize() { @Test void testResolveArgumentThrowsOnNegativeSize() { - Page pageAnnotation = createPageAnnotation( + Pagination pageAnnotation = createPageAnnotation( "page", "size", "sort", 0, 20, 100, 10); - when(parameter.getParameterAnnotation(Page.class)).thenReturn(pageAnnotation); + when(parameter.getParameterAnnotation(Pagination.class)).thenReturn(pageAnnotation); when(webRequest.getParameter("page")).thenReturn("0"); when(webRequest.getParameter("size")).thenReturn("-10"); @@ -203,9 +203,9 @@ void testResolveArgumentThrowsOnNegativeSize() { @Test void testResolveArgumentThrowsOnSizeExceedingMax() { - Page pageAnnotation = createPageAnnotation( + Pagination pageAnnotation = createPageAnnotation( "page", "size", "sort", 0, 20, 100, 10); - when(parameter.getParameterAnnotation(Page.class)).thenReturn(pageAnnotation); + when(parameter.getParameterAnnotation(Pagination.class)).thenReturn(pageAnnotation); when(webRequest.getParameter("page")).thenReturn("0"); when(webRequest.getParameter("size")).thenReturn("200"); @@ -215,9 +215,9 @@ void testResolveArgumentThrowsOnSizeExceedingMax() { @Test void testResolveArgumentThrowsOnInvalidPageNumber() { - Page pageAnnotation = createPageAnnotation( + Pagination pageAnnotation = createPageAnnotation( "page", "size", "sort", 0, 20, 100, 10); - when(parameter.getParameterAnnotation(Page.class)).thenReturn(pageAnnotation); + when(parameter.getParameterAnnotation(Pagination.class)).thenReturn(pageAnnotation); when(webRequest.getParameter("page")).thenReturn("invalid"); assertThrows(IllegalArgumentException.class, @@ -226,9 +226,9 @@ void testResolveArgumentThrowsOnInvalidPageNumber() { @Test void testResolveArgumentThrowsOnInvalidSize() { - Page pageAnnotation = createPageAnnotation( + Pagination pageAnnotation = createPageAnnotation( "page", "size", "sort", 0, 20, 100, 10); - when(parameter.getParameterAnnotation(Page.class)).thenReturn(pageAnnotation); + when(parameter.getParameterAnnotation(Pagination.class)).thenReturn(pageAnnotation); when(webRequest.getParameter("page")).thenReturn("0"); when(webRequest.getParameter("size")).thenReturn("invalid"); @@ -238,9 +238,9 @@ void testResolveArgumentThrowsOnInvalidSize() { @Test void testResolveArgumentWithSortDisabled() throws Exception { - Page pageAnnotation = createPageAnnotation( + Pagination pageAnnotation = createPageAnnotation( "page", "size", "sort", 0, 20, 100, 10, false); - when(parameter.getParameterAnnotation(Page.class)).thenReturn(pageAnnotation); + when(parameter.getParameterAnnotation(Pagination.class)).thenReturn(pageAnnotation); when(webRequest.getParameter("page")).thenReturn("1"); when(webRequest.getParameter("size")).thenReturn("10"); when(webRequest.getParameter("sort")).thenReturn("name"); @@ -253,20 +253,20 @@ void testResolveArgumentWithSortDisabled() throws Exception { assertFalse(result.getSort().isSorted()); } - private Page createPageAnnotation( + private Pagination createPageAnnotation( String pageParam, String sizeParam, String sortParam, int defaultPage, int defaultSize, int maxSize, int sortMaxFields) { return createPageAnnotation(pageParam, sizeParam, sortParam, defaultPage, defaultSize, maxSize, sortMaxFields, true); } - private Page createPageAnnotation( + private Pagination createPageAnnotation( String pageParam, String sizeParam, String sortParam, int defaultPage, int defaultSize, int maxSize, int sortMaxFields, boolean enableSort) { - return new Page() { + return new Pagination() { @Override - public Class annotationType() { - return Page.class; + public Class annotationType() { + return Pagination.class; } @Override