diff --git a/pom.xml b/pom.xml
index 8944b776b5546425b0572f64588f169e57d9cdc9..f676de058c4adbbe3345246460cf29092b4bf0bb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -89,6 +89,8 @@
         </dependency>
 
 
+
+
     </dependencies>
 
     <build>
diff --git a/src/main/java/com/example/gestionstagesbackend/controllers/CandidacyController.java b/src/main/java/com/example/gestionstagesbackend/controllers/CandidacyController.java
index 9b9678eb3a74dc4fcc5187caa6945e20b8369fdb..807aacdd223e0d0bebbb654e4a9da7242de93233 100644
--- a/src/main/java/com/example/gestionstagesbackend/controllers/CandidacyController.java
+++ b/src/main/java/com/example/gestionstagesbackend/controllers/CandidacyController.java
@@ -76,10 +76,17 @@ public class CandidacyController {
 
     @GetMapping("/{id}")
     public ResponseEntity<Candidacy> getCandidacyById(@PathVariable Long id) {
-        return candidacyService.getCandidacyById(id)
-                .map(ResponseEntity::ok)
-                .orElse(ResponseEntity.notFound().build());
+        Optional<Candidacy> optionalCandidacy = candidacyService.getCandidacyById(id);
+
+        if (optionalCandidacy.isPresent()) {
+            Candidacy candidacy = optionalCandidacy.get();
+            candidacy.getStage().getId(); // Ensure Stage ID is included
+            return ResponseEntity.ok(candidacy);
+        } else {
+            return ResponseEntity.notFound().build();
+        }
     }
+
     @DeleteMapping("/{id}")
     public ResponseEntity<Void> deleteCandidacy(@PathVariable Long id) {
         if (!candidacyService.existsById(id)) {
diff --git a/src/main/java/com/example/gestionstagesbackend/controllers/EnterpriseController.java b/src/main/java/com/example/gestionstagesbackend/controllers/EnterpriseController.java
index 689fb8bfc41de99f8b0a727155a21de23a8d795a..4ac9c60f30f4b742c52167c60afef09bb3177092 100644
--- a/src/main/java/com/example/gestionstagesbackend/controllers/EnterpriseController.java
+++ b/src/main/java/com/example/gestionstagesbackend/controllers/EnterpriseController.java
@@ -6,6 +6,7 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Optional;
 
 @RestController
 @RequestMapping("/api/enterprises")
@@ -49,4 +50,21 @@ public class EnterpriseController {
         enterpriseService.deleteEnterprise(id);
         return ResponseEntity.noContent().build();
     }
+
+    @PutMapping("/{id}")
+    public ResponseEntity<?> updateEnterprise(@PathVariable Long id, @RequestBody Enterprise updatedEnterprise) {
+        Optional<Enterprise> optionalEnterprise = enterpriseService.getEnterpriseById(id);
+
+        if (optionalEnterprise.isPresent()) {
+            Enterprise existingEnterprise = optionalEnterprise.get();
+            existingEnterprise.setName(updatedEnterprise.getName());
+            existingEnterprise.setAddress(updatedEnterprise.getAddress());
+
+            Enterprise savedEnterprise = enterpriseService.saveEnterprise(existingEnterprise);
+            return ResponseEntity.ok(savedEnterprise);
+        } else {
+            return ResponseEntity.notFound().build();
+        }
+    }
+
 }
diff --git a/src/main/java/com/example/gestionstagesbackend/controllers/StageController.java b/src/main/java/com/example/gestionstagesbackend/controllers/StageController.java
index 97077d55be7352937eed785f1c3138b60fdc7218..a3155a8629c3c5589d28369737bf0c740118e015 100644
--- a/src/main/java/com/example/gestionstagesbackend/controllers/StageController.java
+++ b/src/main/java/com/example/gestionstagesbackend/controllers/StageController.java
@@ -49,6 +49,20 @@ public class StageController {
     public ResponseEntity<List<Stage>> getAllStages() {
         return ResponseEntity.ok(stageService.getAllStages());
     }
+    @GetMapping("/{id}")
+    public ResponseEntity<Stage> getStageById(@PathVariable Long id) {
+        Optional<Stage> optionalStage = stageService.getStageById(id);
+
+        if (optionalStage.isPresent()) {
+            Stage stage = optionalStage.get();
+            stage.getEnterprise().getId(); // Ensure Enterprise ID is included
+            return ResponseEntity.ok(stage);
+        } else {
+            return ResponseEntity.notFound().build();
+        }
+    }
+
+
     @PutMapping("/{id}")
     public ResponseEntity<?> updateStage(@PathVariable Long id, @RequestBody Stage updatedStage) {
         Optional<Stage> optionalStage = stageService.getStageById(id);
@@ -72,5 +86,17 @@ public class StageController {
             return ResponseEntity.notFound().build();
         }
     }
+    @DeleteMapping("/{id}")
+    public ResponseEntity<?> deleteStage(@PathVariable Long id) {
+        Optional<Stage> optionalStage = stageService.getStageById(id);
+
+        if (optionalStage.isPresent()) {
+            stageService.deleteStage(id);
+            return ResponseEntity.noContent().build(); // HTTP 204 No Content (successful deletion)
+        } else {
+            return ResponseEntity.notFound().build(); // HTTP 404 Not Found if the stage doesn't exist
+        }
+    }
+
 
 }
diff --git a/src/main/java/com/example/gestionstagesbackend/controllers/StudentController.java b/src/main/java/com/example/gestionstagesbackend/controllers/StudentController.java
index 5e34a73754082926d6ae24d2a87a2c0dea00709b..f07a8ce0fc206eea0981b8ea953d8bcf39a51276 100644
--- a/src/main/java/com/example/gestionstagesbackend/controllers/StudentController.java
+++ b/src/main/java/com/example/gestionstagesbackend/controllers/StudentController.java
@@ -40,10 +40,34 @@ public class StudentController {
                 .orElse(ResponseEntity.notFound().build());
     }
 
-    // endpoint pour recherche de candidacy par student
+    // Endpoint to get all candidacies of a student
     @GetMapping("/{id}/candidacies")
     public ResponseEntity<List<Candidacy>> getStudentCandidacies(@PathVariable Long id) {
         List<Candidacy> candidacies = candidacyService.getCandidaciesByStudentId(id);
         return ResponseEntity.ok(candidacies);
     }
+
+    // ✅ PUT - Update student by ID
+    @PutMapping("/{id}")
+    public ResponseEntity<Student> updateStudent(@PathVariable Long id, @RequestBody Student updatedStudent) {
+        Optional<Student> optionalStudent = studentService.getStudentById(id);
+
+        if (optionalStudent.isPresent()) {
+            Student existingStudent = optionalStudent.get();
+            existingStudent.setFirstname(updatedStudent.getFirstname());
+            existingStudent.setLastname(updatedStudent.getLastname());
+
+            Student savedStudent = studentService.saveStudent(existingStudent);
+            return ResponseEntity.ok(savedStudent);
+        } else {
+            return ResponseEntity.notFound().build();
+        }
+    }
+
+    // ✅ DELETE - Remove student by ID
+    @DeleteMapping("/{id}")
+    public ResponseEntity<Void> deleteStudent(@PathVariable Long id) {
+        studentService.deleteStudent(id);
+        return ResponseEntity.noContent().build();
+    }
 }
diff --git a/src/main/java/com/example/gestionstagesbackend/controllers/UnivSupervisorController.java b/src/main/java/com/example/gestionstagesbackend/controllers/UnivSupervisorController.java
index 51f19a62bc4e0da2623fea5d13b23e9711cba612..186c6e071ba0027787e0641c172142708c9dc5bf 100644
--- a/src/main/java/com/example/gestionstagesbackend/controllers/UnivSupervisorController.java
+++ b/src/main/java/com/example/gestionstagesbackend/controllers/UnivSupervisorController.java
@@ -35,4 +35,27 @@ public class UnivSupervisorController {
                 .map(ResponseEntity::ok)
                 .orElse(ResponseEntity.notFound().build());
     }
+
+    // ✅ PUT - Update UnivSupervisor by ID
+    @PutMapping("/{id}")
+    public ResponseEntity<UnivSupervisor> updateUnivSupervisor(@PathVariable Long id, @RequestBody UnivSupervisor updatedSupervisor) {
+        Optional<UnivSupervisor> optionalSupervisor = univSupervisorService.getUnivSupervisorById(id);
+
+        if (optionalSupervisor.isPresent()) {
+            UnivSupervisor existingSupervisor = optionalSupervisor.get();
+            existingSupervisor.setName(updatedSupervisor.getName());
+
+            UnivSupervisor savedSupervisor = univSupervisorService.saveUnivSupervisor(existingSupervisor);
+            return ResponseEntity.ok(savedSupervisor);
+        } else {
+            return ResponseEntity.notFound().build();
+        }
+    }
+
+    // ✅ DELETE - Remove UnivSupervisor by ID
+    @DeleteMapping("/{id}")
+    public ResponseEntity<Void> deleteUnivSupervisor(@PathVariable Long id) {
+        univSupervisorService.deleteUnivSupervisor(id);
+        return ResponseEntity.noContent().build();
+    }
 }
