From a5da09cf0943a756b56327e1405a91d108ff3382 Mon Sep 17 00:00:00 2001 From: siujamo Date: Wed, 31 Dec 2025 17:00:45 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BF=AE=E6=94=B9=E6=9D=83=E9=99=90?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../helix/controller/AuthController.java | 4 ++-- .../helix/controller/AuthorityController.java | 6 +++++ .../helix/controller/UserController.java | 4 ++-- .../web/request/EditAuthorityRequest.java | 14 +++++++++++ ...eUserRequest.java => EditUserRequest.java} | 2 +- .../domain/web/request/LoginRequest.java | 17 ++++++++++++++ .../request/UsernamePasswordLoginRequest.java | 9 -------- .../helix/manager/AuthorityManager.java | 23 +++++++++++++++++++ .../onixbyte/helix/service/AuthService.java | 4 ++-- .../helix/service/AuthorityService.java | 5 ++++ .../onixbyte/helix/service/UserService.java | 4 ++-- 11 files changed, 74 insertions(+), 18 deletions(-) create mode 100644 src/main/java/com/onixbyte/helix/domain/web/request/EditAuthorityRequest.java rename src/main/java/com/onixbyte/helix/domain/web/request/{UpdateUserRequest.java => EditUserRequest.java} (94%) create mode 100644 src/main/java/com/onixbyte/helix/domain/web/request/LoginRequest.java delete mode 100644 src/main/java/com/onixbyte/helix/domain/web/request/UsernamePasswordLoginRequest.java diff --git a/src/main/java/com/onixbyte/helix/controller/AuthController.java b/src/main/java/com/onixbyte/helix/controller/AuthController.java index defeb02..36d4ed2 100644 --- a/src/main/java/com/onixbyte/helix/controller/AuthController.java +++ b/src/main/java/com/onixbyte/helix/controller/AuthController.java @@ -1,6 +1,6 @@ package com.onixbyte.helix.controller; -import com.onixbyte.helix.domain.web.request.UsernamePasswordLoginRequest; +import com.onixbyte.helix.domain.web.request.LoginRequest; import com.onixbyte.helix.domain.web.response.LoginSuccessResponse; import com.onixbyte.helix.service.AuthService; import org.slf4j.Logger; @@ -29,7 +29,7 @@ public class AuthController { */ @PostMapping("/login") public LoginSuccessResponse loginWithUsernameAndPassword( - @Validated @RequestBody UsernamePasswordLoginRequest request + @Validated @RequestBody LoginRequest request ) { return authService.login(request); } diff --git a/src/main/java/com/onixbyte/helix/controller/AuthorityController.java b/src/main/java/com/onixbyte/helix/controller/AuthorityController.java index 0a8fe29..31e2a5a 100644 --- a/src/main/java/com/onixbyte/helix/controller/AuthorityController.java +++ b/src/main/java/com/onixbyte/helix/controller/AuthorityController.java @@ -2,6 +2,7 @@ package com.onixbyte.helix.controller; import com.onixbyte.helix.domain.entity.Authority; import com.onixbyte.helix.domain.web.request.AddAuthorityRequest; +import com.onixbyte.helix.domain.web.request.EditAuthorityRequest; import com.onixbyte.helix.domain.web.request.QueryAuthorityRequest; import com.onixbyte.helix.service.AuthorityService; import org.springframework.data.domain.Page; @@ -36,4 +37,9 @@ public class AuthorityController { public Authority addAuthority(@Validated @RequestBody AddAuthorityRequest request) { return authorityService.addAuthority(request); } + + @PutMapping + public Authority editAuthority(@Validated @RequestBody EditAuthorityRequest request) { + return authorityService.editAuthority(request); + } } diff --git a/src/main/java/com/onixbyte/helix/controller/UserController.java b/src/main/java/com/onixbyte/helix/controller/UserController.java index e64aed2..6ab71f0 100644 --- a/src/main/java/com/onixbyte/helix/controller/UserController.java +++ b/src/main/java/com/onixbyte/helix/controller/UserController.java @@ -3,7 +3,7 @@ package com.onixbyte.helix.controller; import com.onixbyte.helix.domain.web.request.AddUserRequest; import com.onixbyte.helix.domain.web.request.QueryUserRequest; import com.onixbyte.helix.domain.web.request.ResetPasswordRequest; -import com.onixbyte.helix.domain.web.request.UpdateUserRequest; +import com.onixbyte.helix.domain.web.request.EditUserRequest; import com.onixbyte.helix.domain.web.response.UserDetailResponse; import com.onixbyte.helix.service.UserService; import org.springframework.beans.factory.annotation.Autowired; @@ -64,7 +64,7 @@ public class UserController { } @PutMapping - public ResponseEntity editUser(@Validated @RequestBody UpdateUserRequest request) { + public ResponseEntity editUser(@Validated @RequestBody EditUserRequest request) { userService.updateUser(request); return ResponseEntity.ok(null); } diff --git a/src/main/java/com/onixbyte/helix/domain/web/request/EditAuthorityRequest.java b/src/main/java/com/onixbyte/helix/domain/web/request/EditAuthorityRequest.java new file mode 100644 index 0000000..d71e437 --- /dev/null +++ b/src/main/java/com/onixbyte/helix/domain/web/request/EditAuthorityRequest.java @@ -0,0 +1,14 @@ +package com.onixbyte.helix.domain.web.request; + +import jakarta.validation.constraints.Pattern; + +public record EditAuthorityRequest( + Long id, + String name, + String description, + @Pattern( + regexp = "^(ACTIVE|INACTIVE)?$", + message = "状态参数错误") + String status +) { +} diff --git a/src/main/java/com/onixbyte/helix/domain/web/request/UpdateUserRequest.java b/src/main/java/com/onixbyte/helix/domain/web/request/EditUserRequest.java similarity index 94% rename from src/main/java/com/onixbyte/helix/domain/web/request/UpdateUserRequest.java rename to src/main/java/com/onixbyte/helix/domain/web/request/EditUserRequest.java index 55bfb05..c294023 100644 --- a/src/main/java/com/onixbyte/helix/domain/web/request/UpdateUserRequest.java +++ b/src/main/java/com/onixbyte/helix/domain/web/request/EditUserRequest.java @@ -4,7 +4,7 @@ import com.onixbyte.helix.enumeration.UserStatus; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Positive; -public record UpdateUserRequest( +public record EditUserRequest( @NotNull(message = "User ID cannot be null") @Positive(message = "User ID must be positive") Long id, diff --git a/src/main/java/com/onixbyte/helix/domain/web/request/LoginRequest.java b/src/main/java/com/onixbyte/helix/domain/web/request/LoginRequest.java new file mode 100644 index 0000000..49a7bfb --- /dev/null +++ b/src/main/java/com/onixbyte/helix/domain/web/request/LoginRequest.java @@ -0,0 +1,17 @@ +package com.onixbyte.helix.domain.web.request; + +/** + * Login data. + * + * @param username username + * @param password password + * @param uuid captcha uuid + * @param captcha captcha code + */ +public record LoginRequest( + String username, + String password, + String uuid, + String captcha +) { +} diff --git a/src/main/java/com/onixbyte/helix/domain/web/request/UsernamePasswordLoginRequest.java b/src/main/java/com/onixbyte/helix/domain/web/request/UsernamePasswordLoginRequest.java deleted file mode 100644 index 8e95e11..0000000 --- a/src/main/java/com/onixbyte/helix/domain/web/request/UsernamePasswordLoginRequest.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.onixbyte.helix.domain.web.request; - -public record UsernamePasswordLoginRequest( - String username, - String password, - String uuid, - String captcha -) { -} diff --git a/src/main/java/com/onixbyte/helix/manager/AuthorityManager.java b/src/main/java/com/onixbyte/helix/manager/AuthorityManager.java index 25971d7..b064e86 100644 --- a/src/main/java/com/onixbyte/helix/manager/AuthorityManager.java +++ b/src/main/java/com/onixbyte/helix/manager/AuthorityManager.java @@ -2,6 +2,9 @@ package com.onixbyte.helix.manager; import com.onixbyte.helix.domain.database.query.wrapper.QueryAuthorityWrapper; import com.onixbyte.helix.domain.entity.Authority; +import com.onixbyte.helix.domain.web.request.EditAuthorityRequest; +import com.onixbyte.helix.enumeration.Status; +import com.onixbyte.helix.exception.BizException; import com.onixbyte.helix.mapper.AuthorityMapper; import com.onixbyte.helix.repository.AuthorityRepository; import com.onixbyte.helix.shared.CacheName; @@ -12,9 +15,12 @@ import org.springframework.cache.annotation.Cacheable; import org.springframework.data.domain.Example; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import java.util.List; +import java.util.Optional; @Component public class AuthorityManager { @@ -49,4 +55,21 @@ public class AuthorityManager { public Authority save(Authority authority) { return authorityRepository.save(authority); } + + @Transactional + public Authority update(EditAuthorityRequest request) { + var authority = authorityRepository.findById(request.id()) + .orElseThrow(() -> new BizException(HttpStatus.NOT_FOUND, "找不到指定的权限信息")); + + Optional.ofNullable(request.name()) + .ifPresent(authority::setName); + + authority.setDescription(request.description()); + + Optional.ofNullable(request.status()) + .map(Status::valueOf) + .ifPresent(authority::setStatus); + + return authority; + } } diff --git a/src/main/java/com/onixbyte/helix/service/AuthService.java b/src/main/java/com/onixbyte/helix/service/AuthService.java index d272cec..ff972c9 100644 --- a/src/main/java/com/onixbyte/helix/service/AuthService.java +++ b/src/main/java/com/onixbyte/helix/service/AuthService.java @@ -3,7 +3,7 @@ package com.onixbyte.helix.service; import com.onixbyte.helix.client.TokenClient; import com.onixbyte.helix.shared.SettingName; import com.onixbyte.helix.domain.entity.Setting; -import com.onixbyte.helix.domain.web.request.UsernamePasswordLoginRequest; +import com.onixbyte.helix.domain.web.request.LoginRequest; import com.onixbyte.helix.domain.web.response.LoginSuccessResponse; import com.onixbyte.helix.exception.BizException; import com.onixbyte.helix.manager.CaptchaManager; @@ -49,7 +49,7 @@ public class AuthService { * @return user information and user identity token * @throws BizException if the user does not exist, or the username and password are incorrect */ - public LoginSuccessResponse login(UsernamePasswordLoginRequest request) { + public LoginSuccessResponse login(LoginRequest request) { var captchaEnabled = Optional.ofNullable(settingManager.getSettingByName(SettingName.CAPTCHA_ENABLED)) .map(Setting::asBoolean) .orElse(false); diff --git a/src/main/java/com/onixbyte/helix/service/AuthorityService.java b/src/main/java/com/onixbyte/helix/service/AuthorityService.java index b6eb3ce..d8d1bdb 100644 --- a/src/main/java/com/onixbyte/helix/service/AuthorityService.java +++ b/src/main/java/com/onixbyte/helix/service/AuthorityService.java @@ -3,6 +3,7 @@ package com.onixbyte.helix.service; import com.onixbyte.helix.domain.database.query.wrapper.QueryAuthorityWrapper; import com.onixbyte.helix.domain.entity.Authority; import com.onixbyte.helix.domain.web.request.AddAuthorityRequest; +import com.onixbyte.helix.domain.web.request.EditAuthorityRequest; import com.onixbyte.helix.domain.web.request.QueryAuthorityRequest; import com.onixbyte.helix.enumeration.Status; import com.onixbyte.helix.exception.BizException; @@ -45,4 +46,8 @@ public class AuthorityService { return authorityManager.save(authority); } + + public Authority editAuthority(EditAuthorityRequest request) { + return authorityManager.update(request); + } } diff --git a/src/main/java/com/onixbyte/helix/service/UserService.java b/src/main/java/com/onixbyte/helix/service/UserService.java index 8667811..5284a1e 100644 --- a/src/main/java/com/onixbyte/helix/service/UserService.java +++ b/src/main/java/com/onixbyte/helix/service/UserService.java @@ -9,7 +9,7 @@ import com.onixbyte.helix.domain.entity.UserRole; import com.onixbyte.helix.domain.web.request.AddUserRequest; import com.onixbyte.helix.domain.web.request.QueryUserRequest; import com.onixbyte.helix.domain.web.request.ResetPasswordRequest; -import com.onixbyte.helix.domain.web.request.UpdateUserRequest; +import com.onixbyte.helix.domain.web.request.EditUserRequest; import com.onixbyte.helix.domain.web.response.UserDetailResponse; import com.onixbyte.helix.manager.ApplicationManager; import com.onixbyte.helix.manager.RoleManager; @@ -134,7 +134,7 @@ public class UserService { } @Transactional(rollbackFor = Throwable.class) - public void updateUser(UpdateUserRequest request) { + public void updateUser(EditUserRequest request) { userManager.updateUser(User.builder() .id(request.id()) .fullName(request.fullName())