Kaynağa Gözat

add relationship

remy.liu 4 yıl önce
ebeveyn
işleme
478165dad3

+ 2 - 2
common-module/src/main/java/com/remy/common/module/UserDTO.java

@@ -35,7 +35,7 @@ public class UserDTO extends BaseDTO {
 
     private List<OrderDTO> orders;
 
-//    private List<UserDTO> attentions;
+    private List<UserDTO> attentions;
 
-//    private List<UserDTO> attentionIds;
+    private List<Long> attentionIds;
 }

+ 12 - 11
graphql-api/src/main/java/com/remy/graphql/builder/GraphqlContextBuilder.java

@@ -61,7 +61,7 @@ public class GraphqlContextBuilder implements GraphQLServletContextBuilder {
         dataLoaderRegistry.register("userDataLoader", userDataLoader());
         dataLoaderRegistry.register("orderGoodsDataLoader", orderGoodsDataLoader());
         dataLoaderRegistry.register("orderUserDataLoader", orderUserDataLoader());
-//        dataLoaderRegistry.register("userAttentionsDataLoader", userAttentionsDataLoader());
+        dataLoaderRegistry.register("userAttentionsDataLoader", userAttentionsDataLoader());
         return dataLoaderRegistry;
     }
 
@@ -81,7 +81,7 @@ public class GraphqlContextBuilder implements GraphQLServletContextBuilder {
         return new DataLoader<>(
                 userIDs -> supplyAsync(
                         () -> new RestTemplate().exchange(
-                                apiEnv.getUsersEndpoint()+ "queryByIds?userIds={userIDs}",
+                                apiEnv.getUsersEndpoint() + "queryByIds?userIds={userIDs}",
                                 HttpMethod.GET,
                                 new HttpEntity(null),
                                 new ParameterizedTypeReference<List<UserDTO>>() {
@@ -115,15 +115,16 @@ public class GraphqlContextBuilder implements GraphQLServletContextBuilder {
                                 .collect(Collectors.toList())));
     }
 
-    private DataLoader<Long, UserDTO> userAttentionsDataLoader() {
+    private DataLoader<List<Long>, List<UserDTO>> userAttentionsDataLoader() {
         return new DataLoader<>(
-                userIDs -> supplyAsync(
-                        () -> new RestTemplate().exchange(
-                                apiEnv.getOrdersEndpoint() + "queryByIds?userIds={userIds}",
-                                HttpMethod.GET,
-                                new HttpEntity(null),
-                                new ParameterizedTypeReference<List<UserDTO>>() {
-                                }, userIDs).getBody()
-                ));
+                attentionIds -> supplyAsync(
+                        () -> attentionIds.stream().map(attentionIdList ->
+                                new RestTemplate().exchange(
+                                        apiEnv.getUsersEndpoint() + "queryByIds?userIds={userIDs}",
+                                        HttpMethod.GET,
+                                        new HttpEntity(null),
+                                        new ParameterizedTypeReference<List<UserDTO>>() {
+                                        }, StringUtils.join(attentionIdList, ",")).getBody())
+                                .collect(Collectors.toList())));
     }
 }

+ 8 - 8
graphql-api/src/main/java/com/remy/graphql/resolvers/dataloader/UserDataLoaderResolver.java

@@ -24,13 +24,13 @@ public class UserDataLoaderResolver implements GraphQLResolver<UserDTO> {
         throw new IllegalStateException("No order user loader found");
     }
 
-//    public CompletableFuture<List<UserDTO>> attentions(UserDTO userDTO, DataFetchingEnvironment env) {
-//        DataLoaderRegistry registry = ((GraphQLContext) env.getContext()).getDataLoaderRegistry();
-//        DataLoader<Long, List<UserDTO>> userAttentionsDataLoader = registry.getDataLoader("userAttentionsDataLoader");
-//        if (userAttentionsDataLoader != null) {
-//            return userAttentionsDataLoader.load(userDTO.getId());
-//        }
-//        throw new IllegalStateException("No user attentions loader found");
-//    }
+    public CompletableFuture<List<UserDTO>> attentions(UserDTO userDTO, DataFetchingEnvironment env) {
+        DataLoaderRegistry registry = ((GraphQLContext) env.getContext()).getDataLoaderRegistry();
+        DataLoader<List<Long>, List<UserDTO>> userAttentionsDataLoader = registry.getDataLoader("userAttentionsDataLoader");
+        if (userAttentionsDataLoader != null) {
+            return userAttentionsDataLoader.load(userDTO.getAttentionIds());
+        }
+        throw new IllegalStateException("No user attentions loader found");
+    }
 
 }

+ 2 - 2
graphql-api/src/main/resources/graphqls/user.graphqls

@@ -24,7 +24,7 @@ type User {
     # 订单列表
     orders: [Order]
     # 关注人列表
-#    attentions: [User]
+    attentions: [User]
 }
 
 enum Gender{
@@ -50,5 +50,5 @@ input UserInput{
     # 地址列表
     addresses:[String]
     # 关注人Id列表
-#    attentionIds: [ID]
+    attentionIds: [ID]
 }

+ 4 - 4
user-service/src/main/java/com/remy/user/entity/User.java

@@ -55,9 +55,9 @@ public class User extends BaseEntity {
     @Singular
     private List<String> addresses;
 
-//    @ElementCollection
-//    @Column(name = "attentions")
-//    @Singular
-//    private List<Long> attentions;
+    @ElementCollection
+    @Column(name = "attentionIds")
+    @Singular
+    private List<Long> attentionIds;
 
 }