remy.liu il y a 4 ans
Parent
commit
d097cda5fd

+ 4 - 4
goods-service/src/main/resources/application.yml

@@ -7,8 +7,8 @@ spring:
     username: graphql
     password: graphql
   jpa:
-    generate-ddl: true
+#    generate-ddl: true
     show-sql: true
-    properties:
-      hibernate:
-        format_sql: true
+#    properties:
+#      hibernate:
+#        format_sql: true

+ 14 - 1
graphql-api/src/main/java/com/remy/graphql/resolvers/dataloader/OrderDataLoaderResolver.java

@@ -3,19 +3,25 @@ package com.remy.graphql.resolvers.dataloader;
 import com.remy.common.module.GoodsDTO;
 import com.remy.common.module.OrderDTO;
 import com.remy.common.module.UserDTO;
+import com.remy.graphql.evn.RestAPIEnv;
 import graphql.kickstart.execution.context.GraphQLContext;
 import graphql.kickstart.tools.GraphQLResolver;
 import graphql.schema.DataFetchingEnvironment;
 import org.dataloader.DataLoader;
 import org.dataloader.DataLoaderRegistry;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
 
 import java.util.concurrent.CompletableFuture;
 
 @Component
 public class OrderDataLoaderResolver implements GraphQLResolver<OrderDTO> {
 
-    public CompletableFuture<GoodsDTO> goods(OrderDTO orderDTO, DataFetchingEnvironment env){
+    @Autowired
+    RestAPIEnv apiEnv;
+
+    public CompletableFuture<GoodsDTO> goods(OrderDTO orderDTO, DataFetchingEnvironment env) {
         DataLoaderRegistry registry = ((GraphQLContext) env.getContext()).getDataLoaderRegistry();
         DataLoader<String, GoodsDTO> goodsDataLoader = registry.getDataLoader("goodsDataLoader");
         if (goodsDataLoader != null) {
@@ -32,4 +38,11 @@ public class OrderDataLoaderResolver implements GraphQLResolver<OrderDTO> {
         }
         throw new IllegalStateException("No user data loader found");
     }
+
+
+//    public CompletableFuture<UserDTO> user(OrderDTO orderDTO) {
+//        return CompletableFuture.supplyAsync(() ->
+//                new RestTemplate().getForObject(apiEnv.getUsersEndpoint() + orderDTO.getUserID(), UserDTO.class)
+//        );
+//    }
 }

+ 52 - 0
graphql-api/src/main/java/com/remy/graphql/resolvers/query/EntitiesQuery.java

@@ -0,0 +1,52 @@
+package com.remy.graphql.resolvers.query;
+
+import com.remy.common.module.BaseDTO;
+import com.remy.common.module.GoodsDTO;
+import com.remy.common.module.OrderDTO;
+import com.remy.common.module.UserDTO;
+import com.remy.graphql.evn.RestAPIEnv;
+import graphql.kickstart.tools.GraphQLQueryResolver;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.ParameterizedTypeReference;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpMethod;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.CompletableFuture;
+
+@Component
+public class EntitiesQuery implements GraphQLQueryResolver {
+
+    @Autowired
+    RestAPIEnv apiEnv;
+
+    public CompletableFuture<List<BaseDTO>> entities() {
+        return CompletableFuture.supplyAsync(() -> {
+            List<BaseDTO> dto = new ArrayList<>();
+            dto.addAll(new RestTemplate().exchange(
+                    apiEnv.getOrdersEndpoint(),
+                    HttpMethod.GET,
+                    new HttpEntity(null),
+                    new ParameterizedTypeReference<List<OrderDTO>>() {
+                    }).getBody());
+            dto.addAll(
+                    new RestTemplate().exchange(
+                            apiEnv.getGoodsEndpoint(),
+                            HttpMethod.GET,
+                            new HttpEntity(null),
+                            new ParameterizedTypeReference<List<GoodsDTO>>() {
+                            }).getBody());
+            dto.addAll(
+                    new RestTemplate().exchange(
+                            apiEnv.getUsersEndpoint(),
+                            HttpMethod.GET,
+                            new HttpEntity(null),
+                            new ParameterizedTypeReference<List<UserDTO>>() {
+                            }).getBody());
+            return dto;
+        });
+    }
+}

+ 12 - 1
graphql-api/src/main/resources/graphqls/query.graphqls

@@ -17,4 +17,15 @@ type Query{
     userList: [User]
     # 通过用户名称模糊查询用户信息
     userQuery(username: String!): User
-}
+
+    entities: [BaseDTO]!
+}
+
+union BaseDTO = User | Order | Goods
+
+
+#interface BaseDTO{
+#    id: ID!
+#    createTime: DateTime!
+#    updateTime: DateTime!
+#}

+ 2 - 1
graphql-api/src/main/resources/graphqls/scala.graphqls

@@ -1,3 +1,4 @@
 scalar BigDecimal
 scalar DateTime
-scalar Date
+scalar Date
+

+ 54 - 0
order-service/src/main/java/com/remy/order/controller/CommentsController.java

@@ -0,0 +1,54 @@
+package com.remy.order.controller;
+
+import com.remy.common.helper.BeanHelper;
+import com.remy.order.entity.Comment;
+import com.remy.order.entity.Order;
+import com.remy.order.service.CommentService;
+import com.remy.order.service.OrderService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@Slf4j
+@RequestMapping("comments")
+public class CommentsController {
+
+    @Autowired
+    CommentService commentService;
+
+    @Autowired
+    OrderService orderService;
+
+    @RequestMapping()
+    public List<Comment> findAll() {
+        return commentService.findAll();
+    }
+
+    @RequestMapping("{orderNo}")
+    public Comment findByOrderNo(@PathVariable("orderNo") String orderNo) {
+        return commentService.findCommentByOrderNo(orderNo);
+    }
+
+    @RequestMapping("query")
+    public List<Comment> findAllByCondition(@RequestParam Map<String, String> params) {
+        log.info("query comments by condition: {}", BeanHelper.toJSON(params));
+        Comment comment = BeanHelper.fromJSON(BeanHelper.toJSON(params), Comment.class);
+        return commentService.findByCondition(comment);
+    }
+
+    @PostMapping()
+    public Comment save(@RequestBody Comment comment) throws Exception {
+        Comment existComment = commentService.findCommentByOrderNo(comment.getOrderNo());
+        if (null != existComment) {
+            throw new Exception("已经评论过了");
+        }
+        Order order = orderService.findByOrderNo(comment.getOrderNo());
+        comment.setGoodsSerialNo(order.getGoodsSerialNo());
+        comment.setUserID(order.getUserID());
+        return commentService.save(comment);
+    }
+}

+ 1 - 1
order-service/src/main/java/com/remy/order/controller/OrderController.java

@@ -41,7 +41,7 @@ public class OrderController {
     }
 
     @PostMapping()
-    public Order save(@RequestBody Order order) {
+    public Order save(@RequestBody Order order) throws Exception {
         order.setOrderNo(RandomStringUtils.randomAlphanumeric(10));
         return orderService.save(order);
     }

+ 16 - 0
order-service/src/main/java/com/remy/order/dao/CommentDAO.java

@@ -0,0 +1,16 @@
+package com.remy.order.dao;
+
+import com.remy.order.entity.Comment;
+import com.remy.order.entity.Order;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.List;
+
+public interface CommentDAO extends JpaRepository<Comment, Long> {
+
+    List<Comment> findAllByGoodsSerialNo(String goodsSerialNo);
+
+    Comment findCommentByOrderNo(String orderNo);
+
+    List<Comment> findAllByUserID(Long userId);
+}

+ 30 - 0
order-service/src/main/java/com/remy/order/entity/Comment.java

@@ -0,0 +1,30 @@
+package com.remy.order.entity;
+
+import com.remy.base.entity.BaseEntity;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+@Entity
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@Table(name = "t_comment")
+public class Comment extends BaseEntity {
+
+    @Column(name = "order_no")
+    private String orderNo;
+
+    @Column(name = "userID")
+    private Long userID;
+
+    @Column(name = "goods_serial_no")
+    private String goodsSerialNo;
+
+    @Column(name = "content")
+    private String content;
+}

+ 17 - 0
order-service/src/main/java/com/remy/order/service/CommentService.java

@@ -0,0 +1,17 @@
+package com.remy.order.service;
+
+import com.remy.order.entity.Comment;
+import com.remy.order.entity.Order;
+
+import java.util.List;
+
+public interface CommentService {
+
+    Comment findCommentByOrderNo(String orderNo);
+
+    List<Comment> findAll();
+
+    List<Comment> findByCondition(Comment comment);
+
+    Comment save(Comment comment);
+}

+ 38 - 0
order-service/src/main/java/com/remy/order/service/impl/CommentServiceImpl.java

@@ -0,0 +1,38 @@
+package com.remy.order.service.impl;
+
+import com.remy.order.dao.CommentDAO;
+import com.remy.order.entity.Comment;
+import com.remy.order.service.CommentService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Example;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class CommentServiceImpl implements CommentService {
+
+    @Autowired
+    CommentDAO commentDAO;
+
+    @Override
+    public List<Comment> findAll() {
+        return commentDAO.findAll();
+    }
+
+    @Override
+    public Comment save(Comment comment) {
+        return commentDAO.save(comment);
+    }
+
+
+    @Override
+    public Comment findCommentByOrderNo(String orderNo) {
+        return commentDAO.findCommentByOrderNo(orderNo);
+    }
+
+    @Override
+    public List<Comment> findByCondition(Comment comment) {
+        return commentDAO.findAll(Example.of(comment));
+    }
+}

+ 4 - 4
order-service/src/main/resources/application.yml

@@ -7,11 +7,11 @@ spring:
     username: graphql
     password: graphql
   jpa:
-    generate-ddl: true
+#    generate-ddl: true
     show-sql: true
-    properties:
-      hibernate:
-        format_sql: true
+#    properties:
+#      hibernate:
+#        format_sql: true
 
 rest:
   api:

+ 4 - 4
user-service/src/main/resources/application.yml

@@ -8,7 +8,7 @@ spring:
     password: graphql
   jpa:
     generate-ddl: true
-    show-sql: true
-    properties:
-      hibernate:
-        format_sql: true
+#    show-sql: true
+#    properties:
+#      hibernate:
+#        format_sql: true

BIN
~$初识GraphQL.pptx


BIN
初识GraphQL.pptx