diff --git a/src/main/java/com/example/gestionstagesbackend/model/Candidacy.java b/src/main/java/com/example/gestionstagesbackend/model/Candidacy.java
index 69b9210e2830b4420944bac0a500693b787b096b..4bd2a554db955e36ecce11f8e27822f8c65e4c32 100644
--- a/src/main/java/com/example/gestionstagesbackend/model/Candidacy.java
+++ b/src/main/java/com/example/gestionstagesbackend/model/Candidacy.java
@@ -16,9 +16,11 @@ public class Candidacy {
     private Student student;
 
     @ManyToOne
-    @JoinColumn(name = "stage_id")
-    @JsonBackReference
-    private Stage stage; // suppression de @JsonIgnoreProperties pour inclure Stage in response
+    @JoinColumn(name = "stage_id", nullable = false)
+    @JsonIgnoreProperties({"candidacies", "enterprise"}) // Ensures that Candidacy includes Stage but avoids loops
+    private Stage stage;
+
+    // suppression de @JsonIgnoreProperties pour inclure Stage in response
 
     @ManyToOne
     @JoinColumn(name = "univ_supervisor_id")
diff --git a/src/main/java/com/example/gestionstagesbackend/model/Enterprise.java b/src/main/java/com/example/gestionstagesbackend/model/Enterprise.java
index 8734c6f0b27a94e6a3e5dd596c945fa16fd20325..4f5f64942bd8c53b90c0f77ddd7b2732adb09b4b 100644
--- a/src/main/java/com/example/gestionstagesbackend/model/Enterprise.java
+++ b/src/main/java/com/example/gestionstagesbackend/model/Enterprise.java
@@ -1,5 +1,6 @@
 package com.example.gestionstagesbackend.model;
 
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import jakarta.persistence.*;
 import java.util.List;
 import com.fasterxml.jackson.annotation.JsonManagedReference;
@@ -13,9 +14,10 @@ public class Enterprise {
     private String address;
 
     @OneToMany(mappedBy = "enterprise", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
-    @JsonManagedReference //  as the parent side
+    //@JsonManagedReference // Ensures that stages are included in Enterprise JSON responses
     private List<Stage> stages;
 
+
     public Enterprise() {}
 
     public Enterprise(String name, String address) {
diff --git a/src/main/java/com/example/gestionstagesbackend/model/Stage.java b/src/main/java/com/example/gestionstagesbackend/model/Stage.java
index ce91ccb37698f43ddc45c552b3f38a8f72a09f16..6ee45732aed26c781854057b2a47133d1fc1138d 100644
--- a/src/main/java/com/example/gestionstagesbackend/model/Stage.java
+++ b/src/main/java/com/example/gestionstagesbackend/model/Stage.java
@@ -1,6 +1,7 @@
 package com.example.gestionstagesbackend.model;
 
 import com.fasterxml.jackson.annotation.JsonBackReference;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonManagedReference;
 import jakarta.persistence.*;
 import java.util.List;
@@ -15,13 +16,15 @@ public class Stage {
 
     @ManyToOne
     @JoinColumn(name = "enterprise_id", nullable = false)
-    @JsonBackReference // Prevents infinite recursion in JSON serialization
+    @JsonIgnoreProperties({"stages"}) // Prevents infinite loops but keeps enterprise data in JSON
     private Enterprise enterprise;
 
+
     @OneToMany(mappedBy = "stage", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
-    @JsonManagedReference // ✅ Allows Candidacies to appear in Stage responses
+    //@JsonManagedReference
     private List<Candidacy> candidacies;
 
+
     public Stage() {}
 
     public Stage(String name, String description, Enterprise enterprise) {
diff --git a/src/main/java/com/example/gestionstagesbackend/repositories/StageRepository.java b/src/main/java/com/example/gestionstagesbackend/repositories/StageRepository.java
index ee80a41da78ab9022109eff16c782d5eb396e99f..50f435737435892c21857d285693c3cfefae0096 100644
--- a/src/main/java/com/example/gestionstagesbackend/repositories/StageRepository.java
+++ b/src/main/java/com/example/gestionstagesbackend/repositories/StageRepository.java
@@ -3,6 +3,8 @@ package com.example.gestionstagesbackend.repositories;
 import com.example.gestionstagesbackend.model.Stage;
 import org.springframework.data.jpa.repository.EntityGraph;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
 import java.util.Optional;
@@ -12,4 +14,7 @@ public interface StageRepository extends JpaRepository<Stage, Long> {
 
     @EntityGraph(attributePaths = {"enterprise"}) // Ensures Enterprise is fetched
     Optional<Stage> findById(Long id);
+    @Query("SELECT s FROM Stage s LEFT JOIN FETCH s.enterprise WHERE s.id = :id")
+    Optional<Stage> findByIdWithEnterprise(@Param("id") Long id);
+
 }
diff --git a/src/main/java/com/example/gestionstagesbackend/services/EnterpriseService.java b/src/main/java/com/example/gestionstagesbackend/services/EnterpriseService.java
index a71471c0166c28a4e27252abfa336a4d5fa8a185..ab586ba01164dcb3bb7358ccda58b451582b3f46 100644
--- a/src/main/java/com/example/gestionstagesbackend/services/EnterpriseService.java
+++ b/src/main/java/com/example/gestionstagesbackend/services/EnterpriseService.java
@@ -16,7 +16,7 @@ public class EnterpriseService {
     }
 
     public Enterprise saveEnterprise(Enterprise enterprise) {
-        System.out.println("Saving enterprise: " + enterprise.getName() + ", " + enterprise.getAddress());
+        //System.out.println("Saving enterprise: " + enterprise.getName() + ", " + enterprise.getAddress());
 
         // If stages exist, set their enterprise reference correctly
         if (enterprise.getStages() != null && !enterprise.getStages().isEmpty()) {
diff --git a/src/main/java/com/example/gestionstagesbackend/services/StageService.java b/src/main/java/com/example/gestionstagesbackend/services/StageService.java
index 36d31ff4a821bb5822e9a34d89a12339992efee7..007eeeb14b1df949a09d6f5c7be74bb6568c205c 100644
--- a/src/main/java/com/example/gestionstagesbackend/services/StageService.java
+++ b/src/main/java/com/example/gestionstagesbackend/services/StageService.java
@@ -2,7 +2,9 @@ package com.example.gestionstagesbackend.services;
 
 import com.example.gestionstagesbackend.model.Stage;
 import com.example.gestionstagesbackend.repositories.StageRepository;
+import org.hibernate.Hibernate;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 import java.util.Optional;
@@ -24,6 +26,12 @@ public class StageService {
     }
 
     public Optional<Stage> getStageById(Long id) {
-        return stageRepository.findById(id);
+        return stageRepository.findByIdWithEnterprise(id);
     }
+
+
+    public void deleteStage(Long id) {
+        stageRepository.deleteById(id);
+    }
+
 }
diff --git a/src/main/java/com/example/gestionstagesbackend/services/StudentService.java b/src/main/java/com/example/gestionstagesbackend/services/StudentService.java
index 6c81c6909d27a21ad9e811296b1710e0855065f4..2e13e2d6bb77e992abe523e245a235caf4002246 100644
--- a/src/main/java/com/example/gestionstagesbackend/services/StudentService.java
+++ b/src/main/java/com/example/gestionstagesbackend/services/StudentService.java
@@ -26,4 +26,12 @@ public class StudentService {
     public Optional<Student> getStudentById(Long id) {
         return studentRepository.findById(id);
     }
+
+    public void deleteStudent(Long id) {
+        if (studentRepository.existsById(id)) {
+            studentRepository.deleteById(id);
+        } else {
+            throw new IllegalArgumentException("Student with ID " + id + " does not exist.");
+        }
+    }
 }