Bael 5303 graphqlvs rest (#11715)
* GraphQL and REST Comparison * Updating README * Reformatting code
This commit is contained in:
		
							parent
							
								
									c8231b7c60
								
							
						
					
					
						commit
						74b2b2e910
					
				| @ -51,6 +51,7 @@ | |||||||
|         <!-- <module>spring-boot-keycloak</module> --> <!-- Fixing under JAVA-8271 --> |         <!-- <module>spring-boot-keycloak</module> --> <!-- Fixing under JAVA-8271 --> | ||||||
|         <module>spring-boot-libraries</module> |         <module>spring-boot-libraries</module> | ||||||
|         <module>spring-boot-libraries-2</module> |         <module>spring-boot-libraries-2</module> | ||||||
|  |         <module>spring-boot-libraries-comparison</module> | ||||||
|         <module>spring-boot-logging-log4j2</module> |         <module>spring-boot-logging-log4j2</module> | ||||||
|         <module>spring-boot-multiple-datasources</module> |         <module>spring-boot-multiple-datasources</module> | ||||||
|         <module>spring-boot-mvc</module> |         <module>spring-boot-mvc</module> | ||||||
|  | |||||||
| @ -0,0 +1,7 @@ | |||||||
|  | ## Spring Boot Libraries | ||||||
|  | 
 | ||||||
|  | This module contains articles about various Spring Boot libraries Comparison | ||||||
|  | 
 | ||||||
|  | ### Relevant Articles: | ||||||
|  | 
 | ||||||
|  | - [GraphQL vs REST](https://www.baeldung.com/graphql-vs-rest/) | ||||||
							
								
								
									
										46
									
								
								spring-boot-modules/spring-boot-libraries-comparison/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								spring-boot-modules/spring-boot-libraries-comparison/pom.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,46 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <project xmlns="http://maven.apache.org/POM/4.0.0" | ||||||
|  |     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||||
|  |     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||||
|  |     <modelVersion>4.0.0</modelVersion> | ||||||
|  |     <artifactId>spring-boot-libraries-comparison</artifactId> | ||||||
|  | 
 | ||||||
|  |     <parent> | ||||||
|  |         <groupId>com.baeldung.spring-boot-modules</groupId> | ||||||
|  |         <artifactId>spring-boot-modules</artifactId> | ||||||
|  |         <version>1.0.0-SNAPSHOT</version> | ||||||
|  |     </parent> | ||||||
|  | 
 | ||||||
|  |     <dependencies> | ||||||
|  |         <dependency> | ||||||
|  |             <groupId>org.springframework.boot</groupId> | ||||||
|  |             <artifactId>spring-boot-starter-web</artifactId> | ||||||
|  |         </dependency> | ||||||
|  |         <dependency> | ||||||
|  |             <groupId>org.springframework.data</groupId> | ||||||
|  |             <artifactId>spring-data-jpa</artifactId> | ||||||
|  |         </dependency> | ||||||
|  |         <dependency> | ||||||
|  |             <groupId>com.graphql-java</groupId> | ||||||
|  |             <artifactId>graphql-spring-boot-starter</artifactId> | ||||||
|  |             <version>${graphql-spring-boot-starter.version}</version> | ||||||
|  |         </dependency> | ||||||
|  |         <dependency> | ||||||
|  |             <groupId>com.graphql-java</groupId> | ||||||
|  |             <artifactId>graphql-java-tools</artifactId> | ||||||
|  |             <version>${graphql-java-tools.version}</version> | ||||||
|  |         </dependency> | ||||||
|  |         <dependency> | ||||||
|  |             <groupId>com.graphql-java</groupId> | ||||||
|  |             <artifactId>graphiql-spring-boot-starter</artifactId> | ||||||
|  |             <version>${graphql-spring-boot-starter.version}</version> | ||||||
|  |         </dependency> | ||||||
|  |     </dependencies> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     <properties> | ||||||
|  |         <graphql-spring-boot-starter.version>5.0.2</graphql-spring-boot-starter.version> | ||||||
|  |         <graphql-java-tools.version>5.2.4</graphql-java-tools.version> | ||||||
|  |     </properties> | ||||||
|  | 
 | ||||||
|  | </project> | ||||||
| @ -0,0 +1,19 @@ | |||||||
|  | package com.baeldung.graphqlvsrest; | ||||||
|  | 
 | ||||||
|  | import com.baeldung.graphqlvsrest.configuration.GraphqlConfiguration; | ||||||
|  | import org.springframework.boot.SpringApplication; | ||||||
|  | import org.springframework.boot.autoconfigure.EnableAutoConfiguration; | ||||||
|  | import org.springframework.boot.autoconfigure.SpringBootApplication; | ||||||
|  | import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; | ||||||
|  | import org.springframework.context.annotation.Import; | ||||||
|  | 
 | ||||||
|  | @SpringBootApplication | ||||||
|  | @Import(GraphqlConfiguration.class) | ||||||
|  | @EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class}) | ||||||
|  | public class GraphqlVsRestApplication { | ||||||
|  | 
 | ||||||
|  |     public static void main(String[] args) { | ||||||
|  |         SpringApplication.run(GraphqlVsRestApplication.class, args); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,35 @@ | |||||||
|  | package com.baeldung.graphqlvsrest.configuration; | ||||||
|  | 
 | ||||||
|  | import com.baeldung.graphqlvsrest.repository.OrderRepository; | ||||||
|  | import com.baeldung.graphqlvsrest.resolver.Mutation; | ||||||
|  | import com.baeldung.graphqlvsrest.resolver.ProductResolver; | ||||||
|  | import com.baeldung.graphqlvsrest.resolver.Query; | ||||||
|  | import com.baeldung.graphqlvsrest.repository.ProductRepository; | ||||||
|  | import org.springframework.beans.factory.annotation.Autowired; | ||||||
|  | import org.springframework.context.annotation.Bean; | ||||||
|  | import org.springframework.context.annotation.Configuration; | ||||||
|  | 
 | ||||||
|  | @Configuration | ||||||
|  | public class GraphqlConfiguration { | ||||||
|  | 
 | ||||||
|  |     @Autowired | ||||||
|  |     ProductRepository productRepository; | ||||||
|  | 
 | ||||||
|  |     @Autowired | ||||||
|  |     OrderRepository orderRepository; | ||||||
|  | 
 | ||||||
|  |     @Bean | ||||||
|  |     public Query query() { | ||||||
|  |         return new Query(productRepository); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Bean | ||||||
|  |     public ProductResolver productResolver(){ | ||||||
|  |         return new ProductResolver(orderRepository); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Bean | ||||||
|  |     public Mutation mutation() { | ||||||
|  |         return new Mutation(productRepository); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,25 @@ | |||||||
|  | package com.baeldung.graphqlvsrest.controller; | ||||||
|  | 
 | ||||||
|  | import com.baeldung.graphqlvsrest.entity.Order; | ||||||
|  | import com.baeldung.graphqlvsrest.entity.Product; | ||||||
|  | import com.baeldung.graphqlvsrest.model.ProductModel; | ||||||
|  | import com.baeldung.graphqlvsrest.repository.OrderRepository; | ||||||
|  | import com.baeldung.graphqlvsrest.repository.ProductRepository; | ||||||
|  | import org.springframework.beans.factory.annotation.Autowired; | ||||||
|  | import org.springframework.data.domain.Pageable; | ||||||
|  | import org.springframework.web.bind.annotation.*; | ||||||
|  | 
 | ||||||
|  | import java.util.List; | ||||||
|  | 
 | ||||||
|  | @RestController | ||||||
|  | @RequestMapping("order") | ||||||
|  | public class OrderController { | ||||||
|  | 
 | ||||||
|  |     @Autowired | ||||||
|  |     OrderRepository orderRepository; | ||||||
|  | 
 | ||||||
|  |     @GetMapping() | ||||||
|  |     public List<Order> getOrders(@RequestParam("product-id") Integer productId){ | ||||||
|  |         return orderRepository.getOrdersByProduct(productId); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,38 @@ | |||||||
|  | package com.baeldung.graphqlvsrest.controller; | ||||||
|  | 
 | ||||||
|  | import com.baeldung.graphqlvsrest.entity.Product; | ||||||
|  | import com.baeldung.graphqlvsrest.model.ProductModel; | ||||||
|  | import com.baeldung.graphqlvsrest.repository.ProductRepository; | ||||||
|  | import org.springframework.beans.factory.annotation.Autowired; | ||||||
|  | import org.springframework.data.domain.Pageable; | ||||||
|  | import org.springframework.web.bind.annotation.*; | ||||||
|  | 
 | ||||||
|  | import java.util.List; | ||||||
|  | 
 | ||||||
|  | @RestController | ||||||
|  | @RequestMapping("product") | ||||||
|  | public class ProductController { | ||||||
|  | 
 | ||||||
|  |     @Autowired | ||||||
|  |     ProductRepository productRepository; | ||||||
|  | 
 | ||||||
|  |     @GetMapping | ||||||
|  |     public List<Product> getProducts(Pageable pageable){ | ||||||
|  |         return productRepository.getProducts(pageable.getPageSize(), pageable.getPageNumber()); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @GetMapping("/{product-id}") | ||||||
|  |     public Product getProducts(@PathVariable("product-id") Integer productId){ | ||||||
|  |         return productRepository.getProduct(productId); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @PostMapping | ||||||
|  |     public Product save(@RequestBody ProductModel productModel){ | ||||||
|  |         return productRepository.save(productModel); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @PutMapping("/{product-id}") | ||||||
|  |     public Product update(@PathVariable("product-id") Integer productId, @RequestBody ProductModel productModel){ | ||||||
|  |         return productRepository.update(productId, productModel); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,58 @@ | |||||||
|  | package com.baeldung.graphqlvsrest.entity; | ||||||
|  | 
 | ||||||
|  | public class Order { | ||||||
|  |     private Integer id; | ||||||
|  |     private Integer product_id; | ||||||
|  |     private String customer_uuid; | ||||||
|  |     private String status; | ||||||
|  |     private String address; | ||||||
|  |     private String creation_date; | ||||||
|  | 
 | ||||||
|  |     public Integer getId() { | ||||||
|  |         return id; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setId(Integer id) { | ||||||
|  |         this.id = id; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Integer getProduct_id() { | ||||||
|  |         return product_id; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setProduct_id(Integer product_id) { | ||||||
|  |         this.product_id = product_id; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getStatus() { | ||||||
|  |         return status; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setStatus(String status) { | ||||||
|  |         this.status = status; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getCustomer_uuid() { | ||||||
|  |         return customer_uuid; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setCustomer_uuid(String customer_uuid) { | ||||||
|  |         this.customer_uuid = customer_uuid; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getAddress() { | ||||||
|  |         return address; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setAddress(String address) { | ||||||
|  |         this.address = address; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getCreation_date() { | ||||||
|  |         return creation_date; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setCreation_date(String creation_date) { | ||||||
|  |         this.creation_date = creation_date; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,115 @@ | |||||||
|  | package com.baeldung.graphqlvsrest.entity; | ||||||
|  | 
 | ||||||
|  | import com.baeldung.graphqlvsrest.model.ProductModel; | ||||||
|  | 
 | ||||||
|  | import java.util.List; | ||||||
|  | 
 | ||||||
|  | public class Product { | ||||||
|  |     private Integer id; | ||||||
|  |     private String name; | ||||||
|  |     private String description; | ||||||
|  |     private String status; | ||||||
|  |     private String currency; | ||||||
|  |     private Double price; | ||||||
|  |     private List<String> image_url; | ||||||
|  |     private List<String> video_url; | ||||||
|  |     private Integer stock; | ||||||
|  |     private Float average_rating; | ||||||
|  | 
 | ||||||
|  |     public Product(Integer id, ProductModel productModel) { | ||||||
|  |         this.id = id; | ||||||
|  |         this.name = productModel.getName(); | ||||||
|  |         this.description = productModel.getDescription(); | ||||||
|  |         this.currency = productModel.getCurrency(); | ||||||
|  |         this.price = productModel.getPrice(); | ||||||
|  |         this.stock = productModel.getStock(); | ||||||
|  |         this.image_url = productModel.getImage_url(); | ||||||
|  |         this.video_url = productModel.getVideo_url(); | ||||||
|  |         this.average_rating = 0F; | ||||||
|  |         this.status = productModel.getStatus(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Product(){ | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Integer getId() { | ||||||
|  |         return id; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setId(Integer id) { | ||||||
|  |         this.id = id; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getName() { | ||||||
|  |         return name; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setName(String name) { | ||||||
|  |         this.name = name; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getDescription() { | ||||||
|  |         return description; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setDescription(String description) { | ||||||
|  |         this.description = description; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getStatus() { | ||||||
|  |         return status; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setStatus(String status) { | ||||||
|  |         this.status = status; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getCurrency() { | ||||||
|  |         return currency; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setCurrency(String currency) { | ||||||
|  |         this.currency = currency; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Double getPrice() { | ||||||
|  |         return price; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setPrice(Double price) { | ||||||
|  |         this.price = price; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public List<String> getImage_url() { | ||||||
|  |         return image_url; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setImage_url(List<String> image_url) { | ||||||
|  |         this.image_url = image_url; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public List<String> getVideo_url() { | ||||||
|  |         return video_url; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setVideo_url(List<String> video_url) { | ||||||
|  |         this.video_url = video_url; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Integer getStock() { | ||||||
|  |         return stock; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setStock(Integer stock) { | ||||||
|  |         this.stock = stock; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Float getAverage_rating() { | ||||||
|  |         return average_rating; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setAverage_rating(Float average_rating) { | ||||||
|  |         this.average_rating = average_rating; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,92 @@ | |||||||
|  | package com.baeldung.graphqlvsrest.model; | ||||||
|  | 
 | ||||||
|  | import java.util.List; | ||||||
|  | 
 | ||||||
|  | public class ProductModel { | ||||||
|  |     private String name; | ||||||
|  |     private String description; | ||||||
|  |     private String status; | ||||||
|  |     private String currency; | ||||||
|  |     private Double price; | ||||||
|  |     private List<String> image_url; | ||||||
|  |     private List<String> video_url; | ||||||
|  |     private Integer stock; | ||||||
|  | 
 | ||||||
|  |     public String getName() { | ||||||
|  |         return name; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setName(String name) { | ||||||
|  |         this.name = name; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getDescription() { | ||||||
|  |         return description; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setDescription(String description) { | ||||||
|  |         this.description = description; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getStatus() { | ||||||
|  |         return status; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setStatus(String status) { | ||||||
|  |         this.status = status; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getCurrency() { | ||||||
|  |         return currency; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setCurrency(String currency) { | ||||||
|  |         this.currency = currency; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Double getPrice() { | ||||||
|  |         return price; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setPrice(Double price) { | ||||||
|  |         this.price = price; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public List<String> getImage_url() { | ||||||
|  |         return image_url; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setImage_url(List<String> image_url) { | ||||||
|  |         this.image_url = image_url; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public List<String> getVideo_url() { | ||||||
|  |         return video_url; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setVideo_url(List<String> video_url) { | ||||||
|  |         this.video_url = video_url; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Integer getStock() { | ||||||
|  |         return stock; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setStock(Integer stock) { | ||||||
|  |         this.stock = stock; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public String toString() { | ||||||
|  |         return "ProductModel{" + | ||||||
|  |                 "name='" + name + '\'' + | ||||||
|  |                 ", description='" + description + '\'' + | ||||||
|  |                 ", status='" + status + '\'' + | ||||||
|  |                 ", currency='" + currency + '\'' + | ||||||
|  |                 ", price=" + price + | ||||||
|  |                 ", image_url=" + image_url + | ||||||
|  |                 ", video_url=" + video_url + | ||||||
|  |                 ", stock=" + stock + | ||||||
|  |                 '}'; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,11 @@ | |||||||
|  | package com.baeldung.graphqlvsrest.repository; | ||||||
|  | 
 | ||||||
|  | import com.baeldung.graphqlvsrest.entity.Order; | ||||||
|  | import com.baeldung.graphqlvsrest.entity.Product; | ||||||
|  | import com.baeldung.graphqlvsrest.model.ProductModel; | ||||||
|  | 
 | ||||||
|  | import java.util.List; | ||||||
|  | 
 | ||||||
|  | public interface OrderRepository { | ||||||
|  |     List<Order> getOrdersByProduct(Integer productId); | ||||||
|  | } | ||||||
| @ -0,0 +1,14 @@ | |||||||
|  | package com.baeldung.graphqlvsrest.repository; | ||||||
|  | 
 | ||||||
|  | import com.baeldung.graphqlvsrest.entity.Product; | ||||||
|  | import com.baeldung.graphqlvsrest.model.ProductModel; | ||||||
|  | 
 | ||||||
|  | import java.util.List; | ||||||
|  | 
 | ||||||
|  | public interface ProductRepository { | ||||||
|  |     List<Product> getProducts(Integer pageSize, Integer pageNumber); | ||||||
|  |     Product getProduct(Integer id); | ||||||
|  |     Product save(ProductModel productModel); | ||||||
|  |     Product update(Integer productId, ProductModel productModel); | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,36 @@ | |||||||
|  | package com.baeldung.graphqlvsrest.repository.impl; | ||||||
|  | 
 | ||||||
|  | import com.baeldung.graphqlvsrest.entity.Order; | ||||||
|  | import com.baeldung.graphqlvsrest.repository.OrderRepository; | ||||||
|  | import org.springframework.stereotype.Repository; | ||||||
|  | 
 | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.Date; | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.UUID; | ||||||
|  | import java.util.stream.Collectors; | ||||||
|  | 
 | ||||||
|  | @Repository | ||||||
|  | public class OrderRepositoryImpl implements OrderRepository { | ||||||
|  | 
 | ||||||
|  |     private static List<Order> orderList = new ArrayList<>(); | ||||||
|  | 
 | ||||||
|  |     public OrderRepositoryImpl() { | ||||||
|  |         for (int i = 1; i <= 100; i++){ | ||||||
|  |             Order order = new Order(); | ||||||
|  |             order.setId(i); | ||||||
|  |             order.setProduct_id(i%10); | ||||||
|  |             order.setAddress(UUID.randomUUID().toString()); | ||||||
|  |             order.setCustomer_uuid(UUID.randomUUID().toString()); | ||||||
|  |             order.setCreation_date(new Date(System.currentTimeMillis()).toString()); | ||||||
|  |             order.setStatus("Delivered"); | ||||||
|  |             orderList.add(order); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public List<Order> getOrdersByProduct(Integer productId) { | ||||||
|  |         return orderList.stream().filter(order -> order.getProduct_id().equals(productId)).collect(Collectors.toList()); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,74 @@ | |||||||
|  | package com.baeldung.graphqlvsrest.repository.impl; | ||||||
|  | 
 | ||||||
|  | import com.baeldung.graphqlvsrest.entity.Product; | ||||||
|  | import com.baeldung.graphqlvsrest.model.ProductModel; | ||||||
|  | import com.baeldung.graphqlvsrest.repository.ProductRepository; | ||||||
|  | import org.springframework.stereotype.Repository; | ||||||
|  | 
 | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.Arrays; | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.Optional; | ||||||
|  | import java.util.stream.Collectors; | ||||||
|  | 
 | ||||||
|  | @Repository | ||||||
|  | public class ProductRepositoryImpl implements ProductRepository { | ||||||
|  | 
 | ||||||
|  |     private static List<Product> productList = new ArrayList<>(); | ||||||
|  | 
 | ||||||
|  |     public ProductRepositoryImpl() { | ||||||
|  |         for (int i = 1; i <= 10; i++){ | ||||||
|  |             Product product = new Product(); | ||||||
|  |             product.setId(i); | ||||||
|  |             product.setName(String.format("Product %d", i)); | ||||||
|  |             product.setDescription(String.format("Product %d description", i)); | ||||||
|  |             product.setCurrency(String.format("Product %d currency", i)); | ||||||
|  |             product.setPrice(Double.valueOf(i^2)); | ||||||
|  |             product.setStock(10); | ||||||
|  |             product.setAverage_rating(0F); | ||||||
|  |             product.setImage_url(Arrays.asList(String.format("www.baeldung.com/imageurl/%d", i))); | ||||||
|  |             product.setVideo_url(Arrays.asList(String.format("www.baeldung.com/videourl/%d", i))); | ||||||
|  |             productList.add(product); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public List<Product> getProducts(Integer pageSize, Integer pageNumber) { | ||||||
|  |         return productList.stream().skip(pageSize*pageNumber).limit(pageSize).collect(Collectors.toList()); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public Product getProduct(Integer id) { | ||||||
|  |         return productList.stream().filter(product -> product.getId().equals(id)).findFirst().orElse(null); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public Product save(ProductModel productModel) { | ||||||
|  |         Product product = new Product(productList.size()+1, productModel); | ||||||
|  |         productList.add(product); | ||||||
|  |         return product; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public Product update(Integer productId, ProductModel productModel) { | ||||||
|  |         Product product =  getProduct(productId); | ||||||
|  |         if (product != null){ | ||||||
|  |             update(product, productModel); | ||||||
|  |         } | ||||||
|  |         return product; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private void update(Product product, ProductModel productModel){ | ||||||
|  |         if (productModel != null) { | ||||||
|  |             System.out.println(productModel.toString()); | ||||||
|  |             Optional.ofNullable(productModel.getName()).ifPresent(product::setName); | ||||||
|  |             Optional.ofNullable(productModel.getDescription()).ifPresent(product::setDescription); | ||||||
|  |             Optional.ofNullable(productModel.getCurrency()).ifPresent(product::setCurrency); | ||||||
|  |             Optional.ofNullable(productModel.getImage_url()).ifPresent(product::setImage_url); | ||||||
|  |             Optional.ofNullable(productModel.getStock()).ifPresent(product::setStock); | ||||||
|  |             Optional.ofNullable(productModel.getStatus()).ifPresent(product::setStatus); | ||||||
|  |             Optional.ofNullable(productModel.getVideo_url()).ifPresent(product::setVideo_url); | ||||||
|  |             Optional.ofNullable(productModel.getPrice()).ifPresent(product::setPrice); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,22 @@ | |||||||
|  | package com.baeldung.graphqlvsrest.resolver; | ||||||
|  | 
 | ||||||
|  | import com.baeldung.graphqlvsrest.entity.Product; | ||||||
|  | import com.baeldung.graphqlvsrest.model.ProductModel; | ||||||
|  | import com.baeldung.graphqlvsrest.repository.ProductRepository; | ||||||
|  | import com.coxautodev.graphql.tools.GraphQLMutationResolver; | ||||||
|  | 
 | ||||||
|  | public class Mutation implements GraphQLMutationResolver { | ||||||
|  | 
 | ||||||
|  |     private ProductRepository productRepository; | ||||||
|  |     public Mutation(ProductRepository productRepository){ | ||||||
|  |         this.productRepository = productRepository; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Product saveProduct(ProductModel productModel) { | ||||||
|  |         return productRepository.save(productModel); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Product updateProduct(Integer productId, ProductModel productModel) { | ||||||
|  |         return productRepository.update(productId, productModel); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,18 @@ | |||||||
|  | package com.baeldung.graphqlvsrest.resolver; | ||||||
|  | 
 | ||||||
|  | import com.baeldung.graphqlvsrest.entity.Order; | ||||||
|  | import com.baeldung.graphqlvsrest.entity.Product; | ||||||
|  | import com.baeldung.graphqlvsrest.repository.OrderRepository; | ||||||
|  | import com.coxautodev.graphql.tools.GraphQLResolver; | ||||||
|  | 
 | ||||||
|  | import java.util.List; | ||||||
|  | 
 | ||||||
|  | public class ProductResolver implements GraphQLResolver<Product> { | ||||||
|  |     private OrderRepository orderRepository; | ||||||
|  |     public ProductResolver(OrderRepository orderRepository){ | ||||||
|  |         this.orderRepository = orderRepository; | ||||||
|  |     } | ||||||
|  |     public List<Order> getOrders(Product product){ | ||||||
|  |         return orderRepository.getOrdersByProduct(product.getId()); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,27 @@ | |||||||
|  | package com.baeldung.graphqlvsrest.resolver; | ||||||
|  | 
 | ||||||
|  | import com.baeldung.graphqlvsrest.entity.Order; | ||||||
|  | import com.baeldung.graphqlvsrest.entity.Product; | ||||||
|  | import com.baeldung.graphqlvsrest.repository.OrderRepository; | ||||||
|  | import com.baeldung.graphqlvsrest.repository.ProductRepository; | ||||||
|  | import com.coxautodev.graphql.tools.GraphQLQueryResolver; | ||||||
|  | 
 | ||||||
|  | import java.util.List; | ||||||
|  | 
 | ||||||
|  | public class Query implements GraphQLQueryResolver { | ||||||
|  | 
 | ||||||
|  |     private ProductRepository productRepository; | ||||||
|  |     public Query(ProductRepository productRepository){ | ||||||
|  |         this.productRepository = productRepository; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public List<Product> getProducts(int pageSize, int pageNumber) { | ||||||
|  |         return productRepository.getProducts(pageSize, pageNumber); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Product getProduct(int id) { | ||||||
|  |         return productRepository.getProduct(id); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,57 @@ | |||||||
|  | type Product { | ||||||
|  |     id: ID | ||||||
|  |     name: String! | ||||||
|  |     description: String | ||||||
|  |     status: String | ||||||
|  |     currency: String! | ||||||
|  |     price: Float | ||||||
|  |     image_url: [String] | ||||||
|  |     video_url: [String] | ||||||
|  |     stock: Int | ||||||
|  |     average_rating: Float | ||||||
|  |     orders:[Order] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type Order{ | ||||||
|  |     id:ID | ||||||
|  |     product_id:Int | ||||||
|  |     customer_uuid:String | ||||||
|  |     address:String | ||||||
|  |     status:String | ||||||
|  |     creation_date:String | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | input ProductModel { | ||||||
|  |     name: String! | ||||||
|  |     description: String | ||||||
|  |     status: String | ||||||
|  |     currency: String! | ||||||
|  |     price: Float | ||||||
|  |     image_url: [String] | ||||||
|  |     video_url: [String] | ||||||
|  |     stock: Int | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | input ProductUpdateModel { | ||||||
|  |     name: String | ||||||
|  |     description: String | ||||||
|  |     status: String | ||||||
|  |     currency: String | ||||||
|  |     price: Float | ||||||
|  |     image_url: [String] | ||||||
|  |     video_url: [String] | ||||||
|  |     stock: Int | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # The Root Query for the application | ||||||
|  | type Query { | ||||||
|  |     products(size: Int, page: Int): [Product]! | ||||||
|  |     product(id: Int): Product! | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # The Root Mutation for the application | ||||||
|  | type Mutation { | ||||||
|  |     saveProduct(product: ProductModel) : Product! | ||||||
|  |     updateProduct(id: Int, product: ProductUpdateModel) : Product! | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user