remy.liu 4 سال پیش
والد
کامیت
b1734a4a8c

+ 19 - 0
common-module/src/main/java/com/remy/common/module/CommentDTO.java

@@ -0,0 +1,19 @@
+package com.remy.common.module;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+@SuperBuilder
+@Data
+@NoArgsConstructor
+public class CommentDTO extends BaseDTO {
+
+    private String orderNo;
+
+    private Long userID;
+
+    private String goodsSerialNo;
+
+    private String content;
+}

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

@@ -1,5 +1,6 @@
 package com.remy.graphql.builder;
 
+import com.remy.common.module.CommentDTO;
 import com.remy.common.module.GoodsDTO;
 import com.remy.common.module.OrderDTO;
 import com.remy.common.module.UserDTO;
@@ -62,6 +63,7 @@ public class GraphqlContextBuilder implements GraphQLServletContextBuilder {
         dataLoaderRegistry.register("orderGoodsDataLoader", orderGoodsDataLoader());
         dataLoaderRegistry.register("orderUserDataLoader", orderUserDataLoader());
         dataLoaderRegistry.register("userAttentionsDataLoader", userAttentionsDataLoader());
+        dataLoaderRegistry.register("orderCommentsDataLoader", orderCommentsDataLoader());
         return dataLoaderRegistry;
     }
 
@@ -127,4 +129,14 @@ public class GraphqlContextBuilder implements GraphQLServletContextBuilder {
                                         }, StringUtils.join(attentionIdList, ",")).getBody())
                                 .collect(Collectors.toList())));
     }
+
+    private DataLoader<String, CommentDTO> orderCommentsDataLoader() {
+        return new DataLoader<>(
+                orderNos -> supplyAsync(
+                        () -> orderNos.stream().map(orderNo ->
+                                new RestTemplate().getForObject(apiEnv.getCommentsEndpoint() + orderNo, CommentDTO.class))
+                                .collect(Collectors.toList())
+                )
+        );
+    }
 }

+ 2 - 0
graphql-api/src/main/java/com/remy/graphql/evn/RestAPIEnv.java

@@ -16,4 +16,6 @@ public class RestAPIEnv {
     private String ordersEndpoint;
 
     private String usersEndpoint;
+
+    private String commentsEndpoint;
 }

+ 11 - 0
graphql-api/src/main/java/com/remy/graphql/resolvers/dataloader/OrderDataLoaderResolver.java

@@ -1,5 +1,6 @@
 package com.remy.graphql.resolvers.dataloader;
 
+import com.remy.common.module.CommentDTO;
 import com.remy.common.module.GoodsDTO;
 import com.remy.common.module.OrderDTO;
 import com.remy.common.module.UserDTO;
@@ -30,6 +31,16 @@ public class OrderDataLoaderResolver implements GraphQLResolver<OrderDTO> {
         throw new IllegalStateException("No goods data loader found");
     }
 
+    public CompletableFuture<CommentDTO> comment(OrderDTO orderDTO, DataFetchingEnvironment env) {
+        DataLoaderRegistry registry = ((GraphQLContext) env.getContext()).getDataLoaderRegistry();
+        DataLoader<String, CommentDTO> orderCommentsDataLoader = registry.getDataLoader("orderCommentsDataLoader");
+        if (orderCommentsDataLoader != null) {
+            return orderCommentsDataLoader.load(orderDTO.getOrderNo());
+        }
+        throw new IllegalStateException("No comment data loader found");
+    }
+
+
     public CompletableFuture<UserDTO> user(OrderDTO orderDTO, DataFetchingEnvironment env){
         DataLoaderRegistry registry = ((GraphQLContext) env.getContext()).getDataLoaderRegistry();
         DataLoader<Long, UserDTO> userDataLoader = registry.getDataLoader("userDataLoader");

+ 2 - 1
graphql-api/src/main/resources/application.yml

@@ -19,4 +19,5 @@ rest:
   api:
     goods-endpoint: http://localhost:8081/goods/
     orders-endpoint: http://localhost:8082/orders/
-    users-endpoint: http://localhost:8083/users/
+    comments-endpoint: http://localhost:8082/comments/
+    users-endpoint: http://localhost:8083/users/

+ 10 - 0
graphql-api/src/main/resources/graphqls/order.graphqls

@@ -21,6 +21,16 @@ type Order {
     goods: Goods!
     # 用户对象
     user: User!
+    # 评论对象
+    comment: Comment
+}
+
+type Comment{
+    id: ID
+    orderNo: String!
+    userID:ID!
+    goodsSerialNo:String!
+    content:String!
 }
 
 input OrderInput{

BIN
~$初识GraphQL.pptx