remove duplicate code
This commit is contained in:
parent
36d3789442
commit
18894f5c03
|
@ -1,16 +0,0 @@
|
||||||
package com.article.hexagonal.architecture;
|
|
||||||
|
|
||||||
import org.springframework.boot.SpringApplication;
|
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author AshwiniKeshri
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
@SpringBootApplication
|
|
||||||
public class App {
|
|
||||||
public static void main(String[] args) {
|
|
||||||
SpringApplication.run(App.class, args);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,50 +0,0 @@
|
||||||
package com.article.hexagonal.architecture;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.boot.CommandLineRunner;
|
|
||||||
import org.springframework.boot.SpringApplication;
|
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
|
||||||
import org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration;
|
|
||||||
import org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration;
|
|
||||||
|
|
||||||
import com.article.hexagonal.architecture.model.Product;
|
|
||||||
import com.article.hexagonal.architecture.service.ProductService;
|
|
||||||
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
|
|
||||||
import com.fasterxml.jackson.dataformat.csv.CsvSchema;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author AshwiniKeshri
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
@SpringBootApplication(exclude = { EmbeddedServletContainerAutoConfiguration.class, WebMvcAutoConfiguration.class })
|
|
||||||
public class ConsoleApp implements CommandLineRunner {
|
|
||||||
@Autowired
|
|
||||||
private ProductService productService;
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
SpringApplication.run(ConsoleApp.class, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run(String... args) throws Exception {
|
|
||||||
String filePath = "";
|
|
||||||
if (args != null && args.length == 2 && "Product".equalsIgnoreCase(args[0]) && (filePath = args[1]).length() > 0) {
|
|
||||||
File sourceFile = new File(filePath);
|
|
||||||
if (sourceFile.exists()) {
|
|
||||||
CsvMapper mapper = new CsvMapper();
|
|
||||||
List<Product> products = mapper.readerFor(Product.class)
|
|
||||||
.with(CsvSchema.emptySchema()
|
|
||||||
.withHeader())
|
|
||||||
.<Product> readValues(sourceFile)
|
|
||||||
.readAll();
|
|
||||||
productService.saveAll(products);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,54 +0,0 @@
|
||||||
package com.article.hexagonal.architecture.controller;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMethod;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
|
|
||||||
import com.article.hexagonal.architecture.dtos.ProductDto;
|
|
||||||
import com.article.hexagonal.architecture.model.Product;
|
|
||||||
import com.article.hexagonal.architecture.service.ProductService;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author AshwiniKeshri
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
@RestController
|
|
||||||
@RequestMapping("api/v1/product")
|
|
||||||
public class ProductController {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ProductService productService;
|
|
||||||
|
|
||||||
@RequestMapping(value = "/all", method = RequestMethod.GET)
|
|
||||||
public List<ProductDto> list() {
|
|
||||||
productService.findAll().stream().map(x->x.getDescription())
|
|
||||||
return null;
|
|
||||||
//return productService.findAll().stream().map(p -> new ProductDto(p)).collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@RequestMapping(value = "/{productId}", method = RequestMethod.GET)
|
|
||||||
public ProductDto get(@PathVariable long productId) {
|
|
||||||
Product p = productService.findById(productId);
|
|
||||||
return p != null ? new ProductDto(p) : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@RequestMapping(value = "/add", method = RequestMethod.POST)
|
|
||||||
public ProductDto create(@RequestBody ProductDto product) {
|
|
||||||
Product p = new Product();
|
|
||||||
p.setDescription(product.getDescription());
|
|
||||||
p.setName(product.getName());
|
|
||||||
p.setPrice(product.getPrice());
|
|
||||||
p.setQuantity(product.getQuantity());
|
|
||||||
Long id = productService.create(p);
|
|
||||||
product.setId(id);
|
|
||||||
return product;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,72 +0,0 @@
|
||||||
package com.article.hexagonal.architecture.dtos;
|
|
||||||
|
|
||||||
import com.article.hexagonal.architecture.model.Product;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author AshwiniKeshri
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class ProductDto {
|
|
||||||
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
private Long quantity;
|
|
||||||
|
|
||||||
private Double price;
|
|
||||||
|
|
||||||
private String description;
|
|
||||||
|
|
||||||
public ProductDto() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public ProductDto(Product product) {
|
|
||||||
this.description = product.getDescription();
|
|
||||||
this.id = product.getId();
|
|
||||||
this.name = product.getName();
|
|
||||||
this.price = product.getPrice();
|
|
||||||
this.quantity = product.getQuantity();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(Long id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setName(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getQuantity() {
|
|
||||||
return quantity;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setQuantity(Long quantity) {
|
|
||||||
this.quantity = quantity;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Double getPrice() {
|
|
||||||
return price;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPrice(Double price) {
|
|
||||||
this.price = price;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDescription() {
|
|
||||||
return description;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDescription(String description) {
|
|
||||||
this.description = description;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,85 +0,0 @@
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
package com.article.hexagonal.architecture.model;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
|
|
||||||
import javax.persistence.Column;
|
|
||||||
import javax.persistence.Entity;
|
|
||||||
import javax.persistence.GeneratedValue;
|
|
||||||
import javax.persistence.GenerationType;
|
|
||||||
import javax.persistence.Id;
|
|
||||||
import javax.persistence.Table;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author AshwiniKeshri
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
@Entity
|
|
||||||
@Table(name = "PRODUCT")
|
|
||||||
public class Product implements Serializable {
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
private static final long serialVersionUID = 4000353732860709995L;
|
|
||||||
|
|
||||||
@Id
|
|
||||||
@GeneratedValue(strategy = GenerationType.AUTO)
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
@Column(name = "NAME")
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
@Column(name = "QUANTITY")
|
|
||||||
private Long quantity;
|
|
||||||
|
|
||||||
@Column(name = "PRICE")
|
|
||||||
private Double price;
|
|
||||||
|
|
||||||
@Column(name = "DESCRIPTION")
|
|
||||||
private String description;
|
|
||||||
|
|
||||||
public Long getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(Long id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setName(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getQuantity() {
|
|
||||||
return quantity;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setQuantity(Long quantity) {
|
|
||||||
this.quantity = quantity > 0 ? quantity : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Double getPrice() {
|
|
||||||
return price;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPrice(Double price) {
|
|
||||||
this.price = price == null ? 0.0 : price;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDescription() {
|
|
||||||
return description;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDescription(String description) {
|
|
||||||
this.description = description;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,14 +0,0 @@
|
||||||
package com.article.hexagonal.architecture.repository;
|
|
||||||
|
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
|
||||||
|
|
||||||
import com.article.hexagonal.architecture.model.Product;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author AshwiniKeshri
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
public interface ProductRepository extends JpaRepository<Product, Long> {
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
package com.article.hexagonal.architecture.service;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import com.article.hexagonal.architecture.model.Product;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author AshwiniKeshri
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
public interface ProductService {
|
|
||||||
|
|
||||||
List<Product> findAll();
|
|
||||||
|
|
||||||
Product findById(long id);
|
|
||||||
|
|
||||||
Long create(Product product);
|
|
||||||
|
|
||||||
void saveAll(List<Product> products);
|
|
||||||
}
|
|
|
@ -1,44 +0,0 @@
|
||||||
package com.article.hexagonal.architecture.service;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import com.article.hexagonal.architecture.model.Product;
|
|
||||||
import com.article.hexagonal.architecture.repository.ProductRepository;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author AshwiniKeshri
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
@Service
|
|
||||||
public class ProductServiceImpl implements ProductService {
|
|
||||||
|
|
||||||
private Logger logger = LoggerFactory.getLogger(ProductServiceImpl.class);
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ProductRepository productRepository;
|
|
||||||
|
|
||||||
public List<Product> findAll() {
|
|
||||||
return productRepository.findAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Product findById(long id) {
|
|
||||||
return productRepository.findOne(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long create(Product product) {
|
|
||||||
product = productRepository.saveAndFlush(product);
|
|
||||||
return product.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void saveAll(List<Product> products) {
|
|
||||||
productRepository.save(products);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,43 +0,0 @@
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
package com.article.hexagonal.architecture.service;
|
|
||||||
|
|
||||||
import org.junit.Assert;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.boot.test.SpringApplicationConfiguration;
|
|
||||||
import org.springframework.context.annotation.PropertySource;
|
|
||||||
import org.springframework.context.annotation.PropertySources;
|
|
||||||
import org.springframework.test.context.ActiveProfiles;
|
|
||||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
|
||||||
|
|
||||||
import com.article.hexagonal.architecture.App;
|
|
||||||
import com.article.hexagonal.architecture.model.Product;
|
|
||||||
import com.article.hexagonal.architecture.service.ProductService;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author AshwiniKeshri
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@RunWith(SpringJUnit4ClassRunner.class)
|
|
||||||
@SpringApplicationConfiguration(App.class)
|
|
||||||
@ActiveProfiles(value = "test")
|
|
||||||
public class ProductServiceTest {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ProductService productService;
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testCreateProduct() {
|
|
||||||
Product product = new Product();
|
|
||||||
product.setDescription("test product");
|
|
||||||
product.setName("Product1");
|
|
||||||
product.setPrice(10.0);
|
|
||||||
product.setQuantity(100l);
|
|
||||||
Long id = productService.create(product);
|
|
||||||
Assert.assertTrue(id > 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue