Skip to content

[Improvement-18224][API] Migrate TaskDefinitionService Map<String,Object> returns to typed returns#18229

Open
ruanwenjun wants to merge 1 commit intoapache:devfrom
ruanwenjun:chore/api-task-definition-service-typed-returns
Open

[Improvement-18224][API] Migrate TaskDefinitionService Map<String,Object> returns to typed returns#18229
ruanwenjun wants to merge 1 commit intoapache:devfrom
ruanwenjun:chore/api-task-definition-service-typed-returns

Conversation

@ruanwenjun
Copy link
Copy Markdown
Member

Was this PR generated or assisted by AI?

YES, ops 4.7

Purpose of the pull request

Refactor 7 TaskDefinitionService methods from Map<String, Object> to typed return / void + ServiceException, with cascading updates to controller, PythonGateway and unit test:

  • queryTaskDefinitionByName(...): TaskDefinition
  • updateTaskWithUpstream(...): Long (the updated task code)
  • switchVersion(...): void
  • deleteByCodeAndVersion(...): void
  • queryTaskDefinitionDetail(...): TaskDefinitionVO
  • genTaskCodeList(Integer): List
  • releaseTaskDefinition(...): void

The private updateTask helper now throws ServiceException for every error path; it still returns null for the "task body unchanged" case so the public method can short-circuit when both the body and upstream relations are unchanged. As a side effect this fixes a latent bug in updateTaskWithUpstream where any error from the helper was silently overridden with SUCCESS whenever the new and existing upstream code sets happened to match (e.g. TASK_DEFINE_NOT_EXIST returned 200 OK). No test covered that edge case.

A small private helper requireProjectAndWritePerm replaces the inline hasProjectAndWritePerm(Map) call sites; ProjectService remains untouched and will be migrated last in the #18224 series.

HTTP wire format is preserved: ApiExceptionHandler converts ServiceException to the same Result(code, msg) shape that BaseController.returnDataList(map) produced; success paths use Result.success(data) matching the prior JSON body byte-for-byte.

Py4J boundary is preserved: PythonGateway.genTaskCodeList still returns Map<String, Object> with the same {STATUS, MSG, DATA_LIST} keys, now constructed in the wrapper from the service's typed return.

Part of the migration series tracked by #18224.

Brief change log

Verify this pull request

This pull request is code cleanup without any test coverage.

(or)

This pull request is already covered by existing tests, such as (please describe tests).

(or)

This change added tests and can be verified as follows:

(or)

Pull Request Notice

Pull Request Notice

If your pull request contains incompatible change, you should also add it to docs/docs/en/guide/upgrade/incompatible.md

…ect> returns to typed returns

Refactor 7 TaskDefinitionService methods from Map<String, Object> to typed
return / void + ServiceException, with cascading updates to controller,
PythonGateway and unit test:

- queryTaskDefinitionByName(...): TaskDefinition
- updateTaskWithUpstream(...): Long (the updated task code)
- switchVersion(...): void
- deleteByCodeAndVersion(...): void
- queryTaskDefinitionDetail(...): TaskDefinitionVO
- genTaskCodeList(Integer): List<Long>
- releaseTaskDefinition(...): void

The private updateTask helper now throws ServiceException for every error
path; it still returns null for the "task body unchanged" case so the
public method can short-circuit when both the body and upstream relations
are unchanged. As a side effect this fixes a latent bug in
updateTaskWithUpstream where any error from the helper was silently
overridden with SUCCESS whenever the new and existing upstream code sets
happened to match (e.g. TASK_DEFINE_NOT_EXIST returned 200 OK). No test
covered that edge case.

A small private helper requireProjectAndWritePerm replaces the inline
hasProjectAndWritePerm(Map) call sites; ProjectService remains untouched
and will be migrated last in the apache#18224 series.

HTTP wire format is preserved: ApiExceptionHandler converts ServiceException
to the same Result(code, msg) shape that BaseController.returnDataList(map)
produced; success paths use Result.success(data) matching the prior JSON
body byte-for-byte.

Py4J boundary is preserved: PythonGateway.genTaskCodeList still returns
Map<String, Object> with the same {STATUS, MSG, DATA_LIST} keys, now
constructed in the wrapper from the service's typed return.

Part of the migration series tracked by apache#18224.
@PathVariable(value = "version") int version) {
Map<String, Object> result = taskDefinitionService.switchVersion(loginUser, projectCode, code, version);
return returnDataList(result);
public Result<Void> switchTaskDefinitionVersion(@Parameter(hidden = true) @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@RequestParam("genNum") Integer genNum) {
Map<String, Object> result = taskDefinitionService.genTaskCodeList(genNum);
return returnDataList(result);
public Result<List<Long>> genTaskCodeList(@Parameter(hidden = true) @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
*/
private void requireProjectAndWritePerm(User loginUser, Project project) {
Map<String, Object> permCheck = new HashMap<>();
if (!projectService.hasProjectAndWritePerm(loginUser, project, permCheck)) {
@sonarqubecloud
Copy link
Copy Markdown

sonarqubecloud Bot commented May 8, 2026

Quality Gate Failed Quality Gate failed

Failed conditions
0.0% Coverage on New Code (required ≥ 60%)

See analysis details on SonarQube Cloud

@ruanwenjun ruanwenjun added this to the 3.4.2 milestone May 8, 2026
@ruanwenjun ruanwenjun added the improvement make more easy to user or prompt friendly label May 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backend improvement make more easy to user or prompt friendly refactor test

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants