jsonsent through controller

parent add30782
...@@ -52,6 +52,16 @@ ...@@ -52,6 +52,16 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId> <artifactId>spring-boot-starter-validation</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.4.2.Final</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.4.2.Final</version>
</dependency>
</dependencies> </dependencies>
<dependencyManagement> <dependencyManagement>
<dependencies> <dependencies>
......
package com.qadeer.customer.controller; package com.qadeer.customer.controller;
import com.qadeer.customer.dto.CustomerDto;
import com.qadeer.customer.dto.ProductDto; import com.qadeer.customer.dto.ProductDto;
import com.qadeer.customer.dto.CustomerRequest;
import com.qadeer.customer.model.Customer; import com.qadeer.customer.model.Customer;
import com.qadeer.customer.service.CustomerService; import com.qadeer.customer.service.CustomerService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List; import java.util.List;
@RestController @RestController
...@@ -25,10 +27,24 @@ public class CustomerController { ...@@ -25,10 +27,24 @@ public class CustomerController {
@GetMapping("/buy/{productName}/{quantity}") @GetMapping("/buy/{productName}/{quantity}")
public ResponseEntity<List<ProductDto>> buy(@PathVariable("productName") String productName, @PathVariable("quantity") int productQuantity) { public ResponseEntity<List<ProductDto>> buy(@PathVariable("productName") String productName, @PathVariable("quantity") int productQuantity) {
List<ProductDto> productDtoList = service.buyProducts(productName, String.valueOf(productQuantity)); List<ProductDto> productDtoList = service.buyProductByName(productName, String.valueOf(productQuantity));
return new ResponseEntity<List<ProductDto>>(productDtoList, HttpStatus.OK); return new ResponseEntity<List<ProductDto>>(productDtoList, HttpStatus.OK);
} }
// current
@PostMapping("product/buy/json")
public ResponseEntity<?> buyJson(@RequestBody @Valid CustomerRequest customerRequest) {
List<ProductDto> products = customerRequest.getItems();
CustomerDto customerDto = customerRequest.getCustomerDto();
System.out.println(customerDto.toString());
// for(ProductDto p : products) {
// System.out.println(p.getName() + " " + p.getQuantity());
// }
List<ProductDto> availableProducts = service.buyProducts(customerRequest);
return new ResponseEntity<>(availableProducts, HttpStatus.OK);
}
@GetMapping("/product/{id}") @GetMapping("/product/{id}")
public ResponseEntity<?> getProductById(@PathVariable int id) { public ResponseEntity<?> getProductById(@PathVariable int id) {
ProductDto productDto = service.getProductById(id); ProductDto productDto = service.getProductById(id);
......
package com.qadeer.customer.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Positive;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CustomerDto {
@Positive
private int id;
private String name;
@Pattern(regexp = "^((\\(\\d{3}\\))|\\d{3})[- .]?\\d{3}[- .]?\\d{4}$")
private String phoneNo;
private String creditCardNo;
}
package com.qadeer.customer.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.validation.annotation.Validated;
import java.util.List;
@Validated
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CustomerRequest {
private CustomerDto customerDto;
private List<ProductDto> items;
}
package com.qadeer.customer.feign; package com.qadeer.customer.feign;
import com.qadeer.customer.dto.CustomerRequest;
import com.qadeer.customer.dto.ProductDto; import com.qadeer.customer.dto.ProductDto;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.ResponseEntity; import org.springframework.http.HttpHeaders;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.*;
import java.util.List; import java.util.List;
...@@ -14,6 +16,8 @@ public interface FeignService { ...@@ -14,6 +16,8 @@ public interface FeignService {
ProductDto getProductById(@PathVariable int id); ProductDto getProductById(@PathVariable int id);
@GetMapping("/product/{productName}/{productQuantity}") @GetMapping("/product/{productName}/{productQuantity}")
ResponseEntity<List<ProductDto>> buyProducts(@PathVariable("productName") String productName, @PathVariable("productQuantity") String productQuantity); List<ProductDto> buyProductByName(@PathVariable("productName") String productName, @PathVariable("productQuantity") String productQuantity);
@PostMapping(path = "/product/buy/json")
List<ProductDto> buyProducts(@RequestBody CustomerRequest customerRequest);
} }
package com.qadeer.customer.mapper;
import com.qadeer.customer.dto.CustomerDto;
import com.qadeer.customer.model.Customer;
import org.mapstruct.Mapper;
@Mapper(componentModel = "spring")
public interface CustomerMapper {
CustomerDto entityToDto(Customer customer);
}
package com.qadeer.customer.service; package com.qadeer.customer.service;
import com.qadeer.customer.dto.CustomerRequest;
import com.qadeer.customer.dto.ProductDto; import com.qadeer.customer.dto.ProductDto;
import com.qadeer.customer.feign.FeignService; import com.qadeer.customer.feign.FeignService;
import com.qadeer.customer.repository.CustomerRepository; import com.qadeer.customer.repository.CustomerRepository;
...@@ -19,9 +20,14 @@ public class CustomerService { ...@@ -19,9 +20,14 @@ public class CustomerService {
@Autowired @Autowired
private FeignService feignService; private FeignService feignService;
public List<ProductDto> buyProducts(String productName, String productQuantity) { public List<ProductDto> buyProductByName(String productName, String productQuantity) {
ResponseEntity<List<ProductDto>> productDto = feignService.buyProducts(productName, productQuantity); List<ProductDto> productDto = feignService.buyProductByName(productName, productQuantity);
return productDto.getBody(); return productDto;
}
public List<ProductDto> buyProducts(CustomerRequest customerRequest) {
List<ProductDto> products = feignService.buyProducts(customerRequest);
return products;
} }
public ProductDto getProductById(int id) { public ProductDto getProductById(int id) {
......
package com.qadeer.inventory.controller; package com.qadeer.inventory.controller;
import com.qadeer.inventory.dto.CustomerDto;
import com.qadeer.inventory.dto.CustomerRequest;
import com.qadeer.inventory.model.Product; import com.qadeer.inventory.model.Product;
import com.qadeer.inventory.service.ProductService; import com.qadeer.inventory.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -9,7 +11,10 @@ import org.springframework.web.bind.annotation.*; ...@@ -9,7 +11,10 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
@RestController @RestController
@RequestMapping("/inventory") @RequestMapping("/inventory")
...@@ -36,9 +41,14 @@ public class InventoryController { ...@@ -36,9 +41,14 @@ public class InventoryController {
} }
@GetMapping("/product/{productName}/{productQuantity}") @GetMapping("/product/{productName}/{productQuantity}")
public ResponseEntity<?> buyProducts(@PathVariable("productName") String productName, @PathVariable("productQuantity") int productQuantity) { public ResponseEntity<?> buyProductByName(@PathVariable("productName") String productName, @PathVariable("productQuantity") int productQuantity) {
List<Product> productList = service.buyProducts(productName, productQuantity); Product product = service.buyProductByName(productName, productQuantity);
return new ResponseEntity<List<Product>>(productList, HttpStatus.OK); return new ResponseEntity<>(product, HttpStatus.OK);
} }
@PostMapping("/product/buy/json")
public ResponseEntity<?> buyProducts(@RequestBody CustomerRequest customerRequest) {
List<Product> requestedProducts = service.buyProducts(customerRequest);
return new ResponseEntity<>(requestedProducts, HttpStatus.OK);
}
} }
package com.qadeer.inventory.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CustomerDto {
private int id;
private String name;
private String phoneNo;
private String creditCardNo;
}
package com.qadeer.inventory.dto;
import com.qadeer.inventory.model.Product;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CustomerRequest {
private List<Product> items;
private CustomerDto customerDto;
}
...@@ -15,7 +15,7 @@ import javax.persistence.Id; ...@@ -15,7 +15,7 @@ import javax.persistence.Id;
@NoArgsConstructor @NoArgsConstructor
public class Product { public class Product {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.AUTO)
private int id; private int id;
private String name; private String name;
private int price; private int price;
......
...@@ -8,5 +8,5 @@ import java.util.List; ...@@ -8,5 +8,5 @@ import java.util.List;
@Repository @Repository
public interface ProductRepository extends JpaRepository<Product, Integer> { public interface ProductRepository extends JpaRepository<Product, Integer> {
List<Product> findByName(String productName); Product findByName(String productName);
} }
package com.qadeer.inventory.service; package com.qadeer.inventory.service;
import com.qadeer.inventory.dto.CustomerRequest;
import com.qadeer.inventory.model.Product; import com.qadeer.inventory.model.Product;
import com.qadeer.inventory.repository.ProductRepository; import com.qadeer.inventory.repository.ProductRepository;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -10,9 +11,7 @@ import java.io.BufferedReader; ...@@ -10,9 +11,7 @@ import java.io.BufferedReader;
import java.io.IOException; import java.io.IOException;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
@Service @Service
public class ProductService { public class ProductService {
...@@ -51,42 +50,42 @@ public class ProductService { ...@@ -51,42 +50,42 @@ public class ProductService {
return productList; return productList;
} }
public List<Product> buyProducts(String productName, int requiredQuant) { public Product buyProductByName(String productName, int requiredQuantity) {
List<Product> productList = repository.findByName(productName); Product product = repository.findByName(productName);
List<Product> myProducts = new ArrayList<>(); int restockQuantity = 0;
int requiredProducts = 0; Product productRequested = new Product();
for(Product product: productList) { if (product.getQuantity() >= requiredQuantity) {
if (product.getQuantity() >= requiredQuant) {
// create copy of product object. // create copy of product object.
Product deliverProduct = new Product(); productRequested.setId(product.getId());
deliverProduct.setId(product.getId()); productRequested.setName(product.getName());
deliverProduct.setName(product.getName()); productRequested.setPrice(product.getPrice());
deliverProduct.setPrice(product.getPrice()); productRequested.setQuantity(requiredQuantity);
deliverProduct.setQuantity(requiredQuant); product.setQuantity(product.getQuantity() - requiredQuantity);
myProducts.add(deliverProduct);
product.setQuantity(product.getQuantity() - requiredQuant);
repository.save(product); repository.save(product);
} }
else if (product.getQuantity() > 0 && product.getQuantity() < requiredQuant){ else if (product.getQuantity() > 0 && product.getQuantity() < requiredQuantity){
requiredProducts = requiredQuant - product.getQuantity(); restockQuantity = requiredQuantity - product.getQuantity();
// create copy of product object. // create copy of product object.
Product deliverProduct = new Product(); productRequested.setId(product.getId());
deliverProduct.setId(product.getId()); productRequested.setName(product.getName());
deliverProduct.setName(product.getName()); productRequested.setPrice(product.getPrice());
deliverProduct.setPrice(product.getPrice()); productRequested.setQuantity(product.getQuantity());
deliverProduct.setQuantity(product.getQuantity());
System.out.println(requiredProducts);
myProducts.add(deliverProduct);
product.setQuantity(0); product.setQuantity(0);
repository.save(product); repository.save(product);
} }
else {
myProducts.add(null); return productRequested;
} }
public List<Product> buyProducts(CustomerRequest customerRequest) {
List<Product> productDtoList = customerRequest.getItems();
System.out.println(customerRequest);
List<Product> requestedProducts = new ArrayList<>();
for (Product p : productDtoList) {
Product product = buyProductByName(p.getName(), p.getQuantity());
requestedProducts.add(product);
} }
return myProducts; return requestedProducts;
} }
Map<String, ProductDto> productMap = new HashMap<>();
List<ProductDto> productDtoList = (List<ProductDto>) productMap.values();
repository.saveAll(productDtoList);
} }
id=11, name='Cheese', price=120, quantity=0 28/Jul/2022 20:20:30
id=12, name='Cream', price=250, quantity=5 28/Jul/2022 20:20:31
id=13, name='Shortbread', price=200, quantity=0 28/Jul/2022 20:20:33
id=14, name='Sprite', price=230, quantity=5 28/Jul/2022 20:20:34
id=15, name='Vinegar', price=400, quantity=3 28/Jul/2022 20:20:34
package com.qadeer.seller.constant;
public class Constant {
public static final String FILE_PATH = "/Users/aqadeer/Desktop/java-training-project-final/seller-service/orders.csv";
}
package com.qadeer.seller.controller; package com.qadeer.seller.controller;
import com.qadeer.seller.dto.CustomerRequest;
import com.qadeer.seller.dto.ProductDto; import com.qadeer.seller.dto.ProductDto;
import com.qadeer.seller.feign.FeignService;
import com.qadeer.seller.model.Seller; import com.qadeer.seller.model.Seller;
import com.qadeer.seller.service.SellerService; import com.qadeer.seller.service.SellerService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController @RestController
@RequestMapping("/seller") @RequestMapping("/seller")
public class SellerController { public class SellerController {
...@@ -33,7 +39,12 @@ public class SellerController { ...@@ -33,7 +39,12 @@ public class SellerController {
public ResponseEntity<?> getProductById(@PathVariable int id) { public ResponseEntity<?> getProductById(@PathVariable int id) {
ProductDto productDto = service.getProductById(id); ProductDto productDto = service.getProductById(id);
return ResponseEntity.ok(productDto); return ResponseEntity.ok(productDto);
}
@PostMapping("/product/buy/json")
public ResponseEntity<?> buyProducts(@RequestBody CustomerRequest customerRequest) {
List<ProductDto> productDtoList = service.buyProducts(customerRequest);
return new ResponseEntity<>(productDtoList, HttpStatus.OK);
} }
} }
package com.qadeer.seller.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CustomerDto {
private int id;
private String name;
private String phoneNo;
private String creditCardNo;
}
package com.qadeer.seller.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CustomerRequest {
private CustomerDto customerDto;
private List<ProductDto> items;
}
package com.qadeer.seller.feign; package com.qadeer.seller.feign;
import com.qadeer.seller.dto.CustomerRequest;
import com.qadeer.seller.dto.ProductDto; import com.qadeer.seller.dto.ProductDto;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
@FeignClient(name = "inventory-api", url = "http://localhost:8083/inventory") @FeignClient(name = "inventory-api", url = "http://localhost:8083/inventory")
public interface FeignService { public interface FeignService {
...@@ -11,4 +16,6 @@ public interface FeignService { ...@@ -11,4 +16,6 @@ public interface FeignService {
@GetMapping("/product/{id}") @GetMapping("/product/{id}")
ProductDto getProductById(@PathVariable int id); ProductDto getProductById(@PathVariable int id);
@PostMapping("/product/buy/json")
List<ProductDto> buyProducts(@RequestBody CustomerRequest customerRequest);
} }
package com.qadeer.seller.model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Order {
@GeneratedValue(strategy = GenerationType.AUTO)
@Id
private int id;
private int customerId;
private int sellerId;
private String productName;
private int productPrice;
private int productQuantity;
}
package com.qadeer.seller.repository;
import com.qadeer.seller.model.Order;
import org.springframework.data.jpa.repository.JpaRepository;
public interface OrderRepository extends JpaRepository<Order, Integer> {
}
package com.qadeer.seller.service; package com.qadeer.seller.service;
import com.qadeer.seller.dto.CustomerRequest;
import com.qadeer.seller.dto.ProductDto; import com.qadeer.seller.dto.ProductDto;
import com.qadeer.seller.feign.FeignService; import com.qadeer.seller.feign.FeignService;
import com.qadeer.seller.model.Seller; import com.qadeer.seller.model.Seller;
...@@ -7,44 +8,37 @@ import com.qadeer.seller.repository.SellerRepository; ...@@ -7,44 +8,37 @@ import com.qadeer.seller.repository.SellerRepository;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter; import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.nio.file.StandardOpenOption; import java.nio.file.StandardOpenOption;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import static java.awt.SystemColor.text; import static com.qadeer.seller.constant.Constant.FILE_PATH;
@Service @Service
public class SellerService { public class SellerService {
@Autowired @Autowired
private SellerRepository repository; private SellerRepository sellerRepository;
@Autowired @Autowired
private FeignService feignService; private FeignService feignService;
String path = "/Users/aqadeer/Desktop/java-training-project-final/seller-service/orders.csv"; FileWriter fw = new FileWriter(FILE_PATH);
FileWriter fw = new FileWriter(path);
public SellerService() throws IOException { public SellerService() throws IOException {
} }
public void saveProduct(Seller seller){ public void saveProduct(Seller seller){
repository.save(seller); sellerRepository.save(seller);
}; };
public Seller getProduct(int id) { public Seller getProduct(int id) {
return repository.findById(id).get(); return sellerRepository.findById(id).get();
} }
public ProductDto getProductById(int id) { public ProductDto getProductById(int id) {
...@@ -62,7 +56,7 @@ public class SellerService { ...@@ -62,7 +56,7 @@ public class SellerService {
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
String myTime = dtf.format(now); String myTime = dtf.format(now);
String text = productDto.toString() + " " + myTime + "\n"; String text = productDto.toString() + " " + myTime + "\n";
Files.write(Paths.get(path), text.getBytes(), StandardOpenOption.APPEND); Files.write(Paths.get(FILE_PATH), text.getBytes(), StandardOpenOption.APPEND);
// bw = new BufferedWriter(fw); // bw = new BufferedWriter(fw);
// bw.append(productDto.toString()); // bw.append(productDto.toString());
} catch (IOException e) { } catch (IOException e) {
...@@ -73,4 +67,10 @@ public class SellerService { ...@@ -73,4 +67,10 @@ public class SellerService {
} }
} }
public List<ProductDto> buyProducts(CustomerRequest customerRequest) {
List<ProductDto> productDtoList = feignService.buyProducts(customerRequest);
return productDtoList;
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment