Skip to content

Commit b65261b

Browse files
committed
adjusted search
1 parent a508c7b commit b65261b

File tree

7 files changed

+55
-12
lines changed

7 files changed

+55
-12
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# Changelog
22

3+
## v1.5.6 - (2025-03-06)
4+
5+
- Better ID search
6+
- Added info to the UI how to search
7+
38
## v1.5.5 - (2025-03-04)
49

510
- MdcTriggerInterceptor adds now start date and scheduler name

core/src/main/java/org/sterl/spring/persistent_tasks/history/HistoryService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.sterl.spring.persistent_tasks.history.model.TriggerHistoryLastStateEntity;
1818
import org.sterl.spring.persistent_tasks.history.repository.TriggerHistoryDetailRepository;
1919
import org.sterl.spring.persistent_tasks.history.repository.TriggerHistoryLastStateRepository;
20+
import org.sterl.spring.persistent_tasks.shared.StringHelper;
2021
import org.sterl.spring.persistent_tasks.shared.stereotype.TransactionalService;
2122
import org.sterl.spring.persistent_tasks.trigger.TriggerService;
2223
import org.sterl.spring.persistent_tasks.trigger.model.TriggerEntity;
@@ -102,8 +103,7 @@ public Page<TriggerHistoryLastStateEntity> findTriggerState(
102103
if (key == null && status == null) {
103104
return triggerHistoryLastStateRepository.findAll(page);
104105
}
105-
var id = key == null ? null : key.getId();
106-
if (id != null) id = id += "%";
106+
final var id = StringHelper.applySearchWildCard(key);
107107
final var name = key == null ? null : key.getTaskName();
108108
return triggerHistoryLastStateRepository.findAll(id, name, status, page);
109109
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.sterl.spring.persistent_tasks.shared;
2+
3+
import org.sterl.spring.persistent_tasks.api.TriggerKey;
4+
5+
public class StringHelper {
6+
7+
/**
8+
* Replaces all <code>*</code> with <code>%</code> as needed
9+
*/
10+
public static String applySearchWildCard(String value) {
11+
if (value == null || value.length() == 0) return null;
12+
return value.replace('*', '%');
13+
}
14+
15+
/**
16+
* Replaces all <code>*</code> with <code>%</code> as needed for the id.
17+
*/
18+
public static String applySearchWildCard(TriggerKey key) {
19+
if (key == null) return null;
20+
return applySearchWildCard(key.getId());
21+
}
22+
}

core/src/main/java/org/sterl/spring/persistent_tasks/trigger/component/ReadTriggerComponent.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.sterl.spring.persistent_tasks.api.TaskId;
1212
import org.sterl.spring.persistent_tasks.api.TriggerKey;
1313
import org.sterl.spring.persistent_tasks.api.TriggerStatus;
14+
import org.sterl.spring.persistent_tasks.shared.StringHelper;
1415
import org.sterl.spring.persistent_tasks.shared.stereotype.TransactionalCompontant;
1516
import org.sterl.spring.persistent_tasks.trigger.model.TriggerEntity;
1617
import org.sterl.spring.persistent_tasks.trigger.repository.TriggerRepository;
@@ -53,7 +54,7 @@ public List<TriggerEntity> findTriggersLastPingAfter(OffsetDateTime dateTime) {
5354
public Page<TriggerEntity> listTriggers(@Nullable TriggerKey key,
5455
@Nullable TriggerStatus status, Pageable page) {
5556
if (key == null && status == null) return triggerRepository.findAll(page);
56-
final var id = key == null ? null : key.getId();
57+
final var id = StringHelper.applySearchWildCard(key);
5758
final var name = key == null ? null : key.getTaskName();
5859
return triggerRepository.findAll(id, name, status, page);
5960
}

core/src/test/java/org/sterl/spring/persistent_tasks/trigger/api/TriggerResourceTest.java

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import java.time.Duration;
66
import java.time.OffsetDateTime;
7+
import java.util.UUID;
78

89
import org.junit.jupiter.api.BeforeEach;
910
import org.junit.jupiter.api.Test;
@@ -63,14 +64,18 @@ void testList() {
6364
@Test
6465
void testSearchById() {
6566
// GIVEN
67+
var uuid = UUID.randomUUID().toString();
6668
var key1 = triggerService.queue(TaskTriggerBuilder
67-
.newTrigger("task1").build()).getKey();
69+
.newTrigger("task1")
70+
.id("[@foo:[email protected]:" + uuid + "]")
71+
.build())
72+
.getKey();
6873
var key2 = triggerService.queue(TaskTriggerBuilder
6974
.newTrigger("task1").build()).getKey();
7075

7176
// WHEN
7277
var response = template.exchange(
73-
baseUrl + "?id=" + key1.getId().substring(0, 30),
78+
baseUrl + "?id=" + key1.getId().substring(0, 30) + "*",
7479
HttpMethod.GET,
7580
null,
7681
String.class);
@@ -80,21 +85,30 @@ void testSearchById() {
8085
assertThat(response.getBody()).isNotNull();
8186
assertThat(response.getBody()).contains(key1.getId());
8287
assertThat(response.getBody()).doesNotContain(key2.getId());
88+
89+
// WHEN
90+
response = template.exchange(
91+
baseUrl + "?id=*" + key1.getId().substring(10, 30) + "*",
92+
HttpMethod.GET,
93+
null,
94+
String.class);
95+
assertThat(response.getBody()).contains(key1.getId());
96+
assertThat(response.getBody()).doesNotContain(key2.getId());
8397
}
84-
98+
8599
@Test
86100
void testSearchByStatus() {
87101
// GIVEN
88102
var k1 = createStatus(new TriggerKey("1-foo", "foo"), TriggerStatus.WAITING).getKey();
89103
var k2 = createStatus(new TriggerKey("2-foo", "bar"), TriggerStatus.RUNNING).getKey();
90-
104+
91105
// WHEN
92106
var response = template.exchange(
93107
baseUrl + "?status=" + TriggerStatus.RUNNING,
94108
HttpMethod.GET,
95109
null,
96110
String.class);
97-
111+
98112
// THEN
99113
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
100114
assertThat(response.getBody()).isNotNull();

ui/src/history/history.page.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import TriggerStatusSelect from "@src/shared/view/triger-status-select.view";
88
import TriggerItemView from "@src/shared/view/trigger-list-item.view";
99
import TaskSelect from "@src/task/view/task-select.view";
1010
import { useQuery } from "crossroad";
11-
import { useState } from "react";
1211
import { Accordion, Col, Form, Row, Stack } from "react-bootstrap";
1312

1413
const HistoryPage = () => {
@@ -19,7 +18,7 @@ const HistoryPage = () => {
1918
);
2019

2120
const doReload = () => {
22-
triggers.doGet("?size=10&" + new URLSearchParams(query).toString());
21+
triggers.doGet("?size=4&" + new URLSearchParams(query).toString());
2322
};
2423

2524
useAutoRefresh(10000, doReload, [query]);
@@ -33,11 +32,12 @@ const HistoryPage = () => {
3332
<Form.Control
3433
defaultValue={query.id || ""}
3534
type="text"
36-
placeholder="Search..."
35+
placeholder="ID search, '*' any string, '_' any character ..."
3736
onKeyUp={(e) =>
3837
e.key == "Enter"
3938
? setQuery((prev) => ({
4039
...prev,
40+
page: 0 + "",
4141
id: (e.target as HTMLInputElement)
4242
.value,
4343
}))

ui/src/trigger/triggers.page.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,12 @@ const TriggersPage = () => {
3030
<Form.Control
3131
defaultValue={query.id || ""}
3232
type="text"
33-
placeholder="Search..."
33+
placeholder="ID search, '*' any string, '_' any character ..."
3434
onKeyUp={(e) =>
3535
e.key == "Enter"
3636
? setQuery((prev) => ({
3737
...prev,
38+
page: 0 + "",
3839
id: (e.target as HTMLInputElement).value,
3940
}))
4041
: null

0 commit comments

Comments
 (0)