From 3f1c320a48e56e9c2dcf10da1a4580237acc870a Mon Sep 17 00:00:00 2001 From: siujamo Date: Fri, 26 Dec 2025 17:48:52 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BF=AE=E6=94=B9=E8=A7=92=E8=89=B2?= =?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/RoleController.java | 7 ++++ .../domain/web/request/EditRoleRequest.java | 20 +++++++++++ .../onixbyte/helix/manager/RoleManager.java | 35 +++++++++++++++---- .../onixbyte/helix/service/RoleService.java | 17 +++++++++ .../onixbyte/helix/service/UserService.java | 7 ++-- 5 files changed, 76 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/onixbyte/helix/domain/web/request/EditRoleRequest.java diff --git a/src/main/java/com/onixbyte/helix/controller/RoleController.java b/src/main/java/com/onixbyte/helix/controller/RoleController.java index 7d16f6a..79a7505 100644 --- a/src/main/java/com/onixbyte/helix/controller/RoleController.java +++ b/src/main/java/com/onixbyte/helix/controller/RoleController.java @@ -2,6 +2,7 @@ package com.onixbyte.helix.controller; import com.onixbyte.helix.domain.entity.Role; import com.onixbyte.helix.domain.web.request.AddRoleRequest; +import com.onixbyte.helix.domain.web.request.EditRoleRequest; import com.onixbyte.helix.domain.web.request.QueryRoleRequest; import com.onixbyte.helix.service.RoleService; import org.springframework.data.domain.Page; @@ -36,4 +37,10 @@ public class RoleController { roleService.addRole(request); return ResponseEntity.ok(null); } + + @PutMapping + public ResponseEntity editRole(@Validated @RequestBody EditRoleRequest request) { + roleService.editRole(request); + return ResponseEntity.ok(null); + } } diff --git a/src/main/java/com/onixbyte/helix/domain/web/request/EditRoleRequest.java b/src/main/java/com/onixbyte/helix/domain/web/request/EditRoleRequest.java new file mode 100644 index 0000000..9392181 --- /dev/null +++ b/src/main/java/com/onixbyte/helix/domain/web/request/EditRoleRequest.java @@ -0,0 +1,20 @@ +package com.onixbyte.helix.domain.web.request; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; + +public record EditRoleRequest( + @NotNull(message = "角色 ID 不能为空") + Long id, + String name, + String code, + Integer sort, + Boolean defaultValue, + String description, + @Pattern( + regexp = "^(ACTIVE|INACTIVE)?$", + message = "状态仅可以是 ACTIVE、INACTIVE 其中之一") + String status +) { +} diff --git a/src/main/java/com/onixbyte/helix/manager/RoleManager.java b/src/main/java/com/onixbyte/helix/manager/RoleManager.java index 0046f9f..bd7f735 100644 --- a/src/main/java/com/onixbyte/helix/manager/RoleManager.java +++ b/src/main/java/com/onixbyte/helix/manager/RoleManager.java @@ -1,16 +1,15 @@ package com.onixbyte.helix.manager; +import com.onixbyte.helix.constant.Status; import com.onixbyte.helix.domain.database.query.wrapper.QueryRoleWrapper; import com.onixbyte.helix.domain.entity.Role; import com.onixbyte.helix.exception.BizException; import com.onixbyte.helix.mapper.RoleMapper; import com.onixbyte.helix.repository.RoleRepository; -import org.springframework.data.domain.Example; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.*; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Optional; @@ -32,8 +31,8 @@ public class RoleManager { } } - public Optional getRole(Role example) { - return roleRepository.findOne(Example.of(example)); + public List getRoles(Role example) { + return roleRepository.findAll(Example.of(example), Sort.by(Sort.Order.asc("id"))); } public Page selectAll(Pageable pageable, QueryRoleWrapper wrapper) { @@ -46,4 +45,28 @@ public class RoleManager { public Role save(Role role) { return roleRepository.save(role); } + + public Optional getRoleById(Long id) { + return roleRepository.findById(id); + } + + @Transactional + public void updateRole(Role role) { + var roleToUpdate = roleRepository.findById(role.getId()) + .orElseThrow(() -> new BizException(HttpStatus.NOT_FOUND, "找不到指定的角色信息。")); + + Optional.ofNullable(role.getName()) + .ifPresent(roleToUpdate::setName); + + Optional.ofNullable(role.getCode()) + .ifPresent(roleToUpdate::setCode); + + Optional.ofNullable(role.getSort()) + .ifPresent(roleToUpdate::setSort); + + roleToUpdate.setDescription(role.getDescription()); + + Optional.ofNullable(role.getStatus()) + .ifPresent(roleToUpdate::setStatus); + } } diff --git a/src/main/java/com/onixbyte/helix/service/RoleService.java b/src/main/java/com/onixbyte/helix/service/RoleService.java index 3cef3b8..615db80 100644 --- a/src/main/java/com/onixbyte/helix/service/RoleService.java +++ b/src/main/java/com/onixbyte/helix/service/RoleService.java @@ -4,8 +4,10 @@ import com.onixbyte.helix.constant.Status; import com.onixbyte.helix.domain.database.query.wrapper.QueryRoleWrapper; import com.onixbyte.helix.domain.entity.Role; import com.onixbyte.helix.domain.web.request.AddRoleRequest; +import com.onixbyte.helix.domain.web.request.EditRoleRequest; import com.onixbyte.helix.domain.web.request.QueryRoleRequest; import com.onixbyte.helix.manager.RoleManager; +import jakarta.transaction.Transactional; import org.apache.commons.lang3.StringUtils; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -59,4 +61,19 @@ public class RoleService { return roleManager.save(role); } + + @Transactional + public void editRole(EditRoleRequest request) { + roleManager.updateRole(Role.builder() + .id(request.id()) + .name(request.name()) + .code(request.code()) + .sort(request.sort()) + .defaultValue(request.defaultValue()) + .description(request.description()) + .status(Optional.ofNullable(request.status()) + .map(Status::valueOf) + .orElse(null)) + .build()); + } } diff --git a/src/main/java/com/onixbyte/helix/service/UserService.java b/src/main/java/com/onixbyte/helix/service/UserService.java index a33343a..bd3a1f0 100644 --- a/src/main/java/com/onixbyte/helix/service/UserService.java +++ b/src/main/java/com/onixbyte/helix/service/UserService.java @@ -11,7 +11,6 @@ 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.response.UserDetailResponse; -import com.onixbyte.helix.exception.BizException; import com.onixbyte.helix.manager.ApplicationManager; import com.onixbyte.helix.manager.RoleManager; import com.onixbyte.helix.manager.UserManager; @@ -25,7 +24,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; -import java.util.List; import java.util.Optional; @Service @@ -111,11 +109,12 @@ public class UserService { // Get role IDs var roleIds = Optional.ofNullable(request.roleIds()) .filter(CollectionUtils::isNotEmpty) - .orElseGet(() -> List.of(roleManager.getRole(Role.builder() + .orElseGet(() -> roleManager.getRoles(Role.builder() .defaultValue(true) .build()) + .stream() .map(Role::getId) - .orElseThrow(() -> new BizException("No default role specified.")))); + .toList()); // Build bindings var userRoleBindings = roleIds