diff --git a/boot/platform/src/main/java/com/platform/boot/commons/utils/ContextUtils.java b/boot/platform/src/main/java/com/platform/boot/commons/utils/ContextUtils.java index d202610a..b9bb0d27 100644 --- a/boot/platform/src/main/java/com/platform/boot/commons/utils/ContextUtils.java +++ b/boot/platform/src/main/java/com/platform/boot/commons/utils/ContextUtils.java @@ -118,31 +118,34 @@ public static Mono securityDetails() { .cast(SecurityDetails.class); } - public static Mono userAuditorSerializable(T obejct) { - PropertyDescriptor[] propertyDescriptors = BeanUtils.getPropertyDescriptors(obejct.getClass()); + public static Mono serializeUserAuditor(T object) { + PropertyDescriptor[] propertyDescriptors = BeanUtils.getPropertyDescriptors(object.getClass()); var setPropertyStream = Arrays.stream(propertyDescriptors) .filter(propertyDescriptor -> propertyDescriptor.getPropertyType() == UserAuditor.class); - var propertyFlux = Flux.fromStream(setPropertyStream).flatMap(propertyDescriptor -> { - try { - UserAuditor userAuditor = (UserAuditor) propertyDescriptor.getReadMethod().invoke(obejct); - if (ObjectUtils.isEmpty(userAuditor)) { - return Mono.just(obejct); - } - return USERS_SERVICE.loadByCode(userAuditor.code()).flatMap(user -> { - try { - propertyDescriptor.getWriteMethod().invoke(obejct, UserAuditor.withUser(user)); - return Mono.just(obejct); - } catch (IllegalAccessException | InvocationTargetException e) { - return Mono.error(RestServerException.withMsg( - "User auditor serialization getWriteMethod invoke error!", e)); - } - }); - } catch (IllegalAccessException | InvocationTargetException e) { - return Mono.error(RestServerException.withMsg( - "User auditor serialization getReadMethod invoke error!", e)); + var propertyFlux = Flux.fromStream(setPropertyStream) + .flatMap(propertyDescriptor -> handlePropertyDescriptor(object, propertyDescriptor)); + return propertyFlux.then(Mono.just(object)); + } + + private static Mono handlePropertyDescriptor(T object, PropertyDescriptor propertyDescriptor) { + try { + UserAuditor userAuditor = (UserAuditor) propertyDescriptor.getReadMethod().invoke(object); + if (ObjectUtils.isEmpty(userAuditor)) { + return Mono.just("User auditor is empty, No serializable." + propertyDescriptor.getName()); } - }); - return propertyFlux.then(Mono.just(obejct)); + return USERS_SERVICE.loadByCode(userAuditor.code()).flatMap(user -> { + try { + propertyDescriptor.getWriteMethod().invoke(object, UserAuditor.withUser(user)); + return Mono.just("User auditor serializable success. " + propertyDescriptor.getName()); + } catch (IllegalAccessException | InvocationTargetException e) { + return Mono.error(RestServerException.withMsg( + "User auditor serialization getWriteMethod invoke error!", e)); + } + }); + } catch (IllegalAccessException | InvocationTargetException e) { + return Mono.error(RestServerException.withMsg( + "User auditor serialization getReadMethod invoke error!", e)); + } } public static String nextId() { diff --git a/boot/platform/src/main/java/com/platform/boot/commons/utils/CriteriaUtils.java b/boot/platform/src/main/java/com/platform/boot/commons/utils/CriteriaUtils.java index 9544338b..66336c96 100644 --- a/boot/platform/src/main/java/com/platform/boot/commons/utils/CriteriaUtils.java +++ b/boot/platform/src/main/java/com/platform/boot/commons/utils/CriteriaUtils.java @@ -73,7 +73,7 @@ public static String applySort(Sort sort, String prefix) { * @param prefix the prefix for the SQL clause * @return the generated WHERE SQL clause */ - public static ParamSql applyParamsSql(Object object, Collection skipKeys, String prefix) { + public static ParamSql buildParamSql(Object object, Collection skipKeys, String prefix) { Map objectMap = BeanUtils.beanToMap(object, false, true); if (ObjectUtils.isEmpty(objectMap)) { @@ -86,7 +86,7 @@ public static ParamSql applyParamsSql(Object object, Collection skipKeys } objectMap = Maps.filterKeys(objectMap, key -> !removeKeys.contains(key)); - return applyParamsSql(objectMap, prefix); + return buildParamSql(objectMap, prefix); } /** @@ -96,7 +96,7 @@ public static ParamSql applyParamsSql(Object object, Collection skipKeys * @param prefix a prefix to be added to each column in the WHERE clause * @return a string representing the WHERE clause for the SQL query */ - public static ParamSql applyParamsSql(Map objectMap, String prefix) { + public static ParamSql buildParamSql(Map objectMap, String prefix) { StringJoiner whereSql = new StringJoiner(" and "); for (Map.Entry entry : objectMap.entrySet()) { String key = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, entry.getKey()); diff --git a/boot/platform/src/main/java/com/platform/boot/security/SecurityManager.java b/boot/platform/src/main/java/com/platform/boot/security/SecurityManager.java index 8e9b0304..ca5a7d46 100644 --- a/boot/platform/src/main/java/com/platform/boot/security/SecurityManager.java +++ b/boot/platform/src/main/java/com/platform/boot/security/SecurityManager.java @@ -98,19 +98,19 @@ private Mono buildUserDetails(User user, Set auth private Mono> loadGroups(String userCode) { return this.queryWithCache("USER_GROUPS-" + userCode, QUERY_GROUP_MEMBERS_SQL, Map.of("userCode", userCode), GroupMemberResponse.class) - .flatMap(ContextUtils::userAuditorSerializable).collectList(); + .flatMap(ContextUtils::serializeUserAuditor).collectList(); } private Mono> loadTenants(String userCode) { return this.queryWithCache("USER_TENANTS-" + userCode, QUERY_TENANT_MEMBERS_SQL, Map.of("userCode", userCode), TenantMemberResponse.class) - .flatMap(ContextUtils::userAuditorSerializable).collectList(); + .flatMap(ContextUtils::serializeUserAuditor).collectList(); } private Mono> authorities(String userCode) { return this.getAuthorities(userCode) .concatWith(this.getGroupAuthorities(userCode)) - .flatMap(ContextUtils::userAuditorSerializable).distinct().collectList(); + .flatMap(ContextUtils::serializeUserAuditor).distinct().collectList(); } private Flux getAuthorities(String userCode) { diff --git a/boot/platform/src/main/java/com/platform/boot/security/group/GroupsService.java b/boot/platform/src/main/java/com/platform/boot/security/group/GroupsService.java index 18c04a0b..0462e29b 100644 --- a/boot/platform/src/main/java/com/platform/boot/security/group/GroupsService.java +++ b/boot/platform/src/main/java/com/platform/boot/security/group/GroupsService.java @@ -25,7 +25,7 @@ public Flux search(GroupRequest request, Pageable pageable) { var cacheKey = ContextUtils.cacheKey(request, pageable); Query query = Query.query(request.toCriteria()).with(pageable); return super.queryWithCache(cacheKey, query, Group.class) - .flatMap(ContextUtils::userAuditorSerializable); + .flatMap(ContextUtils::serializeUserAuditor); } public Mono> page(GroupRequest request, Pageable pageable) { diff --git a/boot/platform/src/main/java/com/platform/boot/security/group/authority/GroupAuthoritiesService.java b/boot/platform/src/main/java/com/platform/boot/security/group/authority/GroupAuthoritiesService.java index abc1de3f..c3da8f3f 100644 --- a/boot/platform/src/main/java/com/platform/boot/security/group/authority/GroupAuthoritiesService.java +++ b/boot/platform/src/main/java/com/platform/boot/security/group/authority/GroupAuthoritiesService.java @@ -35,7 +35,7 @@ public Flux search(GroupAuthorityRequest request, Pageable pagea Query query = Query.query(request.toCriteria()).with(pageable); return super.queryWithCache(cacheKey, query, GroupAuthority.class) - .flatMap(ContextUtils::userAuditorSerializable); + .flatMap(ContextUtils::serializeUserAuditor); } public Mono> page(GroupAuthorityRequest request, Pageable pageable) { diff --git a/boot/platform/src/main/java/com/platform/boot/security/group/member/GroupMemberRequest.java b/boot/platform/src/main/java/com/platform/boot/security/group/member/GroupMemberRequest.java index d1d72d22..4c9cf30e 100644 --- a/boot/platform/src/main/java/com/platform/boot/security/group/member/GroupMemberRequest.java +++ b/boot/platform/src/main/java/com/platform/boot/security/group/member/GroupMemberRequest.java @@ -36,7 +36,7 @@ public Criteria toCriteria() { } public ParamSql toParamSql() { - ParamSql paramSql = CriteriaUtils.applyParamsSql(this, List.of("users", "username"), "a"); + ParamSql paramSql = CriteriaUtils.buildParamSql(this, List.of("users", "username"), "a"); StringJoiner criteria = paramSql.sql(); Map params = paramSql.params(); diff --git a/boot/platform/src/main/java/com/platform/boot/security/tenant/TenantsService.java b/boot/platform/src/main/java/com/platform/boot/security/tenant/TenantsService.java index 6b3effbb..a7bc0443 100644 --- a/boot/platform/src/main/java/com/platform/boot/security/tenant/TenantsService.java +++ b/boot/platform/src/main/java/com/platform/boot/security/tenant/TenantsService.java @@ -27,7 +27,7 @@ public Flux search(TenantRequest request, Pageable pageable) { var cacheKey = ContextUtils.cacheKey(request, pageable); var query = Query.query(request.toCriteria()).with(pageable); return super.queryWithCache(cacheKey, query, Tenant.class) - .flatMap(ContextUtils::userAuditorSerializable); + .flatMap(ContextUtils::serializeUserAuditor); } public Mono> page(TenantRequest request, Pageable pageable) { diff --git a/boot/platform/src/main/java/com/platform/boot/security/tenant/member/TenantMemberRequest.java b/boot/platform/src/main/java/com/platform/boot/security/tenant/member/TenantMemberRequest.java index e2e93376..578dc1bc 100644 --- a/boot/platform/src/main/java/com/platform/boot/security/tenant/member/TenantMemberRequest.java +++ b/boot/platform/src/main/java/com/platform/boot/security/tenant/member/TenantMemberRequest.java @@ -42,7 +42,7 @@ public Criteria toCriteria() { public ParamSql toParamSql() { ParamSql paramSql = CriteriaUtils - .applyParamsSql(this, List.of("users", "securityCode", "username"), "a"); + .buildParamSql(this, List.of("users", "securityCode", "username"), "a"); StringJoiner criteria = paramSql.sql(); Map params = paramSql.params(); diff --git a/boot/platform/src/main/java/com/platform/boot/security/user/UsersService.java b/boot/platform/src/main/java/com/platform/boot/security/user/UsersService.java index 6fc6d3b1..f063de33 100644 --- a/boot/platform/src/main/java/com/platform/boot/security/user/UsersService.java +++ b/boot/platform/src/main/java/com/platform/boot/security/user/UsersService.java @@ -32,7 +32,7 @@ public Flux search(UserRequest request, Pageable pageable) { ParamSql paramSql = QueryJson.queryJson(request.getQuery()); String query = "select * from se_users" + paramSql.whereSql() + CriteriaUtils.applyPage(pageable); return super.queryWithCache(cacheKey, query, paramSql.params(), UserResponse.class) - .flatMapSequential(ContextUtils::userAuditorSerializable); + .flatMapSequential(ContextUtils::serializeUserAuditor); } public Mono> page(UserRequest request, Pageable pageable) { diff --git a/boot/platform/src/main/java/com/platform/boot/security/user/authority/UserAuthoritiesService.java b/boot/platform/src/main/java/com/platform/boot/security/user/authority/UserAuthoritiesService.java index 75f251e1..d90251a7 100644 --- a/boot/platform/src/main/java/com/platform/boot/security/user/authority/UserAuthoritiesService.java +++ b/boot/platform/src/main/java/com/platform/boot/security/user/authority/UserAuthoritiesService.java @@ -21,7 +21,7 @@ public Flux search(UserAuthorityRequest request) { var cacheKey = ContextUtils.cacheKey(request); Query query = Query.query(request.toCriteria()); return super.queryWithCache(cacheKey, query, UserAuthority.class) - .flatMap(ContextUtils::userAuditorSerializable); + .flatMap(ContextUtils::serializeUserAuditor); } public Mono operate(UserAuthorityRequest request) {