BAEL-20869 Move remaining spring boot modules
This commit is contained in:
+28
@@ -0,0 +1,28 @@
|
||||
package com.baeldung.application;
|
||||
|
||||
import com.baeldung.application.entities.User;
|
||||
import com.baeldung.application.repositories.UserRepository;
|
||||
import java.util.stream.Stream;
|
||||
import org.springframework.boot.CommandLineRunner;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
|
||||
@SpringBootApplication
|
||||
public class Application {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(Application.class, args);
|
||||
}
|
||||
|
||||
@Bean
|
||||
CommandLineRunner init(UserRepository userRepository) {
|
||||
return args -> {
|
||||
Stream.of("John", "Julie", "Jennifer", "Helen", "Rachel").forEach(name -> {
|
||||
User user = new User(name, name.toLowerCase() + "@domain.com");
|
||||
userRepository.save(user);
|
||||
});
|
||||
userRepository.findAll().forEach(System.out::println);
|
||||
};
|
||||
}
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
package com.baeldung.application.controllers;
|
||||
|
||||
import com.baeldung.application.entities.User;
|
||||
import com.baeldung.application.repositories.UserRepository;
|
||||
import java.util.List;
|
||||
import org.springframework.web.bind.annotation.CrossOrigin;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@RestController
|
||||
@CrossOrigin(origins = "http://localhost:4200")
|
||||
public class UserController {
|
||||
|
||||
private final UserRepository userRepository;
|
||||
|
||||
public UserController(UserRepository userRepository) {
|
||||
this.userRepository = userRepository;
|
||||
}
|
||||
|
||||
@GetMapping("/users")
|
||||
public List<User> getUsers() {
|
||||
return (List<User>) userRepository.findAll();
|
||||
}
|
||||
|
||||
@PostMapping("/users")
|
||||
void addUser(@RequestBody User user) {
|
||||
userRepository.save(user);
|
||||
}
|
||||
}
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
package com.baeldung.application.entities;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.GenerationType;
|
||||
import javax.persistence.Id;
|
||||
|
||||
@Entity
|
||||
public class User {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||
private long id;
|
||||
private final String name;
|
||||
private final String email;
|
||||
|
||||
public User() {
|
||||
this.name = "";
|
||||
this.email = "";
|
||||
}
|
||||
|
||||
public User(String name, String email) {
|
||||
this.name = name;
|
||||
this.email = email;
|
||||
}
|
||||
|
||||
public long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public String getEmail() {
|
||||
return email;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "User{" + "id=" + id + ", name=" + name + ", email=" + email + '}';
|
||||
}
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
package com.baeldung.application.repositories;
|
||||
|
||||
import com.baeldung.application.entities.User;
|
||||
import org.springframework.data.repository.CrudRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
import org.springframework.web.bind.annotation.CrossOrigin;
|
||||
|
||||
@Repository
|
||||
public interface UserRepository extends CrudRepository<User, Long>{}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
package com.baeldung.ecommerce;
|
||||
|
||||
import com.baeldung.ecommerce.model.Product;
|
||||
import com.baeldung.ecommerce.service.ProductService;
|
||||
import org.springframework.boot.CommandLineRunner;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
|
||||
@SpringBootApplication
|
||||
public class EcommerceApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(EcommerceApplication.class, args);
|
||||
}
|
||||
|
||||
@Bean
|
||||
CommandLineRunner runner(ProductService productService) {
|
||||
return args -> {
|
||||
productService.save(new Product(1L, "TV Set", 300.00, "http://placehold.it/200x100"));
|
||||
productService.save(new Product(2L, "Game Console", 200.00, "http://placehold.it/200x100"));
|
||||
productService.save(new Product(3L, "Sofa", 100.00, "http://placehold.it/200x100"));
|
||||
productService.save(new Product(4L, "Icecream", 5.00, "http://placehold.it/200x100"));
|
||||
productService.save(new Product(5L, "Beer", 3.00, "http://placehold.it/200x100"));
|
||||
productService.save(new Product(6L, "Phone", 500.00, "http://placehold.it/200x100"));
|
||||
productService.save(new Product(7L, "Watch", 30.00, "http://placehold.it/200x100"));
|
||||
};
|
||||
}
|
||||
}
|
||||
+99
@@ -0,0 +1,99 @@
|
||||
package com.baeldung.ecommerce.controller;
|
||||
|
||||
import com.baeldung.ecommerce.dto.OrderProductDto;
|
||||
import com.baeldung.ecommerce.exception.ResourceNotFoundException;
|
||||
import com.baeldung.ecommerce.model.Order;
|
||||
import com.baeldung.ecommerce.model.OrderProduct;
|
||||
import com.baeldung.ecommerce.model.OrderStatus;
|
||||
import com.baeldung.ecommerce.service.OrderProductService;
|
||||
import com.baeldung.ecommerce.service.OrderService;
|
||||
import com.baeldung.ecommerce.service.ProductService;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/orders")
|
||||
public class OrderController {
|
||||
|
||||
ProductService productService;
|
||||
OrderService orderService;
|
||||
OrderProductService orderProductService;
|
||||
|
||||
public OrderController(ProductService productService, OrderService orderService, OrderProductService orderProductService) {
|
||||
this.productService = productService;
|
||||
this.orderService = orderService;
|
||||
this.orderProductService = orderProductService;
|
||||
}
|
||||
|
||||
@GetMapping
|
||||
@ResponseStatus(HttpStatus.OK)
|
||||
public @NotNull Iterable<Order> list() {
|
||||
return this.orderService.getAllOrders();
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
public ResponseEntity<Order> create(@RequestBody OrderForm form) {
|
||||
List<OrderProductDto> formDtos = form.getProductOrders();
|
||||
validateProductsExistence(formDtos);
|
||||
Order order = new Order();
|
||||
order.setStatus(OrderStatus.PAID.name());
|
||||
order = this.orderService.create(order);
|
||||
|
||||
List<OrderProduct> orderProducts = new ArrayList<>();
|
||||
for (OrderProductDto dto : formDtos) {
|
||||
orderProducts.add(orderProductService.create(new OrderProduct(order, productService.getProduct(dto
|
||||
.getProduct()
|
||||
.getId()), dto.getQuantity())));
|
||||
}
|
||||
|
||||
order.setOrderProducts(orderProducts);
|
||||
|
||||
this.orderService.update(order);
|
||||
|
||||
String uri = ServletUriComponentsBuilder
|
||||
.fromCurrentServletMapping()
|
||||
.path("/orders/{id}")
|
||||
.buildAndExpand(order.getId())
|
||||
.toString();
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.add("Location", uri);
|
||||
|
||||
return new ResponseEntity<>(order, headers, HttpStatus.CREATED);
|
||||
}
|
||||
|
||||
private void validateProductsExistence(List<OrderProductDto> orderProducts) {
|
||||
List<OrderProductDto> list = orderProducts
|
||||
.stream()
|
||||
.filter(op -> Objects.isNull(productService.getProduct(op
|
||||
.getProduct()
|
||||
.getId())))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (!CollectionUtils.isEmpty(list)) {
|
||||
new ResourceNotFoundException("Product not found");
|
||||
}
|
||||
}
|
||||
|
||||
public static class OrderForm {
|
||||
|
||||
private List<OrderProductDto> productOrders;
|
||||
|
||||
public List<OrderProductDto> getProductOrders() {
|
||||
return productOrders;
|
||||
}
|
||||
|
||||
public void setProductOrders(List<OrderProductDto> productOrders) {
|
||||
this.productOrders = productOrders;
|
||||
}
|
||||
}
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
package com.baeldung.ecommerce.controller;
|
||||
|
||||
import com.baeldung.ecommerce.model.Product;
|
||||
import com.baeldung.ecommerce.service.ProductService;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/products")
|
||||
public class ProductController {
|
||||
|
||||
private ProductService productService;
|
||||
|
||||
public ProductController(ProductService productService) {
|
||||
this.productService = productService;
|
||||
}
|
||||
|
||||
@GetMapping(value = { "", "/" })
|
||||
public @NotNull Iterable<Product> getProducts() {
|
||||
return productService.getAllProducts();
|
||||
}
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
package com.baeldung.ecommerce.dto;
|
||||
|
||||
import com.baeldung.ecommerce.model.Product;
|
||||
|
||||
public class OrderProductDto {
|
||||
|
||||
private Product product;
|
||||
private Integer quantity;
|
||||
|
||||
public Product getProduct() {
|
||||
return product;
|
||||
}
|
||||
|
||||
public void setProduct(Product product) {
|
||||
this.product = product;
|
||||
}
|
||||
|
||||
public Integer getQuantity() {
|
||||
return quantity;
|
||||
}
|
||||
|
||||
public void setQuantity(Integer quantity) {
|
||||
this.quantity = quantity;
|
||||
}
|
||||
}
|
||||
+81
@@ -0,0 +1,81 @@
|
||||
package com.baeldung.ecommerce.exception;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||
|
||||
import javax.validation.ConstraintViolation;
|
||||
import javax.validation.ConstraintViolationException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@RestControllerAdvice
|
||||
public class ApiExceptionHandler {
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
@ExceptionHandler(ConstraintViolationException.class)
|
||||
public ResponseEntity<ErrorResponse> handle(ConstraintViolationException e) {
|
||||
ErrorResponse errors = new ErrorResponse();
|
||||
for (ConstraintViolation violation : e.getConstraintViolations()) {
|
||||
ErrorItem error = new ErrorItem();
|
||||
error.setCode(violation.getMessageTemplate());
|
||||
error.setMessage(violation.getMessage());
|
||||
errors.addError(error);
|
||||
}
|
||||
|
||||
return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
@ExceptionHandler(ResourceNotFoundException.class)
|
||||
public ResponseEntity<ErrorItem> handle(ResourceNotFoundException e) {
|
||||
ErrorItem error = new ErrorItem();
|
||||
error.setMessage(e.getMessage());
|
||||
|
||||
return new ResponseEntity<>(error, HttpStatus.NOT_FOUND);
|
||||
}
|
||||
|
||||
public static class ErrorItem {
|
||||
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL) private String code;
|
||||
|
||||
private String message;
|
||||
|
||||
public String getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public void setCode(String code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
public void setMessage(String message) {
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class ErrorResponse {
|
||||
|
||||
private List<ErrorItem> errors = new ArrayList<>();
|
||||
|
||||
public List<ErrorItem> getErrors() {
|
||||
return errors;
|
||||
}
|
||||
|
||||
public void setErrors(List<ErrorItem> errors) {
|
||||
this.errors = errors;
|
||||
}
|
||||
|
||||
public void addError(ErrorItem error) {
|
||||
this.errors.add(error);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
package com.baeldung.ecommerce.exception;
|
||||
|
||||
public class ResourceNotFoundException extends RuntimeException {
|
||||
|
||||
private static final long serialVersionUID = 5861310537366287163L;
|
||||
|
||||
public ResourceNotFoundException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public ResourceNotFoundException(final String message, final Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
|
||||
public ResourceNotFoundException(final String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public ResourceNotFoundException(final Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
}
|
||||
+78
@@ -0,0 +1,78 @@
|
||||
package com.baeldung.ecommerce.model;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
|
||||
import com.fasterxml.jackson.annotation.JsonManagedReference;
|
||||
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
|
||||
|
||||
import javax.persistence.*;
|
||||
import javax.validation.Valid;
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Entity
|
||||
@Table(name = "orders")
|
||||
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="orderProducts")
|
||||
public class Order {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long id;
|
||||
|
||||
@JsonFormat(pattern = "dd/MM/yyyy") private LocalDate dateCreated;
|
||||
|
||||
private String status;
|
||||
|
||||
@OneToMany(mappedBy = "pk.order")
|
||||
@Valid
|
||||
private List<OrderProduct> orderProducts = new ArrayList<>();
|
||||
|
||||
@Transient
|
||||
public Double getTotalOrderPrice() {
|
||||
double sum = 0D;
|
||||
List<OrderProduct> orderProducts = getOrderProducts();
|
||||
for (OrderProduct op : orderProducts) {
|
||||
sum += op.getTotalPrice();
|
||||
}
|
||||
|
||||
return sum;
|
||||
}
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public LocalDate getDateCreated() {
|
||||
return dateCreated;
|
||||
}
|
||||
|
||||
public void setDateCreated(LocalDate dateCreated) {
|
||||
this.dateCreated = dateCreated;
|
||||
}
|
||||
|
||||
public String getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
public void setStatus(String status) {
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
public List<OrderProduct> getOrderProducts() {
|
||||
return orderProducts;
|
||||
}
|
||||
|
||||
public void setOrderProducts(List<OrderProduct> orderProducts) {
|
||||
this.orderProducts = orderProducts;
|
||||
}
|
||||
|
||||
@Transient
|
||||
public int getNumberOfProducts() {
|
||||
return this.orderProducts.size();
|
||||
}
|
||||
}
|
||||
+87
@@ -0,0 +1,87 @@
|
||||
package com.baeldung.ecommerce.model;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.EmbeddedId;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Transient;
|
||||
|
||||
@Entity
|
||||
public class OrderProduct {
|
||||
|
||||
@EmbeddedId
|
||||
@JsonIgnore
|
||||
private OrderProductPK pk;
|
||||
|
||||
@Column(nullable = false) private Integer quantity;
|
||||
|
||||
public OrderProduct() {
|
||||
super();
|
||||
}
|
||||
|
||||
public OrderProduct(Order order, Product product, Integer quantity) {
|
||||
pk = new OrderProductPK();
|
||||
pk.setOrder(order);
|
||||
pk.setProduct(product);
|
||||
this.quantity = quantity;
|
||||
}
|
||||
|
||||
@Transient
|
||||
public Product getProduct() {
|
||||
return this.pk.getProduct();
|
||||
}
|
||||
|
||||
@Transient
|
||||
public Double getTotalPrice() {
|
||||
return getProduct().getPrice() * getQuantity();
|
||||
}
|
||||
|
||||
public OrderProductPK getPk() {
|
||||
return pk;
|
||||
}
|
||||
|
||||
public void setPk(OrderProductPK pk) {
|
||||
this.pk = pk;
|
||||
}
|
||||
|
||||
public Integer getQuantity() {
|
||||
return quantity;
|
||||
}
|
||||
|
||||
public void setQuantity(Integer quantity) {
|
||||
this.quantity = quantity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((pk == null) ? 0 : pk.hashCode());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
if (obj == null) {
|
||||
return false;
|
||||
}
|
||||
if (getClass() != obj.getClass()) {
|
||||
return false;
|
||||
}
|
||||
OrderProduct other = (OrderProduct) obj;
|
||||
if (pk == null) {
|
||||
if (other.pk != null) {
|
||||
return false;
|
||||
}
|
||||
} else if (!pk.equals(other.pk)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
+91
@@ -0,0 +1,91 @@
|
||||
package com.baeldung.ecommerce.model;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
|
||||
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
|
||||
|
||||
import javax.persistence.Embeddable;
|
||||
import javax.persistence.FetchType;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.ManyToOne;
|
||||
import java.io.Serializable;
|
||||
|
||||
@Embeddable
|
||||
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "order")
|
||||
public class OrderProductPK implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 476151177562655457L;
|
||||
|
||||
@ManyToOne(optional = false, fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "order_id")
|
||||
private Order order;
|
||||
|
||||
@ManyToOne(optional = false, fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "product_id")
|
||||
private Product product;
|
||||
|
||||
public Order getOrder() {
|
||||
return order;
|
||||
}
|
||||
|
||||
public void setOrder(Order order) {
|
||||
this.order = order;
|
||||
}
|
||||
|
||||
public Product getProduct() {
|
||||
return product;
|
||||
}
|
||||
|
||||
public void setProduct(Product product) {
|
||||
this.product = product;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
|
||||
result = prime * result + ((order.getId() == null)
|
||||
? 0
|
||||
: order
|
||||
.getId()
|
||||
.hashCode());
|
||||
result = prime * result + ((product.getId() == null)
|
||||
? 0
|
||||
: product
|
||||
.getId()
|
||||
.hashCode());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
if (obj == null) {
|
||||
return false;
|
||||
}
|
||||
if (getClass() != obj.getClass()) {
|
||||
return false;
|
||||
}
|
||||
OrderProductPK other = (OrderProductPK) obj;
|
||||
if (order == null) {
|
||||
if (other.order != null) {
|
||||
return false;
|
||||
}
|
||||
} else if (!order.equals(other.order)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (product == null) {
|
||||
if (other.product != null) {
|
||||
return false;
|
||||
}
|
||||
} else if (!product.equals(other.product)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
package com.baeldung.ecommerce.model;
|
||||
|
||||
public enum OrderStatus {
|
||||
PAID
|
||||
}
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
package com.baeldung.ecommerce.model;
|
||||
|
||||
import javax.persistence.*;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@Entity
|
||||
public class Product {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long id;
|
||||
|
||||
@NotNull(message = "Product name is required.")
|
||||
@Basic(optional = false)
|
||||
private String name;
|
||||
|
||||
private Double price;
|
||||
|
||||
private String pictureUrl;
|
||||
|
||||
public Product(Long id, @NotNull(message = "Product name is required.") String name, Double price, String pictureUrl) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.price = price;
|
||||
this.pictureUrl = pictureUrl;
|
||||
}
|
||||
|
||||
public Product() {
|
||||
}
|
||||
|
||||
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 Double getPrice() {
|
||||
return price;
|
||||
}
|
||||
|
||||
public void setPrice(Double price) {
|
||||
this.price = price;
|
||||
}
|
||||
|
||||
public String getPictureUrl() {
|
||||
return pictureUrl;
|
||||
}
|
||||
|
||||
public void setPictureUrl(String pictureUrl) {
|
||||
this.pictureUrl = pictureUrl;
|
||||
}
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
package com.baeldung.ecommerce.repository;
|
||||
|
||||
import com.baeldung.ecommerce.model.OrderProduct;
|
||||
import com.baeldung.ecommerce.model.OrderProductPK;
|
||||
import org.springframework.data.repository.CrudRepository;
|
||||
|
||||
public interface OrderProductRepository extends CrudRepository<OrderProduct, OrderProductPK> {
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package com.baeldung.ecommerce.repository;
|
||||
|
||||
import com.baeldung.ecommerce.model.Order;
|
||||
import org.springframework.data.repository.CrudRepository;
|
||||
|
||||
public interface OrderRepository extends CrudRepository<Order, Long> {
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package com.baeldung.ecommerce.repository;
|
||||
|
||||
import com.baeldung.ecommerce.model.Product;
|
||||
import org.springframework.data.repository.CrudRepository;
|
||||
|
||||
public interface ProductRepository extends CrudRepository<Product, Long> {
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
package com.baeldung.ecommerce.service;
|
||||
|
||||
import com.baeldung.ecommerce.model.OrderProduct;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@Validated
|
||||
public interface OrderProductService {
|
||||
|
||||
OrderProduct create(@NotNull(message = "The products for order cannot be null.") @Valid OrderProduct orderProduct);
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
package com.baeldung.ecommerce.service;
|
||||
|
||||
import com.baeldung.ecommerce.model.OrderProduct;
|
||||
import com.baeldung.ecommerce.repository.OrderProductRepository;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@Service
|
||||
@Transactional
|
||||
public class OrderProductServiceImpl implements OrderProductService {
|
||||
|
||||
private OrderProductRepository orderProductRepository;
|
||||
|
||||
public OrderProductServiceImpl(OrderProductRepository orderProductRepository) {
|
||||
this.orderProductRepository = orderProductRepository;
|
||||
}
|
||||
|
||||
@Override
|
||||
public OrderProduct create(OrderProduct orderProduct) {
|
||||
return this.orderProductRepository.save(orderProduct);
|
||||
}
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
package com.baeldung.ecommerce.service;
|
||||
|
||||
import com.baeldung.ecommerce.model.Order;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@Validated
|
||||
public interface OrderService {
|
||||
|
||||
@NotNull Iterable<Order> getAllOrders();
|
||||
|
||||
Order create(@NotNull(message = "The order cannot be null.") @Valid Order order);
|
||||
|
||||
void update(@NotNull(message = "The order cannot be null.") @Valid Order order);
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
package com.baeldung.ecommerce.service;
|
||||
|
||||
import com.baeldung.ecommerce.model.Order;
|
||||
import com.baeldung.ecommerce.repository.OrderRepository;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.time.LocalDate;
|
||||
|
||||
@Service
|
||||
@Transactional
|
||||
public class OrderServiceImpl implements OrderService {
|
||||
|
||||
private OrderRepository orderRepository;
|
||||
|
||||
public OrderServiceImpl(OrderRepository orderRepository) {
|
||||
this.orderRepository = orderRepository;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterable<Order> getAllOrders() {
|
||||
return this.orderRepository.findAll();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Order create(Order order) {
|
||||
order.setDateCreated(LocalDate.now());
|
||||
|
||||
return this.orderRepository.save(order);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(Order order) {
|
||||
this.orderRepository.save(order);
|
||||
}
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
package com.baeldung.ecommerce.service;
|
||||
|
||||
import com.baeldung.ecommerce.model.Product;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.validation.constraints.Min;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@Validated
|
||||
public interface ProductService {
|
||||
|
||||
@NotNull Iterable<Product> getAllProducts();
|
||||
|
||||
Product getProduct(@Min(value = 1L, message = "Invalid product ID.") long id);
|
||||
|
||||
Product save(Product product);
|
||||
}
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
package com.baeldung.ecommerce.service;
|
||||
|
||||
import com.baeldung.ecommerce.exception.ResourceNotFoundException;
|
||||
import com.baeldung.ecommerce.model.Product;
|
||||
import com.baeldung.ecommerce.repository.ProductRepository;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@Service
|
||||
@Transactional
|
||||
public class ProductServiceImpl implements ProductService {
|
||||
|
||||
private ProductRepository productRepository;
|
||||
|
||||
public ProductServiceImpl(ProductRepository productRepository) {
|
||||
this.productRepository = productRepository;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterable<Product> getAllProducts() {
|
||||
return productRepository.findAll();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Product getProduct(long id) {
|
||||
return productRepository
|
||||
.findById(id)
|
||||
.orElseThrow(() -> new ResourceNotFoundException("Product not found"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Product save(Product product) {
|
||||
return productRepository.save(product);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user