提交 f4e24024 作者: 方治民

refactor: 优化 RepositoryUtil

上级 842af799
......@@ -20,6 +20,7 @@ import com.yiring.common.param.PageParam;
import com.yiring.common.service.FileManageService;
import com.yiring.common.util.Commons;
import com.yiring.common.util.FileUtils;
import com.yiring.common.utils.RepositoryUtil;
import com.yiring.common.validation.group.Group;
import com.yiring.common.vo.PageVo;
import io.swagger.v3.oas.annotations.Operation;
......@@ -29,7 +30,6 @@ import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
......@@ -129,12 +129,8 @@ public class ExampleController {
@GetMapping("findUserExtensionInfo")
public Result<UserExtensionVo> findUserExtensionInfo() {
User user = auths.getLoginUser();
Optional<UserExtension> optional = userExtensionRepository.findOne(Example.of(new UserExtension(user)));
if (optional.isEmpty()) {
throw Status.NOT_FOUND.exception();
}
UserExtension ext = optional.get();
Example<UserExtension> example = Example.of(new UserExtension(user));
UserExtension ext = RepositoryUtil.find(userExtensionRepository, example);
UserExtensionVo vo = Commons.transform(ext, UserExtensionVo.class);
return Result.ok(vo);
}
......
......@@ -6,7 +6,7 @@ import com.yiring.auth.domain.permission.Permission;
import com.yiring.auth.domain.role.Role;
import com.yiring.auth.domain.user.User;
import com.yiring.auth.domain.user.UserRepository;
import com.yiring.common.utils.JpaUtil;
import com.yiring.common.utils.RepositoryUtil;
import java.util.List;
import java.util.Objects;
import java.util.Set;
......@@ -57,6 +57,6 @@ public class StpInterfaceImpl implements StpInterface {
*/
public User getUser(Object loginId) {
String id = Objects.toString(loginId);
return JpaUtil.getOrElseThrow(userRepository, id, "Code.1000");
return RepositoryUtil.find(userRepository, id, "Code.1000");
}
}
......@@ -12,7 +12,7 @@ import com.yiring.common.exception.BusinessException;
import com.yiring.common.param.IdParam;
import com.yiring.common.param.PageParam;
import com.yiring.common.param.PidParam;
import com.yiring.common.utils.JpaUtil;
import com.yiring.common.utils.RepositoryUtil;
import com.yiring.common.validation.group.Group;
import com.yiring.common.vo.PageVo;
import io.swagger.v3.oas.annotations.Operation;
......@@ -68,7 +68,7 @@ public class PermissionController {
@Operation(summary = "修改")
@PostMapping("modify")
public Result<String> modify(@RequestBody @Validated({ Group.Edit.class }) PermissionParam param) {
Permission entity = JpaUtil.getOrElseThrow(permissionRepository, param.getId());
Permission entity = RepositoryUtil.find(permissionRepository, param.getId());
if (!entity.getUid().equals(param.getUid())) {
// 仅当修改了角色标识时才检查重复
if (has(param.getUid())) {
......@@ -83,7 +83,7 @@ public class PermissionController {
@Operation(summary = "删除")
@PostMapping("remove")
public Result<String> remove(@ParameterObject @Validated IdParam param) {
Permission entity = JpaUtil.getOrElseThrow(permissionRepository, param.getId());
Permission entity = RepositoryUtil.find(permissionRepository, param.getId());
permissionRepository.delete(entity);
return Result.ok();
}
......@@ -91,7 +91,7 @@ public class PermissionController {
@Operation(summary = "查询")
@GetMapping("find")
public Result<PermissionVo> find(@ParameterObject @Validated IdParam param) {
Permission permission = JpaUtil.getOrElseThrow(permissionRepository, param.getId());
Permission permission = RepositoryUtil.find(permissionRepository, param.getId());
PermissionVo vo = new PermissionVo();
BeanUtils.copyProperties(permission, vo, Permission.Fields.meta);
vo.setMeta(permission.getMetaJson());
......
......@@ -13,7 +13,7 @@ import com.yiring.common.exception.BusinessException;
import com.yiring.common.param.IdParam;
import com.yiring.common.param.IdsParam;
import com.yiring.common.param.PageParam;
import com.yiring.common.utils.JpaUtil;
import com.yiring.common.utils.RepositoryUtil;
import com.yiring.common.validation.group.Group;
import com.yiring.common.vo.PageVo;
import io.swagger.v3.oas.annotations.Operation;
......@@ -73,7 +73,7 @@ public class RoleController {
@Operation(summary = "修改")
@PostMapping("modify")
public Result<String> modify(@ParameterObject @Validated({ Group.Edit.class }) RoleParam param) {
Role entity = JpaUtil.getOrElseThrow(roleRepository, param.getId());
Role entity = RepositoryUtil.find(roleRepository, param.getId());
if (!entity.getUid().equals(param.getUid())) {
// 仅当修改了角色标识时才检查重复
if (has(param.getUid())) {
......@@ -92,7 +92,7 @@ public class RoleController {
@ParameterObject @Validated IdParam idParam,
@ParameterObject @Validated IdsParam idsParam
) {
Role entity = JpaUtil.getOrElseThrow(roleRepository, idParam.getId());
Role entity = RepositoryUtil.find(roleRepository, idParam.getId());
// 查询权限集合
Collection<Serializable> ids = idsParam.toIds();
......@@ -113,7 +113,7 @@ public class RoleController {
@Operation(summary = "查询")
@GetMapping("find")
public Result<RoleVo> find(@ParameterObject @Validated IdParam param) {
Role entity = JpaUtil.getOrElseThrow(roleRepository, param.getId());
Role entity = RepositoryUtil.find(roleRepository, param.getId());
RoleVo vo = new RoleVo();
BeanUtils.copyProperties(entity, vo, Role.Fields.permissions);
vo.setPermissions(Permissions.toPermissionVos(Permissions.toPermissions(Collections.singleton(entity))));
......
......@@ -11,7 +11,7 @@ import com.yiring.common.param.IdParam;
import com.yiring.common.param.IdsParam;
import com.yiring.common.param.PageParam;
import com.yiring.common.util.Commons;
import com.yiring.common.utils.JpaUtil;
import com.yiring.common.utils.RepositoryUtil;
import com.yiring.common.utils.Specifications;
import com.yiring.common.vo.PageVo;
import io.swagger.v3.oas.annotations.Operation;
......@@ -60,7 +60,7 @@ public class UserController {
@ParameterObject @Validated IdParam idParam,
@ParameterObject @Validated IdsParam idsParam
) {
User entity = JpaUtil.getOrElseThrow(userRepository, idParam.getId());
User entity = RepositoryUtil.find(userRepository, idParam.getId());
// 查询角色集合
Collection<Serializable> ids = idsParam.toIds();
......
......@@ -3,8 +3,10 @@ package com.yiring.common.utils;
import com.yiring.common.core.I18n;
import com.yiring.common.core.Status;
import com.yiring.common.exception.FailStatusException;
import lombok.experimental.UtilityClass;
import org.jetbrains.annotations.PropertyKey;
import org.springframework.data.domain.Example;
import org.springframework.data.jpa.repository.JpaRepository;
/**
......@@ -15,7 +17,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
@SuppressWarnings({ "unused" })
@UtilityClass
public class JpaUtil {
public class RepositoryUtil {
/**
* 根据 ID 查询数据,如果数据不存在则抛出异常【数据未找到】
......@@ -24,8 +26,9 @@ public class JpaUtil {
* @return T
* @param <T> T
* @param <ID> ID
* @exception FailStatusException FailStatusException
*/
public <T, ID> T getOrElseThrow(JpaRepository<T, ID> repository, ID id) {
public <T, ID> T find(JpaRepository<T, ID> repository, ID id) throws FailStatusException {
return repository.findById(id).orElseThrow(Status.NOT_FOUND::exception);
}
......@@ -37,12 +40,44 @@ public class JpaUtil {
* @return T
* @param <T> T
* @param <ID> ID
* @exception FailStatusException FailStatusException
*/
public <T, ID> T getOrElseThrow(
public <T, ID> T find(
JpaRepository<T, ID> repository,
ID id,
@PropertyKey(resourceBundle = I18n.RESOURCE_BUNDLE) String message
) {
) throws FailStatusException {
return repository.findById(id).orElseThrow(() -> Status.NOT_FOUND.exception(message));
}
/**
* 根据条件查询数据,如果数据不存在则抛出异常【数据未找到】
* @param repository repository
* @param example example
* @return T
* @param <T> T
* @param <ID> ID
* @throws FailStatusException FailStatusException
*/
public <T, ID> T find(JpaRepository<T, ID> repository, Example<T> example) throws FailStatusException {
return repository.findOne(example).orElseThrow(Status.NOT_FOUND::exception);
}
/**
* 根据条件查询数据,如果数据不存在则抛出自定义异常【message】
* @param repository repository
* @param example example
* @param message 自定义异常信息
* @return T
* @param <T> T
* @param <ID> ID
* @throws FailStatusException FailStatusException
*/
public <T, ID> T find(
JpaRepository<T, ID> repository,
Example<T> example,
@PropertyKey(resourceBundle = I18n.RESOURCE_BUNDLE) String message
) throws FailStatusException {
return repository.findOne(example).orElseThrow(() -> Status.NOT_FOUND.exception(message));
}
}
......@@ -7,7 +7,7 @@ import com.yiring.common.param.IdParam;
import com.yiring.common.param.IdsParam;
import com.yiring.common.param.PageParam;
import com.yiring.common.util.Commons;
import com.yiring.common.utils.JpaUtil;
import com.yiring.common.utils.RepositoryUtil;
import com.yiring.common.utils.Specifications;
import com.yiring.common.validation.group.Group;
import com.yiring.common.vo.OptionVo;
......@@ -73,7 +73,7 @@ public class DictController {
@Operation(summary = "修改")
@PostMapping("modify")
public Result<String> modify(@ParameterObject @Validated({ Group.Edit.class }) DictParam param) {
Dict entity = JpaUtil.getOrElseThrow(dictRepository, param.getId());
Dict entity = RepositoryUtil.find(dictRepository, param.getId());
if (!entity.getCode().equals(param.getCode())) {
throw BusinessException.i18n("Code.101002");
}
......@@ -94,7 +94,7 @@ public class DictController {
@Operation(summary = "查询")
@GetMapping("find")
public Result<DictVo> find(@ParameterObject @Validated IdParam param) {
Dict entity = JpaUtil.getOrElseThrow(dictRepository, param.getId());
Dict entity = RepositoryUtil.find(dictRepository, param.getId());
DictVo vo = Commons.transform(entity, DictVo.class);
return Result.ok(vo);
}
......
......@@ -9,7 +9,7 @@ import com.yiring.common.param.IdParam;
import com.yiring.common.param.IdsParam;
import com.yiring.common.param.PageParam;
import com.yiring.common.util.Commons;
import com.yiring.common.utils.JpaUtil;
import com.yiring.common.utils.RepositoryUtil;
import com.yiring.common.utils.Specifications;
import com.yiring.common.validation.group.Group;
import com.yiring.common.vo.OptionVo;
......@@ -75,7 +75,7 @@ public class DictItemController {
@Operation(summary = "修改")
@PostMapping("modify")
public Result<String> modify(@ParameterObject @Validated({ Group.Edit.class }) DictItemParam param) {
DictItem entity = JpaUtil.getOrElseThrow(dictItemRepository, param.getId());
DictItem entity = RepositoryUtil.find(dictItemRepository, param.getId());
BeanUtils.copyProperties(param, entity);
dictItemRepository.saveAndFlush(entity);
return Result.ok();
......@@ -92,7 +92,7 @@ public class DictItemController {
@Operation(summary = "查询")
@GetMapping("find")
public Result<DictItemVo> find(@ParameterObject @Validated IdParam param) {
DictItem entity = JpaUtil.getOrElseThrow(dictItemRepository, param.getId());
DictItem entity = RepositoryUtil.find(dictItemRepository, param.getId());
DictItemVo vo = Commons.transform(entity, DictItemVo.class);
return Result.ok(vo);
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论