diff --git a/src/main/java/com/labwork1/app/student/model/Customer.java b/src/main/java/com/labwork1/app/student/model/Customer.java index 2c809d1..69d24be 100644 --- a/src/main/java/com/labwork1/app/student/model/Customer.java +++ b/src/main/java/com/labwork1/app/student/model/Customer.java @@ -1,8 +1,6 @@ package com.labwork1.app.student.model; import jakarta.persistence.*; -import org.hibernate.annotations.OnDelete; -import org.hibernate.annotations.OnDeleteAction; import java.util.ArrayList; import java.util.List; @@ -17,7 +15,7 @@ public class Customer { private String login; @Column private String password; - @OneToMany(fetch = FetchType.EAGER, mappedBy = "customer") + @OneToMany(fetch = FetchType.EAGER, mappedBy = "customer", cascade = CascadeType.REMOVE) private List orders; public Customer() { diff --git a/src/main/java/com/labwork1/app/student/model/Order.java b/src/main/java/com/labwork1/app/student/model/Order.java index c3c3b50..78f91c3 100644 --- a/src/main/java/com/labwork1/app/student/model/Order.java +++ b/src/main/java/com/labwork1/app/student/model/Order.java @@ -1,8 +1,6 @@ package com.labwork1.app.student.model; import jakarta.persistence.*; -import org.hibernate.annotations.OnDelete; -import org.hibernate.annotations.OnDeleteAction; import java.sql.Date; import java.util.ArrayList; @@ -39,6 +37,11 @@ public class Order { this.sessions.add(orderSession); } + public void removeSession(OrderSession orderSession){ + if (sessions.contains(orderSession)) + this.sessions.remove(orderSession); + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/src/main/java/com/labwork1/app/student/model/Session.java b/src/main/java/com/labwork1/app/student/model/Session.java index 427a556..a9cc944 100644 --- a/src/main/java/com/labwork1/app/student/model/Session.java +++ b/src/main/java/com/labwork1/app/student/model/Session.java @@ -48,6 +48,11 @@ public class Session { this.orders.add(orderSession); } + public void removeOrder(OrderSession orderSession){ + if (orders.contains(orderSession)) + this.orders.remove(orderSession); + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/src/main/java/com/labwork1/app/student/service/CustomerService.java b/src/main/java/com/labwork1/app/student/service/CustomerService.java index 32d8a43..f2488a6 100644 --- a/src/main/java/com/labwork1/app/student/service/CustomerService.java +++ b/src/main/java/com/labwork1/app/student/service/CustomerService.java @@ -3,6 +3,7 @@ package com.labwork1.app.student.service; import com.labwork1.app.student.model.Customer; import com.labwork1.app.student.model.Order; import com.labwork1.app.student.model.OrderSession; +import com.labwork1.app.student.model.Session; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; @@ -56,40 +57,22 @@ public class CustomerService { @Transactional public Customer deleteCustomer(Long id) { -// final Customer currentCustomer = findCustomer(id); -// final List currentCustomerOrders = currentCustomer.getOrders(); -// -// for (int i = 0; i < currentCustomerOrders.size(); i++) { -// final Order temp = em.find(Order.class, currentCustomerOrders.get(i).getId()); -// System.out.println(temp); -// -// List orderSessionList = em -// .createQuery("select p from OrderSession p where p.id.orderId = " + temp.getId(), -// OrderSession.class) -// .getResultList(); -// for (OrderSession x : orderSessionList) { -// System.out.println(x.getOrder()); -// em.remove(x); -// } -// temp.getSessions().clear(); -// } -// currentCustomer.getOrders().clear(); -// em.remove(currentCustomer); -// return currentCustomer; final Customer currentCustomer = findCustomer(id); - int size = currentCustomer.getOrders().size(); - for (int i = 0; i < size; i++) { - Order temp = currentCustomer.getOrders().get(0); - temp.getSessions().remove(temp); - temp.getCustomer().removeOrder(temp); - em.remove(temp); - } - int ordSize = currentCustomer.getOrders().size(); - for (int i = 0; i < ordSize; i++){ - OrderCustomers temp = currentCustomer.getOrders().get(0); - temp.getCustomer().removeOrder(temp); - temp.getOrder().removeCustomers(temp); - em.remove(temp); + final List currentCustomerOrders = currentCustomer.getOrders(); + + for (int i = 0; i < currentCustomerOrders.size(); i++) { + final Order currentOrder = em.find(Order.class, currentCustomerOrders.get(i).getId()); + List orderSessionList = em + .createQuery("select p from OrderSession p where p.id.orderId = " + id, OrderSession.class) + .getResultList(); + for (int j = 0; j < orderSessionList.size(); j++) { + final Session currentSession = orderSessionList.get(j).getSession(); + currentOrder.getSessions().remove(orderSessionList.get(j)); + currentSession.getOrders().remove(orderSessionList.get(j)); + em.remove(orderSessionList.get(j)); + em.merge(currentSession); + } + em.merge(currentOrder); } em.remove(currentCustomer); return currentCustomer; diff --git a/src/main/java/com/labwork1/app/student/service/OrderService.java b/src/main/java/com/labwork1/app/student/service/OrderService.java index 6998dcc..60190b3 100644 --- a/src/main/java/com/labwork1/app/student/service/OrderService.java +++ b/src/main/java/com/labwork1/app/student/service/OrderService.java @@ -32,7 +32,7 @@ public class OrderService { @Transactional public Order addSession(Long id, Long session, Integer count) { - if (session <= 0) { + if (session <= 0 || count <= 0) { throw new IllegalArgumentException("addOrder empty fields"); } final Order currentOrder = findOrder(id); diff --git a/src/main/java/com/labwork1/app/student/service/SessionService.java b/src/main/java/com/labwork1/app/student/service/SessionService.java index 73dd405..386fb9f 100644 --- a/src/main/java/com/labwork1/app/student/service/SessionService.java +++ b/src/main/java/com/labwork1/app/student/service/SessionService.java @@ -1,6 +1,7 @@ package com.labwork1.app.student.service; import com.labwork1.app.student.model.Cinema; +import com.labwork1.app.student.model.OrderSession; import com.labwork1.app.student.model.Session; import jakarta.persistence.EntityManager; import jakarta.persistence.EntityNotFoundException; @@ -56,6 +57,13 @@ public class SessionService { @Transactional public Session deleteSession(Long id) { final Session currentSession = findSession(id); + int size = currentSession.getOrders().size(); + for (int i = 0; i < size; i++) { + OrderSession temp = currentSession.getOrders().get(0); + temp.getSession().removeOrder(temp); + temp.getOrder().removeSession(temp); + em.remove(temp); + } em.remove(currentSession); return currentSession; } diff --git a/src/test/java/com/labwork1/app/JpaCustomerTests.java b/src/test/java/com/labwork1/app/JpaCustomerTests.java index c3bc791..76ac6c5 100644 --- a/src/test/java/com/labwork1/app/JpaCustomerTests.java +++ b/src/test/java/com/labwork1/app/JpaCustomerTests.java @@ -40,12 +40,12 @@ public class JpaCustomerTests { // 2 кино final Cinema cinema1 = cinemaService.addCinema("Меню"); final Cinema cinema2 = cinemaService.addCinema("Аватар"); - // 2 билета + // 2 сеанса final Session session1 = sessionService.addSession(300.0, new Timestamp(System.currentTimeMillis()), cinema1.getId()); final Session session2 = sessionService.addSession( 200.0, new Timestamp(System.currentTimeMillis()), cinema1.getId()); - // 2 билета у 1 кино + // проверка 2 сеанса у 1 кино Assertions.assertEquals(cinemaService .findCinema(cinema1.getId()).getSessions().size(), 2); // 1 покупатель @@ -55,6 +55,7 @@ public class JpaCustomerTests { final Order order1 = orderService.findOrder(order0.getId()); Assertions.assertEquals(order0, order1); + // у клиента точно есть заказ? Assertions.assertEquals(customerService .findCustomer(customer1.getId()).getOrders().size(), 1); // 0 заказов @@ -62,26 +63,35 @@ public class JpaCustomerTests { Assertions.assertThrows(EntityNotFoundException.class, () -> orderService.findOrder(-1L)); // 2 покупателя final Customer customer2 = customerService.addCustomer("Иннокентий", "Иванов"); - // 3 билета + // 3 сеанса final Session session3 = sessionService.addSession(300.0, new Timestamp(System.currentTimeMillis()), cinema2.getId()); // 1 заказ final Order order2 = orderService .addOrder(customerService.findCustomer(customer2.getId())); - // у заказа 2 билета + // у заказа 2 сеанса orderService.addSession(order2.getId(), session1.getId(), 2); orderService.addSession(order2.getId(), session2.getId(), 3); - // у заказа 1 билет + // у заказа 1 сеанс orderService.deleteSessionInOrder(order2.getId(), session2.getId()); + // у заказа 0 сеансов + // осталось 2 сеанса + sessionService.deleteSession(session1.getId()); + Assertions.assertEquals(sessionService.findAllSessions().size(), 2); Assertions.assertEquals(orderService - .findOrder(order2.getId()).getSessions().size(), 1); + .findOrder(order2.getId()).getSessions().size(), 0); // 2-ой покупатель удален - // 0 заказов + // 0 заказов после его удаления + Assertions.assertEquals(orderService.findAllOrders().size(), 1); customerService.deleteCustomer(customer2.getId()); -// Assertions.assertThrows(EntityNotFoundException.class, () -> customerService.findCustomer(customer2.getId())); -// Assertions.assertThrows(EntityNotFoundException.class, () -> orderService.findOrder(order2.getId())); -// Assertions.assertEquals(orderService.findAllOrders().size(), 0); + + Assertions.assertThrows(EntityNotFoundException.class, () -> customerService.findCustomer(customer2.getId())); + Assertions.assertThrows(EntityNotFoundException.class, () -> orderService.findOrder(order2.getId())); + Assertions.assertEquals(orderService.findAllOrders().size(), 0); + + Assertions.assertEquals(sessionService.findSession(session3.getId()), session3); + cinemaService.deleteCinema(cinema2.getId()); } /*@Test()