diff --git a/powerjob-common/src/main/java/tech/powerjob/common/enums/ErrorCodes.java b/powerjob-common/src/main/java/tech/powerjob/common/enums/ErrorCodes.java index db0043c6..dfd42ce5 100644 --- a/powerjob-common/src/main/java/tech/powerjob/common/enums/ErrorCodes.java +++ b/powerjob-common/src/main/java/tech/powerjob/common/enums/ErrorCodes.java @@ -49,6 +49,10 @@ public enum ErrorCodes { * 系统内部异常 */ SYSTEM_UNKNOWN_ERROR("-500", "SYS_UNKNOWN_ERROR"), + /** + * 非法参数 + */ + ILLEGAL_ARGS_ERROR("-501", "ILLEGAL_ARGS_ERROR"), /** * OPENAPI 错误码号段 -10XX diff --git a/powerjob-common/src/main/java/tech/powerjob/common/exception/PowerJobExceptionLauncher.java b/powerjob-common/src/main/java/tech/powerjob/common/exception/PowerJobExceptionLauncher.java new file mode 100644 index 00000000..d86e13af --- /dev/null +++ b/powerjob-common/src/main/java/tech/powerjob/common/exception/PowerJobExceptionLauncher.java @@ -0,0 +1,17 @@ +package tech.powerjob.common.exception; + + +import tech.powerjob.common.enums.ErrorCodes; + +/** + * PowerJobExceptionLauncher + * + * @author tjq + * @since 2024/11/22 + */ +public class PowerJobExceptionLauncher { + + public PowerJobExceptionLauncher(ErrorCodes errorCode, String message) { + throw new PowerJobException(errorCode, message); + } +} diff --git a/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/controller/AppInfoController.java b/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/controller/AppInfoController.java index 36d048ef..6b312ad4 100644 --- a/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/controller/AppInfoController.java +++ b/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/controller/AppInfoController.java @@ -17,6 +17,8 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import tech.powerjob.common.enums.ErrorCodes; +import tech.powerjob.common.exception.PowerJobExceptionLauncher; import tech.powerjob.common.response.ResultDTO; import tech.powerjob.common.serialize.JsonUtils; import tech.powerjob.common.utils.CommonUtils; @@ -85,9 +87,14 @@ public class AppInfoController { Long id = req.getId(); if (id == null) { + + // 前置校验,防止部分没加唯一索引的 DB 重复创建记录导致异常 + appInfoRepository.findByAppName(req.getAppName()).ifPresent(x -> new PowerJobExceptionLauncher(ErrorCodes.ILLEGAL_ARGS_ERROR, String.format("App[%s] already exists", req.getAppName()))); + appInfoDO = new AppInfoDO(); appInfoDO.setGmtCreate(new Date()); appInfoDO.setCreator(LoginUserHolder.getUserId()); + } else { appInfoDO = appInfoService.findById(id, false).orElseThrow(() -> new IllegalArgumentException("can't find appInfo by id:" + id)); diff --git a/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/service/impl/NamespaceWebServiceImpl.java b/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/service/impl/NamespaceWebServiceImpl.java index e504bc81..342dbfd6 100644 --- a/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/service/impl/NamespaceWebServiceImpl.java +++ b/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/service/impl/NamespaceWebServiceImpl.java @@ -8,12 +8,14 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; +import tech.powerjob.common.enums.ErrorCodes; +import tech.powerjob.common.enums.SwitchableStatus; import tech.powerjob.common.exception.PowerJobException; +import tech.powerjob.common.exception.PowerJobExceptionLauncher; import tech.powerjob.server.auth.LoginUserHolder; import tech.powerjob.server.auth.RoleScope; import tech.powerjob.server.auth.service.WebAuthService; import tech.powerjob.server.common.SJ; -import tech.powerjob.common.enums.SwitchableStatus; import tech.powerjob.server.persistence.QueryConvertUtils; import tech.powerjob.server.persistence.remote.model.AppInfoDO; import tech.powerjob.server.persistence.remote.model.NamespaceDO; @@ -57,6 +59,9 @@ public class NamespaceWebServiceImpl implements NamespaceWebService { boolean isCreate = id == null; if (isCreate) { + + namespaceRepository.findByCode(req.getCode()).ifPresent(x -> new PowerJobExceptionLauncher(ErrorCodes.ILLEGAL_ARGS_ERROR, String.format("namespace[%s] already exists", req.getCode()))); + namespaceDO = new NamespaceDO(); namespaceDO.setGmtCreate(new Date());