Add files via upload

This commit is contained in:
akeshri 2020-06-28 22:32:39 +05:30 committed by GitHub
parent 211d1c9886
commit 8b8554eb84
13 changed files with 432 additions and 0 deletions

View File

@ -0,0 +1,18 @@
package com.baeldung.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);
}
}

View File

@ -0,0 +1,48 @@
package com.baeldung.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.baeldung.hexagonal.architecture.model.Product;
import com.baeldung.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);
}
}
}
}

View File

@ -0,0 +1,52 @@
package com.baeldung.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.baeldung.hexagonal.architecture.dtos.ProductDto;
import com.baeldung.hexagonal.architecture.model.Product;
import com.baeldung.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() {
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;
}
}

View File

@ -0,0 +1,71 @@
package com.baeldung.hexagonal.architecture.dtos;
import com.baeldung.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;
}
}

View File

@ -0,0 +1,87 @@
/**
*
*/
package com.baeldung.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;
}
}

View File

@ -0,0 +1,14 @@
package com.baeldung.hexagonal.architecture.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import com.baeldung.hexagonal.architecture.model.Product;
/**
* @author AshwiniKeshri
*
*/
public interface ProductRepository extends JpaRepository<Product,Long>{
}

View File

@ -0,0 +1,21 @@
package com.baeldung.hexagonal.architecture.service;
import java.util.List;
import com.baeldung.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);
}

View File

@ -0,0 +1,44 @@
package com.baeldung.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.baeldung.hexagonal.architecture.model.Product;
import com.baeldung.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);
}
}

View File

@ -0,0 +1,9 @@
spring.main.web-environment=false
spring.jpa.hibernate.ddl-auto=false;
spring.h2.console.enabled=true
spring.h2.console.path=/h2
spring.datasource.url=jdbc:h2:file:~/hexagonal
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver

View File

@ -0,0 +1,8 @@
spring.jpa.hibernate.ddl-auto=false;
spring.h2.console.enabled=true
spring.h2.console.path=/h2
spring.datasource.url=jdbc:h2:file:~/hexagonal_test
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver

View File

@ -0,0 +1,8 @@
spring.jpa.hibernate.ddl-auto=false;
spring.h2.console.enabled=true
spring.h2.console.path=/h2
spring.datasource.url=jdbc:h2:file:~/hexagonal
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver

View File

@ -0,0 +1,9 @@
CREATE TABLE PRODUCT(
ID INT AUTO_INCREMENT,
NAME VARCHAR(255),
QUANTITY INTEGER,
PRICE DOUBLE,
DESCRIPTION VARCHAR(1000),
);
INSERT INTO PRODUCT(NAME,QUANTITY,PRICE,DESCRIPTION) VALUES ('iPhone 11 Pro',10,300,'First triple camera system');

View File

@ -0,0 +1,43 @@
/**
*
*/
package com.baeldung.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.baeldung.hexagonal.architecture.App;
import com.baeldung.hexagonal.architecture.model.Product;
import com.baeldung.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);
}
}