Skip to content

Commit 00aa586

Browse files
committed
add SearchRequest
1 parent 4bf95ed commit 00aa586

File tree

12 files changed

+177
-60
lines changed

12 files changed

+177
-60
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
<groupId>com.codingapi.springboot</groupId>
1414
<artifactId>springboot-parent</artifactId>
15-
<version>3.1.8</version>
15+
<version>3.1.9.dev</version>
1616

1717
<url>https://github.com/codingapi/springboot-framewrok</url>
1818
<name>springboot-parent</name>

springboot-starter-data-fast/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<artifactId>springboot-parent</artifactId>
77
<groupId>com.codingapi.springboot</groupId>
8-
<version>3.1.8</version>
8+
<version>3.1.9.dev</version>
99
</parent>
1010
<modelVersion>4.0.0</modelVersion>
1111

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/DynamicRequest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ public String getHql() {
5050
}
5151
}
5252

53+
System.out.println(hql);
54+
System.out.println(params);
5355
return hql.toString();
5456
}
5557

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/FastRepository.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,16 @@ default Class<T> getDomainClass() {
3030
default Page<T> pageRequest(PageRequest request) {
3131
if (request.hasFilter()) {
3232
Class<T> clazz = getDomainClass();
33-
DynamicRequest dynamicRequest = new DynamicRequest(request,clazz);
33+
DynamicRequest dynamicRequest = new DynamicRequest(request, clazz);
3434
return dynamicPageQuery(dynamicRequest.getHql(), request, dynamicRequest.getParams());
3535
}
3636
return findAll((org.springframework.data.domain.PageRequest) request);
3737
}
3838

39+
40+
default Page<T> searchRequest(SearchRequest request) {
41+
Class<T> clazz = getDomainClass();
42+
return pageRequest(request.toPageRequest(clazz));
43+
}
44+
3945
}
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
package com.codingapi.springboot.fast.jpa.repository;
2+
3+
import com.alibaba.fastjson.JSON;
4+
import com.alibaba.fastjson.JSONArray;
5+
import com.alibaba.fastjson.JSONObject;
6+
import com.codingapi.springboot.framework.dto.request.PageRequest;
7+
import com.codingapi.springboot.framework.dto.request.Relation;
8+
import jakarta.servlet.http.HttpServletRequest;
9+
import org.springframework.data.domain.Sort;
10+
import org.springframework.util.StringUtils;
11+
import org.springframework.web.context.request.RequestContextHolder;
12+
import org.springframework.web.context.request.ServletRequestAttributes;
13+
14+
import java.lang.reflect.Field;
15+
import java.util.ArrayList;
16+
import java.util.Base64;
17+
import java.util.List;
18+
19+
20+
public class SearchRequest {
21+
22+
private int current;
23+
private int pageSize;
24+
25+
private final HttpServletRequest request;
26+
27+
private final List<String> removeKeys = new ArrayList<>();
28+
29+
private final PageRequest pageRequest;
30+
31+
public SearchRequest() {
32+
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
33+
this.request = attributes.getRequest();
34+
this.pageRequest = new PageRequest();
35+
}
36+
37+
public void setCurrent(int current) {
38+
this.current = current - 1;
39+
this.removeKeys.add("current");
40+
}
41+
42+
public void setPageSize(int pageSize) {
43+
this.pageSize = pageSize;
44+
this.removeKeys.add("pageSize");
45+
}
46+
47+
private String decode(String value) {
48+
return new String(Base64.getDecoder().decode(value));
49+
}
50+
51+
52+
static class ClassContent {
53+
54+
private final Class<?> clazz;
55+
private final PageRequest pageRequest;
56+
57+
public ClassContent(Class<?> clazz, PageRequest pageRequest) {
58+
this.clazz = clazz;
59+
this.pageRequest = pageRequest;
60+
}
61+
62+
public void addFilter(String key, String value) {
63+
Class<?> keyClass = getKeyClass(key);
64+
Object v = JSON.parseObject(value, keyClass);
65+
pageRequest.addFilter(key, Relation.EQUAL, v);
66+
}
67+
68+
public void addFilter(String key, List<String> value) {
69+
Class<?> keyClass = getKeyClass(key);
70+
pageRequest.addFilter(key, Relation.IN, value.stream()
71+
.map(v -> JSON.parseObject(v, keyClass))
72+
.toArray()
73+
);
74+
}
75+
76+
77+
private Class<?> getKeyClass(String key) {
78+
String[] keys = key.split("\\.");
79+
Class<?> keyClass = clazz;
80+
for (String k : keys) {
81+
Field[] fields = keyClass.getDeclaredFields();
82+
for (Field field : fields) {
83+
if (field.getName().equals(k)) {
84+
keyClass = field.getType();
85+
break;
86+
}
87+
}
88+
}
89+
return keyClass;
90+
}
91+
92+
}
93+
94+
PageRequest toPageRequest(Class<?> clazz) {
95+
pageRequest.setCurrent(current);
96+
pageRequest.setPageSize(pageSize);
97+
98+
ClassContent content = new ClassContent(clazz, pageRequest);
99+
100+
String sort = request.getParameter("sort");
101+
if (StringUtils.hasLength(sort)) {
102+
sort = decode(sort);
103+
if (JSON.isValid(sort)) {
104+
removeKeys.add("sort");
105+
JSONObject jsonObject = JSON.parseObject(sort);
106+
for (String key : jsonObject.keySet()) {
107+
String value = jsonObject.getString(key);
108+
if ("ascend".equals(value)) {
109+
pageRequest.addSort(Sort.by(key).ascending());
110+
} else {
111+
pageRequest.addSort(Sort.by(key).descending());
112+
}
113+
}
114+
}
115+
}
116+
117+
118+
String filter = request.getParameter("filter");
119+
if (StringUtils.hasLength(filter)) {
120+
filter = decode(filter);
121+
if (JSON.isValid(filter)) {
122+
removeKeys.add("filter");
123+
JSONObject jsonObject = JSON.parseObject(filter);
124+
for (String key : jsonObject.keySet()) {
125+
JSONArray value = jsonObject.getJSONArray(key);
126+
if (value != null && !value.isEmpty()) {
127+
List<String> values = value.stream().map(Object::toString).toList();
128+
content.addFilter(key, values);
129+
}
130+
}
131+
}
132+
}
133+
134+
135+
request.getParameterNames().asIterator().forEachRemaining(key -> {
136+
if (!removeKeys.contains(key)) {
137+
String value = request.getParameter(key);
138+
if (StringUtils.hasLength(value)) {
139+
content.addFilter(key, value);
140+
}
141+
}
142+
});
143+
144+
return pageRequest;
145+
}
146+
147+
148+
}

springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/DemoRepositoryTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ void pageRequest() {
7070
PageRequest request = new PageRequest();
7171
request.setCurrent(1);
7272
request.setPageSize(10);
73-
request.andFilter("name", Relation.LIKE, "%2%");
73+
request.addFilter("name", Relation.LIKE, "%2%");
7474

7575
Page<Demo> page = demoRepository.pageRequest(request);
7676
assertEquals(1, page.getTotalElements());
@@ -92,7 +92,7 @@ void customInSearch() {
9292
request.setCurrent(1);
9393
request.setPageSize(10);
9494

95-
request.andFilter("id", Relation.IN, 1, 2, 3);
95+
request.addFilter("id", Relation.IN, 1, 2, 3);
9696

9797
Page<Demo> page = demoRepository.pageRequest(request);
9898
log.info("demo:{}", page.getContent());
@@ -112,7 +112,7 @@ void customOrSearch() {
112112
demoRepository.save(demo2);
113113

114114
PageRequest request = new PageRequest();
115-
request.setCurrent(1);
115+
request.setCurrent(0);
116116
request.setPageSize(10);
117117

118118

@@ -172,7 +172,7 @@ void sortQuery() {
172172
demoRepository.save(demo2);
173173

174174
PageRequest request = new PageRequest();
175-
request.setCurrent(1);
175+
request.setCurrent(0);
176176
request.setPageSize(10);
177177

178178
request.addSort(Sort.by("id").descending());

springboot-starter-security-jwt/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<artifactId>springboot-parent</artifactId>
88
<groupId>com.codingapi.springboot</groupId>
9-
<version>3.1.8</version>
9+
<version>3.1.9.dev</version>
1010
</parent>
1111

1212
<artifactId>springboot-starter-security-jwt</artifactId>

springboot-starter/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>com.codingapi.springboot</groupId>
77
<artifactId>springboot-parent</artifactId>
8-
<version>3.1.8</version>
8+
<version>3.1.9.dev</version>
99
</parent>
1010
<artifactId>springboot-starter</artifactId>
1111

springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/Filter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public Filter(String key, Object... value) {
2525
}
2626

2727
public Filter(String key, Filter... value) {
28-
this(key, null, value);
28+
this(key, null, value);
2929
}
3030

3131
public static Filter as(String key, Relation relation, Object... value) {

springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/PageRequest.java

Lines changed: 8 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
package com.codingapi.springboot.framework.dto.request;
22

3-
import jakarta.servlet.http.HttpServletRequest;
43
import lombok.Getter;
4+
import lombok.Setter;
55
import org.springframework.data.domain.Pageable;
66
import org.springframework.data.domain.Sort;
7-
import org.springframework.web.context.request.RequestContextHolder;
8-
import org.springframework.web.context.request.ServletRequestAttributes;
97

108
import java.util.Optional;
119

1210
public class PageRequest extends org.springframework.data.domain.PageRequest {
1311

1412
@Getter
13+
@Setter
1514
private int current;
15+
16+
@Setter
17+
@Getter
1618
private int pageSize;
1719

1820
@Getter
1921
private final RequestFilter requestFilter = new RequestFilter();
2022

21-
@Getter
22-
private HttpServletRequest servletRequest;
2323

2424
private org.springframework.data.domain.PageRequest pageRequest;
2525

@@ -28,43 +28,13 @@ public PageRequest(int current, int pageSize, Sort sort) {
2828
this.current = current;
2929
this.pageSize = pageSize;
3030
this.pageRequest = org.springframework.data.domain.PageRequest.of(current, pageSize, sort);
31-
32-
try {
33-
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
34-
this.servletRequest = attributes.getRequest();
35-
requestFilter.syncParameter(servletRequest);
36-
} catch (Exception e) {
37-
}
3831
}
3932

4033

4134
public PageRequest() {
4235
this(0, 20, Sort.unsorted());
4336
}
4437

45-
public void setCurrent(int current) {
46-
this.current = current > 0 ? current - 1 : 0;
47-
this.requestFilter.deleteFilter("current");
48-
}
49-
50-
public String getParameter(String key) {
51-
return servletRequest.getParameter(key);
52-
}
53-
54-
public String getParameter(String key, String defaultValue) {
55-
String result = servletRequest.getParameter(key);
56-
return result == null ? defaultValue : result;
57-
}
58-
59-
public int getIntParameter(String key) {
60-
return Integer.parseInt(servletRequest.getParameter(key));
61-
}
62-
63-
public int getIntParameter(String key, int defaultValue) {
64-
String result = servletRequest.getParameter(key);
65-
return result == null ? defaultValue : Integer.parseInt(result);
66-
}
67-
6838
public String getStringFilter(String key) {
6939
return requestFilter.getStringFilter(key);
7040
}
@@ -85,15 +55,6 @@ public boolean hasFilter() {
8555
return requestFilter.hasFilter();
8656
}
8757

88-
@Override
89-
public int getPageSize() {
90-
return pageSize;
91-
}
92-
93-
public void setPageSize(int pageSize) {
94-
this.pageSize = pageSize;
95-
this.requestFilter.deleteFilter("pageSize");
96-
}
9758

9859
@Override
9960
public Sort getSort() {
@@ -164,7 +125,7 @@ public void addSort(Sort sort) {
164125
}
165126
}
166127

167-
public PageRequest andFilter(String key, Relation relation, Object... value) {
128+
public PageRequest addFilter(String key, Relation relation, Object... value) {
168129
requestFilter.addFilter(key, relation, value);
169130
return this;
170131
}
@@ -174,8 +135,8 @@ public PageRequest addFilter(String key, Object... value) {
174135
return this;
175136
}
176137

177-
public PageRequest andFilter(Filter... value) {
178-
requestFilter.andFilters(value);
138+
public PageRequest andFilter(Filter... filters) {
139+
requestFilter.andFilters(filters);
179140
return this;
180141
}
181142

0 commit comments

Comments
 (0)