feat: 修改角色功能

This commit is contained in:
siujamo
2025-12-26 17:48:52 +08:00
parent 826f51926b
commit 3f1c320a48
5 changed files with 76 additions and 10 deletions
@@ -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<Void> editRole(@Validated @RequestBody EditRoleRequest request) {
roleService.editRole(request);
return ResponseEntity.ok(null);
}
}
@@ -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
) {
}
@@ -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<Role> getRole(Role example) {
return roleRepository.findOne(Example.of(example));
public List<Role> getRoles(Role example) {
return roleRepository.findAll(Example.of(example), Sort.by(Sort.Order.asc("id")));
}
public Page<Role> selectAll(Pageable pageable, QueryRoleWrapper wrapper) {
@@ -46,4 +45,28 @@ public class RoleManager {
public Role save(Role role) {
return roleRepository.save(role);
}
public Optional<Role> 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);
}
}
@@ -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());
}
}
@@ -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