jsonsent through controller

parent add30782
......@@ -52,6 +52,16 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</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>
<dependencyManagement>
<dependencies>
......
package com.qadeer.customer.controller;
import com.qadeer.customer.dto.CustomerDto;
import com.qadeer.customer.dto.ProductDto;
import com.qadeer.customer.dto.CustomerRequest;
import com.qadeer.customer.model.Customer;
import com.qadeer.customer.service.CustomerService;
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.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
@RestController
......@@ -25,10 +27,24 @@ public class CustomerController {
@GetMapping("/buy/{productName}/{quantity}")
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);
}
// 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}")
public ResponseEntity<?> getProductById(@PathVariable int 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;
import com.qadeer.customer.dto.CustomerRequest;
import com.qadeer.customer.dto.ProductDto;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import java.util.List;
......@@ -14,6 +16,8 @@ public interface FeignService {
ProductDto getProductById(@PathVariable int id);
@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;
import com.qadeer.customer.dto.CustomerRequest;
import com.qadeer.customer.dto.ProductDto;
import com.qadeer.customer.feign.FeignService;
import com.qadeer.customer.repository.CustomerRepository;
......@@ -19,9 +20,14 @@ public class CustomerService {
@Autowired
private FeignService feignService;
public List<ProductDto> buyProducts(String productName, String productQuantity) {
ResponseEntity<List<ProductDto>> productDto = feignService.buyProducts(productName, productQuantity);
return productDto.getBody();
public List<ProductDto> buyProductByName(String productName, String productQuantity) {
List<ProductDto> productDto = feignService.buyProductByName(productName, productQuantity);
return productDto;
}
public List<ProductDto> buyProducts(CustomerRequest customerRequest) {
List<ProductDto> products = feignService.buyProducts(customerRequest);
return products;
}
public ProductDto getProductById(int id) {
......
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.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -9,7 +11,10 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/inventory")
......@@ -36,9 +41,14 @@ public class InventoryController {
}
@GetMapping("/product/{productName}/{productQuantity}")
public ResponseEntity<?> buyProducts(@PathVariable("productName") String productName, @PathVariable("productQuantity") int productQuantity) {
List<Product> productList = service.buyProducts(productName, productQuantity);
return new ResponseEntity<List<Product>>(productList, HttpStatus.OK);
public ResponseEntity<?> buyProductByName(@PathVariable("productName") String productName, @PathVariable("productQuantity") int productQuantity) {
Product product = service.buyProductByName(productName, productQuantity);
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;
@NoArgsConstructor
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String name;
private int price;
......
......@@ -8,5 +8,5 @@ import java.util.List;
@Repository
public interface ProductRepository extends JpaRepository<Product, Integer> {
List<Product> findByName(String productName);
Product findByName(String productName);
}
package com.qadeer.inventory.service;
import com.qadeer.inventory.dto.CustomerRequest;
import com.qadeer.inventory.model.Product;
import com.qadeer.inventory.repository.ProductRepository;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -10,9 +11,7 @@ import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class ProductService {
......@@ -51,42 +50,42 @@ public class ProductService {
return productList;
}
public List<Product> buyProducts(String productName, int requiredQuant) {
List<Product> productList = repository.findByName(productName);
List<Product> myProducts = new ArrayList<>();
int requiredProducts = 0;
for(Product product: productList) {
if (product.getQuantity() >= requiredQuant) {
public Product buyProductByName(String productName, int requiredQuantity) {
Product product = repository.findByName(productName);
int restockQuantity = 0;
Product productRequested = new Product();
if (product.getQuantity() >= requiredQuantity) {
// create copy of product object.
Product deliverProduct = new Product();
deliverProduct.setId(product.getId());
deliverProduct.setName(product.getName());
deliverProduct.setPrice(product.getPrice());
deliverProduct.setQuantity(requiredQuant);
myProducts.add(deliverProduct);
product.setQuantity(product.getQuantity() - requiredQuant);
productRequested.setId(product.getId());
productRequested.setName(product.getName());
productRequested.setPrice(product.getPrice());
productRequested.setQuantity(requiredQuantity);
product.setQuantity(product.getQuantity() - requiredQuantity);
repository.save(product);
}
else if (product.getQuantity() > 0 && product.getQuantity() < requiredQuant){
requiredProducts = requiredQuant - product.getQuantity();
else if (product.getQuantity() > 0 && product.getQuantity() < requiredQuantity){
restockQuantity = requiredQuantity - product.getQuantity();
// create copy of product object.
Product deliverProduct = new Product();
deliverProduct.setId(product.getId());
deliverProduct.setName(product.getName());
deliverProduct.setPrice(product.getPrice());
deliverProduct.setQuantity(product.getQuantity());
System.out.println(requiredProducts);
myProducts.add(deliverProduct);
productRequested.setId(product.getId());
productRequested.setName(product.getName());
productRequested.setPrice(product.getPrice());
productRequested.setQuantity(product.getQuantity());
product.setQuantity(0);
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;
import com.qadeer.seller.dto.CustomerRequest;
import com.qadeer.seller.dto.ProductDto;
import com.qadeer.seller.feign.FeignService;
import com.qadeer.seller.model.Seller;
import com.qadeer.seller.service.SellerService;
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.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/seller")
public class SellerController {
......@@ -33,7 +39,12 @@ public class SellerController {
public ResponseEntity<?> getProductById(@PathVariable int id) {
ProductDto productDto = service.getProductById(id);
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;
import com.qadeer.seller.dto.CustomerRequest;
import com.qadeer.seller.dto.ProductDto;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
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")
public interface FeignService {
......@@ -11,4 +16,6 @@ public interface FeignService {
@GetMapping("/product/{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;
import com.qadeer.seller.dto.CustomerRequest;
import com.qadeer.seller.dto.ProductDto;
import com.qadeer.seller.feign.FeignService;
import com.qadeer.seller.model.Seller;
......@@ -7,44 +8,37 @@ import com.qadeer.seller.repository.SellerRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static java.awt.SystemColor.text;
import static com.qadeer.seller.constant.Constant.FILE_PATH;
@Service
public class SellerService {
@Autowired
private SellerRepository repository;
private SellerRepository sellerRepository;
@Autowired
private FeignService feignService;
String path = "/Users/aqadeer/Desktop/java-training-project-final/seller-service/orders.csv";
FileWriter fw = new FileWriter(path);
FileWriter fw = new FileWriter(FILE_PATH);
public SellerService() throws IOException {
}
public void saveProduct(Seller seller){
repository.save(seller);
sellerRepository.save(seller);
};
public Seller getProduct(int id) {
return repository.findById(id).get();
return sellerRepository.findById(id).get();
}
public ProductDto getProductById(int id) {
......@@ -62,7 +56,7 @@ public class SellerService {
LocalDateTime now = LocalDateTime.now();
String myTime = dtf.format(now);
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.append(productDto.toString());
} catch (IOException e) {
......@@ -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