This is an automated email from the ASF dual-hosted git repository.
github-merge-queue[bot] pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/texera.git
The following commit(s) were added to refs/heads/main by this push:
new 557983acb4 chore(amber): remove the unused search-by-operators
endpoint (#8331)
557983acb4 is described below
commit 557983acb436572b25d9121ae1234695a727e8a1
Author: Xinyuan Lin <[email protected]>
AuthorDate: Fri Sep 25 03:43:51 2026 +0000
chore(amber): remove the unused search-by-operators endpoint (#8331)
### What changes were proposed in this PR?
Deletes `WorkflowResource.searchWorkflowByOperator` (`GET
/workflow/search-by-operators`), which has no client. Pure deletion, no
behaviour change: **−66 lines**.
Workflow search in the UI goes to the unified `/dashboard/search`
resource — the frontend's search service builds
`${API}/dashboard/search`, and no file references this path.
### History
| | |
| --- | --- |
| **Introduced by** | #1611 (2022-08-07) — "Search Workflows Feature" |
| **Usage removed by** | #2038 (2023-07-07) — "Allow users to cascade
the sharing" deleted the frontend constant `WORKFLOW_OPERATOR_URL =
WORKFLOW_BASE_URL + "/search-by-operators"` when search moved to the
dashboard resource |
Dead for about three years; workflow search has gone to
`/dashboard/search` ever since.
> Reviewer note: the frontend's `searchByOperators` test in
`user-workflow.component.spec.ts` is a name coincidence, not a caller —
it drives the filter UI (`component.filters.operators`,
`masterFilterList`), which queries `/dashboard/search`. Nothing in the
frontend, or anywhere else, builds this URL.
Removing the method also frees `Condition` and `noCondition`, which no
other method in `WorkflowResource` uses — scalafix flagged both, and
they are the only other lines touched.
### Any related issues, documentation, discussions?
Closes #8328
### How was this PR tested?
Existing tests only — this PR adds none, since it removes an endpoint
and the one test that covered it.
Locally, from the repo root with Java 17:
- `sbt "WorkflowExecutionService/Test/compile"` — success.
- `sbt "WorkflowExecutionService/testOnly *WorkflowResourceSpec"` — 80
tests, all pass.
- `sbt scalafmtCheckAll "scalafixAll --check"` — clean.
Verification, re-runnable by a reviewer:
```
git grep -rn "search-by-operators\|searchWorkflowByOperator" # only the
deleted method and its test
git grep -rn "dashboard/search" -- frontend/src # where
search actually goes
```
### Was this PR authored or co-authored using generative AI tooling?
Generated-by: Claude Code (Claude Opus 5)
---
.../dashboard/user/workflow/WorkflowResource.scala | 57 +---------------------
.../dashboard/file/WorkflowResourceSpec.scala | 13 -----
2 files changed, 2 insertions(+), 68 deletions(-)
diff --git
a/amber/src/main/scala/org/apache/texera/web/resource/dashboard/user/workflow/WorkflowResource.scala
b/amber/src/main/scala/org/apache/texera/web/resource/dashboard/user/workflow/WorkflowResource.scala
index 46fad49580..38b2bb9dd2 100644
---
a/amber/src/main/scala/org/apache/texera/web/resource/dashboard/user/workflow/WorkflowResource.scala
+++
b/amber/src/main/scala/org/apache/texera/web/resource/dashboard/user/workflow/WorkflowResource.scala
@@ -40,8 +40,8 @@ import org.apache.texera.web.resource.dashboard.hub.EntityType
import org.apache.texera.web.service.WarehouseReadGuard
import
org.apache.texera.web.resource.dashboard.hub.HubResource.recordCloneAction
import
org.apache.texera.web.resource.dashboard.user.workflow.WorkflowResource._
-import org.jooq.impl.DSL.{noCondition, max}
-import org.jooq.{Condition, DSLContext, Record10, Result,
SelectOnConditionStep}
+import org.jooq.impl.DSL.max
+import org.jooq.{DSLContext, Record10, Result, SelectOnConditionStep}
import java.sql.Timestamp
import java.util
@@ -327,59 +327,6 @@ class WorkflowResource extends LazyLogging {
.fetchInto(classOf[String])
}
- /**
- * This method returns workflow IDs, that contain the selected operators,
as strings
- *
- * @return WorkflowID[]
- */
- @GET
- @RolesAllowed(Array("REGULAR", "ADMIN"))
- @Path("/search-by-operators")
- def searchWorkflowByOperator(
- @QueryParam("operator") operator: String,
- @Auth sessionUser: SessionUser
- ): List[String] = {
- // Example GET url:
localhost:8080/workflow/searchOperators?operator=Regex,CSVFileScan
- val user = sessionUser.getUser
- val quotes = "\""
- val operatorArray =
- operator.replace(" ", "").stripPrefix("[").stripSuffix("]").split(',')
- var orCondition: Condition = noCondition()
- for (i <- operatorArray.indices) {
- val operatorName = operatorArray(i)
- orCondition = orCondition.or(
- WORKFLOW.CONTENT
- .likeIgnoreCase(
- "%" + quotes + "operatorType" + quotes + ":" + quotes +
s"$operatorName" + quotes + "%"
- //gives error when I try to combine escape character with
formatted string
- //may be due to old scala version bug
- )
- )
-
- }
-
- val workflowEntries =
- context
- .select(
- WORKFLOW.WID
- )
- .from(WORKFLOW)
- .join(WORKFLOW_USER_ACCESS)
- .on(WORKFLOW_USER_ACCESS.WID.eq(WORKFLOW.WID))
- .where(
- orCondition
- .and(WORKFLOW_USER_ACCESS.UID.eq(user.getUid))
- )
- .fetch()
-
- workflowEntries
- .map(workflowRecord => {
- workflowRecord.into(WORKFLOW).getWid.intValue().toString
- })
- .asScala
- .toList
- }
-
/**
* This method returns the current in-session user's workflow list based on
all workflows he/she has access to
*
diff --git
a/amber/src/test/scala/org/apache/texera/web/resource/dashboard/file/WorkflowResourceSpec.scala
b/amber/src/test/scala/org/apache/texera/web/resource/dashboard/file/WorkflowResourceSpec.scala
index d197808d00..24cbf8da2a 100644
---
a/amber/src/test/scala/org/apache/texera/web/resource/dashboard/file/WorkflowResourceSpec.scala
+++
b/amber/src/test/scala/org/apache/texera/web/resource/dashboard/file/WorkflowResourceSpec.scala
@@ -1006,19 +1006,6 @@ class WorkflowResourceSpec
assertThrows[ForbiddenException](workflowResource.makePublic(wid,
sessionUser2))
}
- "WorkflowResource.searchWorkflowByOperator" should "return only workflows
whose content contains the operator" in {
- val wid = seedWorkflow(
- sessionUser1,
- "csv-wf",
- "d",
- "{\"operators\":[{\"operatorType\":\"CSVFileScan\"}]}"
- ).workflow.getWid
- seedWorkflow(sessionUser1, "filter-wf", "d",
"{\"operators\":[{\"operatorType\":\"Filter\"}]}")
-
- val hits = workflowResource.searchWorkflowByOperator("CSVFileScan",
sessionUser1)
- assert(hits == List(wid.toString))
- }
-
"WorkflowResource.duplicateWorkflow" should "create a distinct copy owned by
the user" in {
// duplicateWorkflow reassigns operator ids, so the content must have an
operators array.
val wid = seedWorkflow(