Explorar el Código

deleteDelivery method fixed

wpfat23-5 hace 2 años
padre
commit
070798c331

+ 16 - 6
src/main/java/com/deliveryproject/easydelivery/DeliveryController.java

@@ -1,5 +1,7 @@
 package com.deliveryproject.easydelivery;
 
+import com.deliveryproject.easydelivery.Models.AppUser;
+import com.deliveryproject.easydelivery.Repository.AppUserRepository;
 import com.deliveryproject.easydelivery.Repository.DeliveryRepository;
 import com.deliveryproject.easydelivery.Models.Delivery;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -15,6 +17,9 @@ public class DeliveryController {
     @Autowired
     private DeliveryRepository deliveryRepository;
 
+    @Autowired
+    private AppUserRepository appUserRepository;
+
     @GetMapping
     public ResponseEntity<List<Delivery>> getAllDeliveries() {
         List<Delivery> deliveries = deliveryRepository.findAll();
@@ -55,12 +60,17 @@ public class DeliveryController {
 
     @DeleteMapping("/{id}")
     public ResponseEntity<Void> deleteDelivery(@PathVariable Long id) {
-        Optional<Delivery> optionalDelivery = deliveryRepository.findById(id);
-        if (optionalDelivery.isPresent()) {
-            deliveryRepository.delete(optionalDelivery.get());
-            return ResponseEntity.noContent().build();
-        } else {
-            return ResponseEntity.notFound().build();
+        Delivery delivery = deliveryRepository.findById(id).orElse(null);
+        AppUser user = appUserRepository.findByDeliveriesContaining(delivery);
+        if (user != null) {
+            user.getDeliveries().remove(delivery);
+            appUserRepository.save(user);
         }
+
+        // Finally, delete the delivery itself
+        assert delivery != null;
+        deliveryRepository.delete(delivery);
+        return null;
     }
+
 }

+ 4 - 2
src/main/java/com/deliveryproject/easydelivery/Models/AppUser.java

@@ -1,4 +1,7 @@
 package com.deliveryproject.easydelivery.Models;
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
+
 import javax.persistence.*;
 import java.util.List;
 
@@ -13,8 +16,7 @@ public class AppUser {
 
     @Column(name = "name", nullable = false, unique = true)
     private String name;
-
-    @OneToMany(fetch = FetchType.EAGER, cascade=CascadeType.ALL)
+    @OneToMany(fetch = FetchType.EAGER, cascade=CascadeType.ALL, orphanRemoval = true)
     private List<Delivery> deliveries;
 
     public Long getId() {

+ 4 - 1
src/main/java/com/deliveryproject/easydelivery/Models/Delivery.java

@@ -1,4 +1,7 @@
 package com.deliveryproject.easydelivery.Models;
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
+
 import javax.persistence.*;
 import java.time.LocalDateTime;
 import java.util.List;
@@ -21,7 +24,7 @@ public class Delivery {
     @Column(name = "delivery_time", nullable = false)
     private LocalDateTime deliveryTime;
 
-    @OneToMany(fetch = FetchType.EAGER, cascade=CascadeType.ALL)
+    @OneToMany(fetch = FetchType.EAGER, cascade=CascadeType.ALL, orphanRemoval = true)
     private List<Packet> packets;
     // constructors, getters and setters
 

+ 3 - 0
src/main/java/com/deliveryproject/easydelivery/Repository/AppUserRepository.java

@@ -1,6 +1,7 @@
 package com.deliveryproject.easydelivery.Repository;
 
 import com.deliveryproject.easydelivery.Models.AppUser;
+import com.deliveryproject.easydelivery.Models.Delivery;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
@@ -9,5 +10,7 @@ import java.util.Optional;
 @Repository
 public interface AppUserRepository extends JpaRepository<AppUser, Long> {
     Optional<AppUser> findByName(String name);
+
+    AppUser findByDeliveriesContaining(Delivery delivery);
     // You can add custom query methods for specific database operations related to the User entity if needed
 }