Skip to content

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

Merged
ruanwenjun merged 1 commit into
apache:devfrom
ruanwenjun:chore/api-users-service-typed-returns
May 10, 2026
Merged

[Improvement-18224][API] Migrate UsersService Map<String,Object> returns to typed returns#18234
ruanwenjun merged 1 commit into
apache:devfrom
ruanwenjun:chore/api-users-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 17 UsersService methods that returned Map<String, Object> to typed returns / void with ServiceException, mirroring the pattern established by EnvironmentService.

Methods migrated:

  • createUser(8 args) -> User
  • deleteUserById -> void
  • grantProject / grantProjectWithReadPerm / grantProjectByCode -> void
  • revokeProject / revokeProjectById -> void
  • grantNamespaces / grantDataSource -> void
  • getUserInfo -> User (tenantCode / alertGroup / timeZone populated, password stripped)
  • queryAllGeneralUsers / queryUserList(User) -> List
  • unauthorizedUser / authorizedUser -> List
  • registerUser / activateUser -> User
  • batchActivateUser -> Map<String, Object> (kept Map; nested success/failed buckets keep wire field names byte-for-byte)

batchActivateUser switches its inner loop to a try/catch around activateUser since activateUser now throws ServiceException; the wire shape (success.{sum, userName} / failed.{sum, info}) is unchanged.

UsersController forwards typed values via Result.success and the authorizedUser endpoint drops its bespoke try/catch since ApiException + ApiExceptionHandler now provide the equivalent fallback.

PythonGateway.deleteUser already discarded the return value, so the void return causes no Py4J impact. The other Py4J / SSO callers all use the already-typed createUser overloads.

Full module test suite: 682 tests, 0 failures.

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

@ruanwenjun ruanwenjun added improvement make more easy to user or prompt friendly refactor labels May 8, 2026
@ruanwenjun ruanwenjun added this to the 3.4.2 milestone May 8, 2026
@ruanwenjun ruanwenjun force-pushed the chore/api-users-service-typed-returns branch from 904b12d to 334024c Compare May 10, 2026 05:32
Copy link
Copy Markdown
Member

@SbloodyS SbloodyS left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@ruanwenjun ruanwenjun force-pushed the chore/api-users-service-typed-returns branch 2 times, most recently from c0e37b4 to ea70f6f Compare May 10, 2026 12:12
…rns to typed returns

Refactor 17 UsersService methods that returned Map<String, Object> to
typed returns / void with ServiceException, mirroring the pattern
established by EnvironmentService.

Methods migrated:
- createUser(8 args) -> User
- deleteUserById -> void
- grantProject / grantProjectWithReadPerm / grantProjectByCode -> void
- revokeProject / revokeProjectById -> void
- grantNamespaces / grantDataSource -> void
- getUserInfo -> User (tenantCode / alertGroup / timeZone populated, password stripped)
- queryAllGeneralUsers / queryUserList(User) -> List<User>
- unauthorizedUser / authorizedUser -> List<User>
- registerUser / activateUser -> User
- batchActivateUser -> Map<String, Object> (kept Map; nested success/failed
  buckets keep wire field names byte-for-byte)

batchActivateUser switches its inner loop to a try/catch around
activateUser since activateUser now throws ServiceException; the wire
shape (success.{sum, userName} / failed.{sum, info}) is unchanged.

UsersController forwards typed values via Result.success and the
authorizedUser endpoint drops its bespoke try/catch since
ApiException + ApiExceptionHandler now provide the equivalent fallback.

PythonGateway.deleteUser already discarded the return value, so the
void return causes no Py4J impact. The other Py4J / SSO callers all
use the already-typed createUser overloads.

Full module test suite: 682 tests, 0 failures.
@ruanwenjun ruanwenjun force-pushed the chore/api-users-service-typed-returns branch from ea70f6f to 0ebd64e Compare May 10, 2026 13:07
@sonarqubecloud
Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

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

See analysis details on SonarQube Cloud

@ruanwenjun ruanwenjun merged commit b589e4f into apache:dev May 10, 2026
121 of 123 checks passed
@ruanwenjun ruanwenjun deleted the chore/api-users-service-typed-returns branch May 10, 2026 14:18
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