feat: optimize app manager list

This commit is contained in:
tjq 2024-02-16 21:45:27 +08:00
parent 7b7582dd91
commit 3ea089eaee
12 changed files with 71 additions and 37 deletions

View File

@ -61,7 +61,7 @@ public class DingTalkLoginService implements ThirdPartyLoginService {
public LoginTypeInfo loginType() {
return new LoginTypeInfo()
.setType(AuthConstants.ACCOUNT_TYPE_DING)
.setName("DingTalkLogin")
.setName("DingTalk")
;
}

View File

@ -27,7 +27,7 @@ import java.util.Optional;
* @since 2023/3/20
*/
@Service
public class PowerJobThirdPartyLoginService implements ThirdPartyLoginService {
public class PwjbAccountLoginService implements ThirdPartyLoginService {
@Resource
private PwjbUserInfoRepository pwjbUserInfoRepository;
@ -37,7 +37,7 @@ public class PowerJobThirdPartyLoginService implements ThirdPartyLoginService {
public LoginTypeInfo loginType() {
return new LoginTypeInfo()
.setType(AuthConstants.ACCOUNT_TYPE_POWER_JOB)
.setName("PowerJob Built-in Login")
.setName("PowerJob Account")
;
}

View File

@ -25,17 +25,18 @@ import tech.powerjob.server.auth.service.WebAuthService;
import tech.powerjob.server.persistence.PageResult;
import tech.powerjob.server.persistence.QueryConvertUtils;
import tech.powerjob.server.persistence.remote.model.AppInfoDO;
import tech.powerjob.server.persistence.remote.model.NamespaceDO;
import tech.powerjob.server.persistence.remote.repository.AppInfoRepository;
import tech.powerjob.server.web.converter.NamespaceConverter;
import tech.powerjob.server.web.request.ComponentUserRoleInfo;
import tech.powerjob.server.web.request.ModifyAppInfoRequest;
import tech.powerjob.server.web.request.QueryAppInfoRequest;
import tech.powerjob.server.web.response.AppInfoVO;
import tech.powerjob.server.web.response.NamespaceBaseVO;
import tech.powerjob.server.web.service.NamespaceWebService;
import javax.persistence.criteria.Predicate;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -54,6 +55,8 @@ public class AppInfoController {
private final AppInfoRepository appInfoRepository;
private final NamespaceWebService namespaceWebService;
@PostMapping("/save")
@ApiPermission(name = "App-Save", roleScope = RoleScope.APP, dynamicPermissionPlugin = ModifyOrCreateDynamicPermission.class, grandPermissionPlugin = SaveAppGrantPermissionPlugin.class)
public ResultDTO<AppInfoVO> saveAppInfo(@RequestBody ModifyAppInfoRequest req) {
@ -172,6 +175,15 @@ public class AppInfoController {
// 密码
boolean hasPermission = webAuthService.hasPermission(RoleScope.APP, appInfoDO.getId(), Permission.READ);
appInfoVO.setPassword(hasPermission ? appInfoDO.getPassword() : AuthConstants.TIPS_NO_PERMISSION_TO_SEE);
// namespace
Optional<NamespaceDO> namespaceOpt = namespaceWebService.findById(appInfoVO.getId());
if (namespaceOpt.isPresent()) {
NamespaceBaseVO baseNamespace = NamespaceConverter.do2BaseVo(namespaceOpt.get());
appInfoVO.setNamespace(baseNamespace);
appInfoVO.setNamespaceName(baseNamespace.getName());
}
}
return appInfoVO;

View File

@ -1,6 +1,7 @@
package tech.powerjob.server.web.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;
import tech.powerjob.common.response.ResultDTO;
@ -44,7 +45,7 @@ public class NamespaceController {
@ResponseBody
@PostMapping("/save")
@ApiPermission(name = "Namespace-Save", roleScope = RoleScope.NAMESPACE, dynamicPermissionPlugin = ModifyOrCreateDynamicPermission.class, grandPermissionPlugin = SaveNamespaceGrantPermissionPlugin.class)
public ResultDTO<NamespaceVO> save(@RequestBody ModifyNamespaceRequest req) {
public ResultDTO<NamespaceBaseVO> save(@RequestBody ModifyNamespaceRequest req) {
NamespaceDO savedNamespace = namespaceWebService.save(req);
return ResultDTO.success(NamespaceConverter.do2BaseVo(savedNamespace));
@ -65,9 +66,12 @@ public class NamespaceController {
PageResult<NamespaceVO> ret = new PageResult<>(namespacePageResult);
ret.setData(namespacePageResult.get().map(x -> {
NamespaceVO namespaceVO = NamespaceConverter.do2BaseVo(x);
fillPermissionInfo(x, namespaceVO);
return namespaceVO;
NamespaceVO detailVo = new NamespaceVO();
NamespaceBaseVO baseVO = NamespaceConverter.do2BaseVo(x);
BeanUtils.copyProperties(baseVO, detailVo);
fillPermissionInfo(x, detailVo);
return detailVo;
}).collect(Collectors.toList()));
return ResultDTO.success(ret);

View File

@ -9,7 +9,6 @@ import org.springframework.beans.BeanUtils;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import tech.powerjob.common.response.ResultDTO;
import tech.powerjob.common.serialize.JsonUtils;
import tech.powerjob.server.auth.PowerJobUser;
import tech.powerjob.server.auth.Role;
import tech.powerjob.server.auth.RoleScope;
@ -143,11 +142,8 @@ public class UserInfoController {
if (namespaceDO == null) {
return;
}
NamespaceBaseVO namespaceBaseVO = JsonUtils.parseObjectIgnoreException(JsonUtils.toJSONString(NamespaceConverter.do2BaseVo(namespaceDO)), NamespaceBaseVO.class);
if (namespaceBaseVO != null) {
namespaceBaseVO.genShowName();
NamespaceBaseVO namespaceBaseVO = NamespaceConverter.do2BaseVo(namespaceDO);
namespaceBaseVOS.add(namespaceBaseVO);
}
});
});
userDetailVO.setRole2NamespaceList(role2NamespaceBaseVo);

View File

@ -4,7 +4,7 @@ import org.springframework.beans.BeanUtils;
import tech.powerjob.common.utils.CommonUtils;
import tech.powerjob.server.common.constants.SwitchableStatus;
import tech.powerjob.server.persistence.remote.model.NamespaceDO;
import tech.powerjob.server.web.response.NamespaceVO;
import tech.powerjob.server.web.response.NamespaceBaseVO;
/**
* NamespaceConverter
@ -14,12 +14,14 @@ import tech.powerjob.server.web.response.NamespaceVO;
*/
public class NamespaceConverter {
public static NamespaceVO do2BaseVo(NamespaceDO d) {
NamespaceVO v = new NamespaceVO();
public static NamespaceBaseVO do2BaseVo(NamespaceDO d) {
NamespaceBaseVO v = new NamespaceBaseVO();
BeanUtils.copyProperties(d, v);
v.setGmtCreateStr(CommonUtils.formatTime(d.getGmtCreate()));
v.setGmtModifiedStr(CommonUtils.formatTime(d.getGmtModified()));
v.setStatusStr(SwitchableStatus.of(d.getStatus()).name());
v.genShowName();
return v;
}

View File

@ -44,5 +44,8 @@ public class ModifyAppInfoRequest {
throw new PowerJobException("appName can't contains white space!");
}
CommonUtils.requireNonNull(password, "password can't be empty");
// 后续版本强制要求设置 namespace方便统一管理
CommonUtils.requireNonNull(namespaceId, "namespace can't be empty");
}
}

View File

@ -37,4 +37,11 @@ public class AppInfoVO extends AppBaseVO {
private String creator;
private String modifier;
/**
* Namespace Info
*/
private NamespaceBaseVO namespace;
private String namespaceName;
}

View File

@ -4,6 +4,7 @@ import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.Date;
/**
* namespace 基本 VO 对象用于列表渲染
@ -27,6 +28,21 @@ public class NamespaceBaseVO implements Serializable {
*/
protected String name;
private Integer status;
private String statusStr;
private Date gmtCreate;
private String gmtCreateStr;
private Date gmtModified;
private String gmtModifiedStr;
private String creator;
private String modifier;
/**
* 前端名称拼接 code + name更容易辨认
*/

View File

@ -5,8 +5,6 @@ import lombok.Setter;
import lombok.ToString;
import tech.powerjob.server.web.request.ComponentUserRoleInfo;
import java.util.Date;
/**
* 基础版本的命名空间
*
@ -21,26 +19,11 @@ public class NamespaceVO extends NamespaceBaseVO {
private String dept;
private String tags;
private Integer status;
private String statusStr;
/**
* 扩展字段
*/
private String extra;
private Date gmtCreate;
private String gmtCreateStr;
private Date gmtModified;
private String gmtModifiedStr;
private String creator;
private String modifier;
/**
* 访问 token
* 仅拥有当前 namespace 权限的访问者可见

View File

@ -6,6 +6,7 @@ import tech.powerjob.server.web.request.ModifyNamespaceRequest;
import tech.powerjob.server.web.request.QueryNamespaceRequest;
import java.util.List;
import java.util.Optional;
/**
* namespace web 服务
@ -19,6 +20,8 @@ public interface NamespaceWebService {
void delete(Long id);
Optional<NamespaceDO> findById(Long id);
Page<NamespaceDO> list(QueryNamespaceRequest queryNamespaceRequest);
List<NamespaceDO> listAll();

View File

@ -101,6 +101,14 @@ public class NamespaceWebServiceImpl implements NamespaceWebService {
namespaceRepository.deleteById(id);
}
@Override
public Optional<NamespaceDO> findById(Long id) {
if (id == null) {
return Optional.empty();
}
return namespaceRepository.findById(id);
}
@Override
public Page<NamespaceDO> list(QueryNamespaceRequest queryNamespaceRequest) {
String codeLike = queryNamespaceRequest.getCodeLike();