Третья лабораторная работа. Фикс сервиса продукта + фикс установки связей OneToMany
This commit is contained in:
parent
49195ca6b4
commit
c6dff060b0
Binary file not shown.
@ -19,7 +19,12 @@ public class Customer {
|
||||
private String middleName;
|
||||
@OneToMany(fetch = FetchType.EAGER, mappedBy = "customer", cascade = CascadeType.ALL)
|
||||
private List<Ordered> orders;
|
||||
|
||||
public void AddOrdered(Ordered ordered){
|
||||
this.orders.add(ordered);
|
||||
if (ordered.getCustomer() != this){
|
||||
ordered.setCustomer(this);
|
||||
}
|
||||
}
|
||||
public Customer(){}
|
||||
|
||||
public Customer(String lastName, String firstName, String middleName){
|
||||
|
@ -20,10 +20,7 @@ public class Ordered {
|
||||
@Column
|
||||
private int quantity;
|
||||
public Ordered(){}
|
||||
public Ordered(Store store, Product product, Customer customer, int quantity){
|
||||
this.store = store;
|
||||
this.product = product;
|
||||
this.customer = customer;
|
||||
public Ordered(int quantity){
|
||||
this.quantity = quantity;
|
||||
}
|
||||
|
||||
@ -55,6 +52,14 @@ public class Ordered {
|
||||
this.quantity = quantity;
|
||||
}
|
||||
|
||||
public void setStore(Store store) {
|
||||
this.store = store;
|
||||
}
|
||||
|
||||
public void setCustomer(Customer customer) {
|
||||
this.customer = customer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj) return true;
|
||||
|
@ -28,6 +28,12 @@ public class Product {
|
||||
this.name = name;
|
||||
this.orders = new ArrayList<Ordered>();
|
||||
}
|
||||
public void AddOrdered(Ordered ordered){
|
||||
this.orders.add(ordered);
|
||||
if (ordered.getProduct() != this){
|
||||
ordered.setProduct(this);
|
||||
}
|
||||
}
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.example.ipLab.StoreDataBase.Model;
|
||||
|
||||
import com.example.ipLab.StoreDataBase.Service.ProductService;
|
||||
import jakarta.persistence.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@ -39,6 +40,18 @@ public class Store {
|
||||
public List<Product> getProducts() {
|
||||
return products;
|
||||
}
|
||||
public void AddProduct(Product product){
|
||||
this.products.add(product);
|
||||
if (product.getStore() != this){
|
||||
product.setStore(this);
|
||||
}
|
||||
}
|
||||
public void AddOrdered(Ordered ordered){
|
||||
this.orders.add(ordered);
|
||||
if (ordered.getStore() != this){
|
||||
ordered.setStore(this);
|
||||
}
|
||||
}
|
||||
|
||||
public void setStoreName(String storeName) {
|
||||
this.storeName = storeName;
|
||||
|
@ -20,10 +20,10 @@ public class OrderService {
|
||||
|
||||
@Transactional
|
||||
public Ordered addOrder(Store store, Product product, Customer customer, int quantity){
|
||||
final Ordered order = new Ordered(store, product, customer, quantity);
|
||||
order.getStore().getOrders().add(order);
|
||||
order.getCustomer().getOrders().add(order);
|
||||
order.getProduct().getOrders().add(order);
|
||||
final Ordered order = new Ordered(quantity);
|
||||
product.AddOrdered(order);
|
||||
customer.AddOrdered(order);
|
||||
store.AddOrdered(order);
|
||||
em.persist(order);
|
||||
return order;
|
||||
}
|
||||
|
@ -0,0 +1,72 @@
|
||||
package com.example.ipLab.StoreDataBase.Service;
|
||||
|
||||
import com.example.ipLab.StoreDataBase.Model.Customer;
|
||||
import com.example.ipLab.StoreDataBase.Model.Ordered;
|
||||
import com.example.ipLab.StoreDataBase.Model.Product;
|
||||
import com.example.ipLab.StoreDataBase.Model.Store;
|
||||
import jakarta.persistence.EntityManager;
|
||||
import jakarta.persistence.EntityNotFoundException;
|
||||
import jakarta.persistence.PersistenceContext;
|
||||
import jakarta.transaction.Transactional;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.List;
|
||||
@Service
|
||||
public class ProductService {
|
||||
@PersistenceContext
|
||||
private EntityManager em;
|
||||
@Transactional
|
||||
public Product addProduct(String productName){
|
||||
if (!StringUtils.hasText(productName)){
|
||||
throw new IllegalArgumentException("Product name is null or empty");
|
||||
}
|
||||
final Product product = new Product(productName);
|
||||
em.persist(product);
|
||||
return product;
|
||||
}
|
||||
|
||||
@Transactional()
|
||||
public Product getProduct(Long id){
|
||||
Product product = em.find(Product.class, id);
|
||||
if (product == null){
|
||||
throw new EntityNotFoundException(String.format("Product with id = %s isn't found", id));
|
||||
}
|
||||
em.persist(product);
|
||||
return product;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public List<Product> getAllProducts(){
|
||||
return em.createQuery("get p from Product p", Product.class).getResultList();
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public Product updateProduct(Long id, String productName){
|
||||
if (!StringUtils.hasText(productName)){
|
||||
throw new IllegalArgumentException("Product name is null or empty");
|
||||
}
|
||||
final Product product = getProduct(id);
|
||||
if (product == null){
|
||||
throw new EntityNotFoundException(String.format("Product with id = %s isn't found", id));
|
||||
}
|
||||
product.setName(productName);
|
||||
return em.merge(product);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public Product deleteProduct(Long id){
|
||||
final Product product = getProduct(id);
|
||||
if (product == null){
|
||||
throw new EntityNotFoundException(String.format("Product with id = %s isn't found", id));
|
||||
}
|
||||
Store store = product.getStore();
|
||||
if (store != null) store.getProducts().remove(product);
|
||||
em.remove(product);
|
||||
return product;
|
||||
}
|
||||
@Transactional
|
||||
public void deleteAllProducts(){
|
||||
em.createQuery("delete from Customer");
|
||||
}
|
||||
}
|
@ -16,6 +16,11 @@ import java.util.List;
|
||||
public class StoreService {
|
||||
@PersistenceContext
|
||||
private EntityManager em;
|
||||
private ProductService productService;
|
||||
|
||||
public StoreService(ProductService productService){
|
||||
this.productService = productService;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public Store addStore(String storeName){
|
||||
@ -64,69 +69,45 @@ public class StoreService {
|
||||
|
||||
//product section
|
||||
@Transactional
|
||||
public Product addProduct(Long storeId, String productName){
|
||||
if (!StringUtils.hasText(productName)){
|
||||
throw new IllegalArgumentException("Product name is null or empty");
|
||||
}
|
||||
Store store = em.find(Store.class, storeId);
|
||||
if (store == null){
|
||||
throw new EntityNotFoundException(String.format("Store with id = %s isn't found", storeId));
|
||||
}
|
||||
final Product product = new Product(productName);
|
||||
em.persist(product);
|
||||
store.getProducts().add(product);
|
||||
product.setStore(store);
|
||||
public Product addProduct(Long storeId, Long productId){
|
||||
Store store = getStore(storeId);
|
||||
Product product = productService.getProduct(productId);
|
||||
store.AddProduct(product);
|
||||
em.persist(store);
|
||||
return product;
|
||||
}
|
||||
|
||||
@Transactional()
|
||||
public Product getProduct(Long productId, Long storeId){
|
||||
Store store = em.find(Store.class, storeId);
|
||||
public Product getProductFromStore(Long productId, Long storeId){
|
||||
Store store = getStore(storeId);
|
||||
var prFind = store.getProducts().stream().filter(pr -> pr.getId().equals(productId)).findFirst();
|
||||
if (prFind.isPresent()) {
|
||||
return prFind.get();
|
||||
}
|
||||
else throw new EntityNotFoundException(String.format("Product with id = %s isn't found", productId));
|
||||
else throw new EntityNotFoundException(String.format("Product with id = %s isn't found in store with id = %s", productId, storeId));
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public List<Product> getAllProducts(Long storeId){
|
||||
return em.find(Store.class, storeId).getProducts();
|
||||
public List<Product> getAllProductsFromStore(Long storeId) {
|
||||
Store store = getStore(storeId);
|
||||
return store.getProducts();
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public Product updateProduct(Long storeId, Long productId, String productName){
|
||||
if (!StringUtils.hasText(productName)){
|
||||
throw new IllegalArgumentException("Product name is null or empty");
|
||||
}
|
||||
final Product product = getProduct(productId, storeId);
|
||||
if (product == null){
|
||||
throw new EntityNotFoundException(String.format("Product with id = %s isn't found", productId));
|
||||
}
|
||||
product.setName(productName);
|
||||
return em.merge(product);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public Product deleteProduct(Long storeId, Long productId){
|
||||
final Product product = getProduct(productId, storeId);
|
||||
if (product == null){
|
||||
throw new EntityNotFoundException(String.format("Product with id = %s isn't found", productId));
|
||||
}
|
||||
Store store = product.getStore();
|
||||
if (store != null) store.getProducts().remove(product);
|
||||
public Product deleteProductFromStore(Long storeId, Long productId){
|
||||
Store store = getStore(storeId);
|
||||
Product product = getProductFromStore(productId, storeId);
|
||||
store.getProducts().remove(product);
|
||||
em.remove(product);
|
||||
return product;
|
||||
}
|
||||
@Transactional
|
||||
public void deleteAllProducts(Long storeId){
|
||||
Store store = em.find(Store.class, storeId);
|
||||
if (store == null){
|
||||
throw new EntityNotFoundException(String.format("Store with id = %s isn't found", storeId));
|
||||
}
|
||||
Store store = getStore(storeId);
|
||||
List<Product> storeProducts = store.getProducts();
|
||||
for (Product pr:
|
||||
storeProducts) {
|
||||
pr.setStore(null);
|
||||
store.getProducts().remove(pr);
|
||||
em.remove(pr);
|
||||
}
|
||||
|
@ -6,6 +6,7 @@ import com.example.ipLab.StoreDataBase.Model.Product;
|
||||
import com.example.ipLab.StoreDataBase.Model.Store;
|
||||
import com.example.ipLab.StoreDataBase.Service.CustomerService;
|
||||
import com.example.ipLab.StoreDataBase.Service.OrderService;
|
||||
import com.example.ipLab.StoreDataBase.Service.ProductService;
|
||||
import com.example.ipLab.StoreDataBase.Service.StoreService;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
@ -20,8 +21,11 @@ public class JpaTests {
|
||||
CustomerService customerService;
|
||||
@Autowired
|
||||
StoreService storeService;
|
||||
@Autowired
|
||||
ProductService productService;
|
||||
@Test
|
||||
void testStore(){
|
||||
productService.deleteAllProducts();
|
||||
orderService.deleteAllOrders();
|
||||
customerService.deleteAllCustomers();
|
||||
storeService.deleteAllStores();
|
||||
@ -32,6 +36,7 @@ public class JpaTests {
|
||||
storeService.updateStore(store.getId(), "newName");
|
||||
Assertions.assertEquals("newName", storeService.getStore(store.getId()).getStoreName());
|
||||
Assertions.assertEquals("newName", storeService.deleteStore(store.getId()).getStoreName());
|
||||
productService.deleteAllProducts();
|
||||
orderService.deleteAllOrders();
|
||||
customerService.deleteAllCustomers();
|
||||
storeService.deleteAllStores();
|
||||
@ -39,6 +44,7 @@ public class JpaTests {
|
||||
|
||||
@Test
|
||||
void testCustomer(){
|
||||
productService.deleteAllProducts();
|
||||
orderService.deleteAllOrders();
|
||||
customerService.deleteAllCustomers();
|
||||
storeService.deleteAllStores();
|
||||
@ -49,6 +55,7 @@ public class JpaTests {
|
||||
Assertions.assertEquals("1", customerService.updateCustomer(c.getId(), c.getLastName(), "1", c.getMiddleName()).getFirstName());
|
||||
Assertions.assertEquals("1", customerService.deleteCustomer(c.getId()).getFirstName());
|
||||
|
||||
productService.deleteAllProducts();
|
||||
orderService.deleteAllOrders();
|
||||
customerService.deleteAllCustomers();
|
||||
storeService.deleteAllStores();
|
||||
@ -56,6 +63,7 @@ public class JpaTests {
|
||||
|
||||
@Test
|
||||
void testProduct(){
|
||||
productService.deleteAllProducts();
|
||||
orderService.deleteAllOrders();
|
||||
customerService.deleteAllCustomers();
|
||||
storeService.deleteAllStores();
|
||||
@ -63,13 +71,15 @@ public class JpaTests {
|
||||
Store store = storeService.addStore("example");
|
||||
Assertions.assertEquals("example", store.getStoreName());
|
||||
|
||||
Product p = storeService.addProduct(store.getId(), "product");
|
||||
Product p = productService.addProduct("product");
|
||||
Assertions.assertEquals("product", p.getName());
|
||||
|
||||
Assertions.assertEquals("product", storeService.getProduct(p.getId(), store.getId()).getName());
|
||||
Assertions.assertEquals("productUpd", storeService.updateProduct(store.getId(), p.getId(), "productUpd").getName());
|
||||
Assertions.assertEquals("productUpd", storeService.deleteProduct(store.getId(), p.getId()).getName());
|
||||
Assertions.assertEquals("product", storeService.addProduct(store.getId(), p.getId()).getName());
|
||||
Assertions.assertEquals("product", storeService.getProductFromStore(p.getId(), store.getId()).getName());
|
||||
Assertions.assertEquals("productUpd", productService.updateProduct(p.getId(), "productUpd").getName());
|
||||
Assertions.assertEquals("productUpd", storeService.deleteProductFromStore(store.getId(), p.getId()).getName());
|
||||
|
||||
productService.deleteAllProducts();
|
||||
orderService.deleteAllOrders();
|
||||
customerService.deleteAllCustomers();
|
||||
storeService.deleteAllStores();
|
||||
@ -77,6 +87,7 @@ public class JpaTests {
|
||||
|
||||
@Test
|
||||
void testOrder(){
|
||||
productService.deleteAllProducts();
|
||||
orderService.deleteAllOrders();
|
||||
customerService.deleteAllCustomers();
|
||||
storeService.deleteAllStores();
|
||||
@ -84,7 +95,8 @@ public class JpaTests {
|
||||
Store store = storeService.addStore("example");
|
||||
Assertions.assertEquals("example", store.getStoreName());
|
||||
|
||||
Product p = storeService.addProduct(store.getId(), "product");
|
||||
Product p = productService.addProduct("product");
|
||||
storeService.addProduct(store.getId(), p.getId());
|
||||
Assertions.assertEquals("product", p.getName());
|
||||
|
||||
Customer c = customerService.addCustomer("1", "2", "3");
|
||||
@ -97,6 +109,7 @@ public class JpaTests {
|
||||
Assertions.assertEquals("6", Integer.toString(orderService.updateOrder(order.getId(), 6).getQuantity()));
|
||||
Assertions.assertEquals("6", Integer.toString(orderService.deleteOrder(order.getId()).getQuantity()));
|
||||
|
||||
productService.deleteAllProducts();
|
||||
orderService.deleteAllOrders();
|
||||
customerService.deleteAllCustomers();
|
||||
storeService.deleteAllStores();
|
||||
|
Loading…
Reference in New Issue
Block a user