From 40700f3623132583285a869b67d8c1a8f9c476dd Mon Sep 17 00:00:00 2001
From: fatima ezzahra majidi <fatima-ezzahra.majidi.etu@univ-lille.fr>
Date: Sun, 2 Mar 2025 16:43:25 +0000
Subject: [PATCH] =?UTF-8?q?Lier=20les=20services=20l'un=20=C3=A0=20l'autre?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../controllers/CandidacyController.java      | 75 ++++++++++++++----
 .../controllers/EnterpriseController.java     | 30 ++++----
 .../controllers/StageController.java          | 70 +++++++++++++++++
 .../controllers/StudentController.java        | 43 ++++++-----
 .../controllers/UnivSupervisorController.java | 38 +++++++++
 .../gestionstagesbackend/model/Candidacy.java | 77 ++++++-------------
 .../model/Enterprise.java                     | 49 +++++++++---
 .../gestionstagesbackend/model/Stage.java     |  7 +-
 .../gestionstagesbackend/model/Student.java   | 38 ++++++---
 .../model/UnivSupervisor.java                 | 35 +++------
 .../repositories/CandidacyRepository.java     | 15 +++-
 .../repositories/StageRepository.java         | 10 +++
 .../services/CandidacyService.java            | 10 ++-
 .../services/EnterpriseService.java           | 13 ++--
 .../services/StageService.java                | 29 +++++++
 .../services/StudentService.java              | 21 +----
 .../services/UnivSupervisorService.java       | 11 ++-
 17 files changed, 382 insertions(+), 189 deletions(-)
 create mode 100644 src/main/java/com/example/gestionstagesbackend/controllers/StageController.java
 create mode 100644 src/main/java/com/example/gestionstagesbackend/controllers/UnivSupervisorController.java
 create mode 100644 src/main/java/com/example/gestionstagesbackend/repositories/StageRepository.java
 create mode 100644 src/main/java/com/example/gestionstagesbackend/services/StageService.java

diff --git a/src/main/java/com/example/gestionstagesbackend/controllers/CandidacyController.java b/src/main/java/com/example/gestionstagesbackend/controllers/CandidacyController.java
index 6861e1d..2ae6084 100644
--- a/src/main/java/com/example/gestionstagesbackend/controllers/CandidacyController.java
+++ b/src/main/java/com/example/gestionstagesbackend/controllers/CandidacyController.java
@@ -1,9 +1,14 @@
 package com.example.gestionstagesbackend.controllers;
 
-
-
 import com.example.gestionstagesbackend.model.Candidacy;
+import com.example.gestionstagesbackend.model.Student;
+import com.example.gestionstagesbackend.model.Stage;
+import com.example.gestionstagesbackend.model.UnivSupervisor;
 import com.example.gestionstagesbackend.services.CandidacyService;
+import com.example.gestionstagesbackend.services.StudentService;
+import com.example.gestionstagesbackend.services.StageService;
+import com.example.gestionstagesbackend.services.UnivSupervisorService;
+import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
@@ -11,30 +16,68 @@ import java.util.Optional;
 
 @RestController
 @RequestMapping("/api/candidacies")
+@CrossOrigin(origins = "*")
 public class CandidacyController {
     private final CandidacyService candidacyService;
+    private final StudentService studentService;
+    private final StageService stageService;
+    private final UnivSupervisorService univSupervisorService;
 
-    public CandidacyController(CandidacyService candidacyService) {
+    public CandidacyController(CandidacyService candidacyService, StudentService studentService,
+                               StageService stageService, UnivSupervisorService univSupervisorService) {
         this.candidacyService = candidacyService;
+        this.studentService = studentService;
+        this.stageService = stageService;
+        this.univSupervisorService = univSupervisorService;
     }
 
-    @GetMapping
-    public List<Candidacy> getAllCandidacies() {
-        return candidacyService.getAllCandidacies();
-    }
+    @PostMapping
+    public ResponseEntity<?> createCandidacy(@RequestBody Candidacy candidacy) {
+        if (candidacy.getStudent() == null || candidacy.getStudent().getId() == null) {
+            return ResponseEntity.badRequest().body("Student ID is required");
+        }
+        if (candidacy.getStage() == null || candidacy.getStage().getId() == null) {
+            return ResponseEntity.badRequest().body("Stage ID is required");
+        }
+        if (candidacy.getUnivSupervisor() != null && candidacy.getUnivSupervisor().getId() == null) {
+            return ResponseEntity.badRequest().body("UnivSupervisor ID is invalid");
+        }
 
-    @GetMapping("/{id}")
-    public Optional<Candidacy> getCandidacyById(@PathVariable Long id) {
-        return candidacyService.getCandidacyById(id);
+        Optional<Student> student = studentService.getStudentById(candidacy.getStudent().getId());
+        Optional<Stage> stage = stageService.getStageById(candidacy.getStage().getId());
+        Optional<UnivSupervisor> univSupervisor = Optional.empty();
+
+        if (candidacy.getUnivSupervisor() != null) {
+            univSupervisor = univSupervisorService.getUnivSupervisorById(candidacy.getUnivSupervisor().getId());
+            if (univSupervisor.isEmpty()) {
+                return ResponseEntity.badRequest().body("UnivSupervisor not found");
+            }
+        }
+
+        if (student.isEmpty()) {
+            return ResponseEntity.badRequest().body("Student not found");
+        }
+        if (stage.isEmpty()) {
+            return ResponseEntity.badRequest().body("Stage not found");
+        }
+
+        candidacy.setStudent(student.get());
+        candidacy.setStage(stage.get());
+        univSupervisor.ifPresent(candidacy::setUnivSupervisor);
+
+        Candidacy savedCandidacy = candidacyService.saveCandidacy(candidacy);
+        return ResponseEntity.ok(savedCandidacy);
     }
 
-    @PostMapping
-    public Candidacy saveCandidacy(@RequestBody Candidacy candidacy) {
-        return candidacyService.saveCandidacy(candidacy);
+    @GetMapping
+    public ResponseEntity<List<Candidacy>> getAllCandidacies() {
+        return ResponseEntity.ok(candidacyService.getAllCandidacies());
     }
 
-    @DeleteMapping("/{id}")
-    public void deleteCandidacy(@PathVariable Long id) {
-        candidacyService.deleteCandidacy(id);
+    @GetMapping("/{id}")
+    public ResponseEntity<Candidacy> getCandidacyById(@PathVariable Long id) {
+        return candidacyService.getCandidacyById(id)
+                .map(ResponseEntity::ok)
+                .orElse(ResponseEntity.notFound().build());
     }
 }
diff --git a/src/main/java/com/example/gestionstagesbackend/controllers/EnterpriseController.java b/src/main/java/com/example/gestionstagesbackend/controllers/EnterpriseController.java
index aa09bef..2f789a6 100644
--- a/src/main/java/com/example/gestionstagesbackend/controllers/EnterpriseController.java
+++ b/src/main/java/com/example/gestionstagesbackend/controllers/EnterpriseController.java
@@ -1,40 +1,40 @@
 package com.example.gestionstagesbackend.controllers;
 
 
-
 import com.example.gestionstagesbackend.model.Enterprise;
 import com.example.gestionstagesbackend.services.EnterpriseService;
+import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
-import java.util.Optional;
 
 @RestController
 @RequestMapping("/api/enterprises")
+@CrossOrigin(origins = "*") // Allow requests from all origins (for testing)
 public class EnterpriseController {
+
     private final EnterpriseService enterpriseService;
 
     public EnterpriseController(EnterpriseService enterpriseService) {
         this.enterpriseService = enterpriseService;
     }
 
-    @GetMapping
-    public List<Enterprise> getAllEnterprises() {
-        return enterpriseService.getAllEnterprises();
+    @PostMapping
+    public ResponseEntity<Enterprise> createEnterprise(@RequestBody Enterprise enterprise) {
+        Enterprise savedEnterprise = enterpriseService.saveEnterprise(enterprise);
+        return ResponseEntity.ok(savedEnterprise);
     }
 
-    @GetMapping("/{id}")
-    public Optional<Enterprise> getEnterpriseById(@PathVariable Long id) {
-        return enterpriseService.getEnterpriseById(id);
+    @GetMapping
+    public ResponseEntity<List<Enterprise>> getAllEnterprises() {
+        return ResponseEntity.ok(enterpriseService.getAllEnterprises());
     }
 
-    @PostMapping
-    public Enterprise saveEnterprise(@RequestBody Enterprise enterprise) {
-        return enterpriseService.saveEnterprise(enterprise);
+    @GetMapping("/{id}")
+    public ResponseEntity<Enterprise> getEnterpriseById(@PathVariable Long id) {
+        return enterpriseService.getEnterpriseById(id)
+                .map(ResponseEntity::ok)
+                .orElse(ResponseEntity.notFound().build());
     }
 
-    @DeleteMapping("/{id}")
-    public void deleteEnterprise(@PathVariable Long id) {
-        enterpriseService.deleteEnterprise(id);
-    }
 }
diff --git a/src/main/java/com/example/gestionstagesbackend/controllers/StageController.java b/src/main/java/com/example/gestionstagesbackend/controllers/StageController.java
new file mode 100644
index 0000000..3b78388
--- /dev/null
+++ b/src/main/java/com/example/gestionstagesbackend/controllers/StageController.java
@@ -0,0 +1,70 @@
+package com.example.gestionstagesbackend.controllers;
+
+import com.example.gestionstagesbackend.model.Stage;
+import com.example.gestionstagesbackend.model.Enterprise;
+import com.example.gestionstagesbackend.services.StageService;
+import com.example.gestionstagesbackend.services.EnterpriseService;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Optional;
+
+@RestController
+@RequestMapping("/api/stages")
+@CrossOrigin(origins = "*")
+public class StageController {
+    private final StageService stageService;
+    private final EnterpriseService enterpriseService;
+
+    public StageController(StageService stageService, EnterpriseService enterpriseService) {
+        this.stageService = stageService;
+        this.enterpriseService = enterpriseService;
+    }
+
+    @PostMapping
+    public ResponseEntity<?> createStage(@RequestBody Stage stage) {
+        if (stage.getEnterprise() == null || stage.getEnterprise().getId() == null) {
+            return ResponseEntity.badRequest().body("Enterprise ID is required");
+        }
+
+        Optional<Enterprise> enterprise = enterpriseService.getEnterpriseById(stage.getEnterprise().getId());
+
+        if (enterprise.isEmpty()) {
+            return ResponseEntity.badRequest().body("Enterprise not found");
+        }
+
+        stage.setEnterprise(enterprise.get());
+        Stage savedStage = stageService.saveStage(stage);
+        return ResponseEntity.ok(savedStage);
+    }
+
+    @GetMapping
+    public ResponseEntity<List<Stage>> getAllStages() {
+        return ResponseEntity.ok(stageService.getAllStages());
+    }
+    @PutMapping("/{id}")
+    public ResponseEntity<?> updateStage(@PathVariable Long id, @RequestBody Stage updatedStage) {
+        Optional<Stage> optionalStage = stageService.getStageById(id);
+
+        if (optionalStage.isPresent()) {
+            Stage existingStage = optionalStage.get();
+            existingStage.setName(updatedStage.getName());
+            existingStage.setDescription(updatedStage.getDescription());
+
+            if (updatedStage.getEnterprise() != null && updatedStage.getEnterprise().getId() != null) {
+                Optional<Enterprise> enterprise = enterpriseService.getEnterpriseById(updatedStage.getEnterprise().getId());
+                if (enterprise.isEmpty()) {
+                    return ResponseEntity.badRequest().body("Enterprise not found");
+                }
+                existingStage.setEnterprise(enterprise.get());
+            }
+
+            Stage savedStage = stageService.saveStage(existingStage);
+            return ResponseEntity.ok(savedStage);
+        } else {
+            return ResponseEntity.notFound().build();
+        }
+    }
+
+}
diff --git a/src/main/java/com/example/gestionstagesbackend/controllers/StudentController.java b/src/main/java/com/example/gestionstagesbackend/controllers/StudentController.java
index af79925..5e34a73 100644
--- a/src/main/java/com/example/gestionstagesbackend/controllers/StudentController.java
+++ b/src/main/java/com/example/gestionstagesbackend/controllers/StudentController.java
@@ -1,7 +1,10 @@
 package com.example.gestionstagesbackend.controllers;
 
+import com.example.gestionstagesbackend.model.Candidacy;
 import com.example.gestionstagesbackend.model.Student;
+import com.example.gestionstagesbackend.services.CandidacyService;
 import com.example.gestionstagesbackend.services.StudentService;
+import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
@@ -9,36 +12,38 @@ import java.util.Optional;
 
 @RestController
 @RequestMapping("/api/students")
+@CrossOrigin(origins = "*")
 public class StudentController {
-
     private final StudentService studentService;
+    private final CandidacyService candidacyService;
 
-    public StudentController(StudentService studentService) {
+    public StudentController(StudentService studentService, CandidacyService candidacyService) {
         this.studentService = studentService;
+        this.candidacyService = candidacyService;
     }
 
-    @GetMapping
-    public List<Student> getAllStudents() {
-        return studentService.getAllStudents();
-    }
-
-    @GetMapping("/{id}")
-    public Optional<Student> getStudentById(@PathVariable Long id) {
-        return studentService.getStudentById(id);
+    @PostMapping
+    public ResponseEntity<Student> createStudent(@RequestBody Student student) {
+        Student savedStudent = studentService.saveStudent(student);
+        return ResponseEntity.ok(savedStudent);
     }
 
-    @PostMapping
-    public Student saveStudent(@RequestBody Student student) {
-        return studentService.saveStudent(student);
+    @GetMapping
+    public ResponseEntity<List<Student>> getAllStudents() {
+        return ResponseEntity.ok(studentService.getAllStudents());
     }
 
-    @PutMapping("/{id}")
-    public Student updateStudent(@PathVariable Long id, @RequestBody Student studentDetails) {
-        return studentService.updateStudent(id, studentDetails);
+    @GetMapping("/{id}")
+    public ResponseEntity<Student> getStudentById(@PathVariable Long id) {
+        return studentService.getStudentById(id)
+                .map(ResponseEntity::ok)
+                .orElse(ResponseEntity.notFound().build());
     }
 
-    @DeleteMapping("/{id}")
-    public void deleteStudent(@PathVariable Long id) {
-        studentService.deleteStudent(id);
+    // endpoint pour recherche de candidacy par student
+    @GetMapping("/{id}/candidacies")
+    public ResponseEntity<List<Candidacy>> getStudentCandidacies(@PathVariable Long id) {
+        List<Candidacy> candidacies = candidacyService.getCandidaciesByStudentId(id);
+        return ResponseEntity.ok(candidacies);
     }
 }
diff --git a/src/main/java/com/example/gestionstagesbackend/controllers/UnivSupervisorController.java b/src/main/java/com/example/gestionstagesbackend/controllers/UnivSupervisorController.java
new file mode 100644
index 0000000..51f19a6
--- /dev/null
+++ b/src/main/java/com/example/gestionstagesbackend/controllers/UnivSupervisorController.java
@@ -0,0 +1,38 @@
+package com.example.gestionstagesbackend.controllers;
+
+import com.example.gestionstagesbackend.model.UnivSupervisor;
+import com.example.gestionstagesbackend.services.UnivSupervisorService;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Optional;
+
+@RestController
+@RequestMapping("/api/univsupervisors")
+@CrossOrigin(origins = "*")
+public class UnivSupervisorController {
+    private final UnivSupervisorService univSupervisorService;
+
+    public UnivSupervisorController(UnivSupervisorService univSupervisorService) {
+        this.univSupervisorService = univSupervisorService;
+    }
+
+    @PostMapping
+    public ResponseEntity<UnivSupervisor> createUnivSupervisor(@RequestBody UnivSupervisor univSupervisor) {
+        UnivSupervisor savedUnivSupervisor = univSupervisorService.saveUnivSupervisor(univSupervisor);
+        return ResponseEntity.ok(savedUnivSupervisor);
+    }
+
+    @GetMapping
+    public ResponseEntity<List<UnivSupervisor>> getAllUnivSupervisors() {
+        return ResponseEntity.ok(univSupervisorService.getAllUnivSupervisors());
+    }
+
+    @GetMapping("/{id}")
+    public ResponseEntity<UnivSupervisor> getUnivSupervisorById(@PathVariable Long id) {
+        return univSupervisorService.getUnivSupervisorById(id)
+                .map(ResponseEntity::ok)
+                .orElse(ResponseEntity.notFound().build());
+    }
+}
diff --git a/src/main/java/com/example/gestionstagesbackend/model/Candidacy.java b/src/main/java/com/example/gestionstagesbackend/model/Candidacy.java
index ea5f378..5304e92 100644
--- a/src/main/java/com/example/gestionstagesbackend/model/Candidacy.java
+++ b/src/main/java/com/example/gestionstagesbackend/model/Candidacy.java
@@ -1,8 +1,6 @@
 package com.example.gestionstagesbackend.model;
 
-
-import com.example.gestionstagesbackend.enums.AcceptedCandidacyStateKind;
-import com.example.gestionstagesbackend.enums.CandidacyRequestState;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import jakarta.persistence.*;
 
 @Entity
@@ -10,35 +8,28 @@ public class Candidacy {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
-    private String name;
-
-    @Enumerated(EnumType.STRING)
-    private CandidacyRequestState requestState;
-
-    @Enumerated(EnumType.STRING)
-    private AcceptedCandidacyStateKind acceptedCandidacyState;
-
-    @ManyToOne
-    private UnivSupervisor univSupervisor;
 
     @ManyToOne
+    @JoinColumn(name = "student_id")
+    @JsonIgnoreProperties({"candidacies"}) // Prevents infinite recursion when serializing
     private Student student;
 
     @ManyToOne
+    @JoinColumn(name = "stage_id")
+    @JsonIgnoreProperties({"candidacies"})
     private Stage stage;
 
-    public Candidacy(Long id, String name, CandidacyRequestState requestState, AcceptedCandidacyStateKind acceptedCandidacyState, UnivSupervisor univSupervisor, Student student, Stage stage) {
-        this.id = id;
-        this.name = name;
-        this.requestState = requestState;
-        this.acceptedCandidacyState = acceptedCandidacyState;
-        this.univSupervisor = univSupervisor;
-        this.student = student;
-        this.stage = stage;
-    }
+    @ManyToOne
+    @JoinColumn(name = "univ_supervisor_id")
+    @JsonIgnoreProperties({"supervisedStages"})
+    private UnivSupervisor univSupervisor;
 
-    public Candidacy() {
+    public Candidacy() {}
 
+    public Candidacy(Student student, Stage stage, UnivSupervisor univSupervisor) {
+        this.student = student;
+        this.stage = stage;
+        this.univSupervisor = univSupervisor;
     }
 
     public Long getId() {
@@ -49,38 +40,6 @@ public class Candidacy {
         this.id = id;
     }
 
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public CandidacyRequestState getRequestState() {
-        return requestState;
-    }
-
-    public void setRequestState(CandidacyRequestState requestState) {
-        this.requestState = requestState;
-    }
-
-    public AcceptedCandidacyStateKind getAcceptedCandidacyState() {
-        return acceptedCandidacyState;
-    }
-
-    public void setAcceptedCandidacyState(AcceptedCandidacyStateKind acceptedCandidacyState) {
-        this.acceptedCandidacyState = acceptedCandidacyState;
-    }
-
-    public UnivSupervisor getUnivSupervisor() {
-        return univSupervisor;
-    }
-
-    public void setUnivSupervisor(UnivSupervisor univSupervisor) {
-        this.univSupervisor = univSupervisor;
-    }
-
     public Student getStudent() {
         return student;
     }
@@ -96,4 +55,12 @@ public class Candidacy {
     public void setStage(Stage stage) {
         this.stage = stage;
     }
+
+    public UnivSupervisor getUnivSupervisor() {
+        return univSupervisor;
+    }
+
+    public void setUnivSupervisor(UnivSupervisor univSupervisor) {
+        this.univSupervisor = univSupervisor;
+    }
 }
diff --git a/src/main/java/com/example/gestionstagesbackend/model/Enterprise.java b/src/main/java/com/example/gestionstagesbackend/model/Enterprise.java
index 7aeb3f5..a6bc143 100644
--- a/src/main/java/com/example/gestionstagesbackend/model/Enterprise.java
+++ b/src/main/java/com/example/gestionstagesbackend/model/Enterprise.java
@@ -3,25 +3,50 @@ package com.example.gestionstagesbackend.model;
 import jakarta.persistence.*;
 
 
-import java.util.Set;
+
+import java.util.List;
 
 @Entity
+@Table(name = "enterprise")
 public class Enterprise {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
+
     private String name;
     private String address;
 
     @OneToMany(mappedBy = "enterprise", cascade = CascadeType.ALL)
-    private Set<Stage> stages;
-
-    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 String getAddress() { return address; }
-    public void setAddress(String address) { this.address = address; }
-    public Set<Stage> getStages() { return stages; }
-    public void setStages(Set<Stage> stages) { this.stages = stages; }
-}
\ No newline at end of file
+    private List<Stage> stages;
+
+    public Enterprise() {}
+
+    public Enterprise(String name, String address) {
+        this.name = name;
+        this.address = address;
+    }
+
+    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 String getAddress() {
+        return address;
+    }
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+}
diff --git a/src/main/java/com/example/gestionstagesbackend/model/Stage.java b/src/main/java/com/example/gestionstagesbackend/model/Stage.java
index 5155a7d..bc2c8b7 100644
--- a/src/main/java/com/example/gestionstagesbackend/model/Stage.java
+++ b/src/main/java/com/example/gestionstagesbackend/model/Stage.java
@@ -1,7 +1,7 @@
 package com.example.gestionstagesbackend.model;
 
-
 import jakarta.persistence.*;
+
 import java.util.List;
 
 @Entity
@@ -13,11 +13,14 @@ public class Stage {
     private String description;
 
     @ManyToOne
+    @JoinColumn(name = "enterprise_id", nullable = false)
     private Enterprise enterprise;
 
     @OneToMany(mappedBy = "stage", cascade = CascadeType.ALL)
     private List<Candidacy> candidacies;
 
+    public Stage() {}
+
     public Stage(Long id, String name, String description, Enterprise enterprise) {
         this.id = id;
         this.name = name;
@@ -25,8 +28,6 @@ public class Stage {
         this.enterprise = enterprise;
     }
 
-    public Stage() {}
-
     public Long getId() {
         return id;
     }
diff --git a/src/main/java/com/example/gestionstagesbackend/model/Student.java b/src/main/java/com/example/gestionstagesbackend/model/Student.java
index 949bb22..3c14cc0 100644
--- a/src/main/java/com/example/gestionstagesbackend/model/Student.java
+++ b/src/main/java/com/example/gestionstagesbackend/model/Student.java
@@ -1,6 +1,5 @@
 package com.example.gestionstagesbackend.model;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
 import jakarta.persistence.*;
 import java.util.List;
 
@@ -13,7 +12,6 @@ public class Student {
     private String lastname;
 
     @OneToMany(mappedBy = "student", cascade = CascadeType.ALL)
-    @JsonIgnore // Prevents infinite recursion when returning JSON
     private List<Candidacy> candidacies;
 
     public Student() {}
@@ -24,15 +22,35 @@ public class Student {
         this.lastname = lastname;
     }
 
-    public Long getId() { return id; }
-    public void setId(Long id) { this.id = id; }
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
 
-    public String getFirstname() { return firstname; }
-    public void setFirstname(String firstname) { this.firstname = firstname; }
+    public String getFirstname() {
+        return firstname;
+    }
 
-    public String getLastname() { return lastname; }
-    public void setLastname(String lastname) { this.lastname = lastname; }
+    public void setFirstname(String firstname) {
+        this.firstname = firstname;
+    }
 
-    public List<Candidacy> getCandidacies() { return candidacies; }
-    public void setCandidacies(List<Candidacy> candidacies) { this.candidacies = candidacies; }
+    public String getLastname() {
+        return lastname;
+    }
+
+    public void setLastname(String lastname) {
+        this.lastname = lastname;
+    }
+
+    public List<Candidacy> getCandidacies() {
+        return candidacies;
+    }
+
+    public void setCandidacies(List<Candidacy> candidacies) {
+        this.candidacies = candidacies;
+    }
 }
diff --git a/src/main/java/com/example/gestionstagesbackend/model/UnivSupervisor.java b/src/main/java/com/example/gestionstagesbackend/model/UnivSupervisor.java
index 1a9c4c2..d5d6417 100644
--- a/src/main/java/com/example/gestionstagesbackend/model/UnivSupervisor.java
+++ b/src/main/java/com/example/gestionstagesbackend/model/UnivSupervisor.java
@@ -1,6 +1,5 @@
 package com.example.gestionstagesbackend.model;
 
-
 import jakarta.persistence.*;
 import java.util.List;
 
@@ -9,21 +8,16 @@ public class UnivSupervisor {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
-    private String firstname;
-    private String lastname;
+    private String name;
 
     @OneToMany(mappedBy = "univSupervisor", cascade = CascadeType.ALL)
-    private List<Candidacy> supervisedStages;
-
-    public UnivSupervisor(Long id, String firstname, String lastname, List<Candidacy> supervisedStages) {
-        this.id = id;
-        this.firstname = firstname;
-        this.lastname = lastname;
-        this.supervisedStages = supervisedStages;
-    }
+    private List<Candidacy> supervisedStages;  // Correct naming
 
-    public UnivSupervisor() {
+    public UnivSupervisor() {}
 
+    public UnivSupervisor(Long id, String name) {
+        this.id = id;
+        this.name = name;
     }
 
     public Long getId() {
@@ -34,20 +28,12 @@ public class UnivSupervisor {
         this.id = id;
     }
 
-    public String getFirstname() {
-        return firstname;
-    }
-
-    public void setFirstname(String firstname) {
-        this.firstname = firstname;
-    }
-
-    public String getLastname() {
-        return lastname;
+    public String getName() {
+        return name;
     }
 
-    public void setLastname(String lastname) {
-        this.lastname = lastname;
+    public void setName(String name) {
+        this.name = name;
     }
 
     public List<Candidacy> getSupervisedStages() {
@@ -57,5 +43,4 @@ public class UnivSupervisor {
     public void setSupervisedStages(List<Candidacy> supervisedStages) {
         this.supervisedStages = supervisedStages;
     }
-    // Constructors, Getters, Setters
 }
diff --git a/src/main/java/com/example/gestionstagesbackend/repositories/CandidacyRepository.java b/src/main/java/com/example/gestionstagesbackend/repositories/CandidacyRepository.java
index 1f4a52a..e6654c1 100644
--- a/src/main/java/com/example/gestionstagesbackend/repositories/CandidacyRepository.java
+++ b/src/main/java/com/example/gestionstagesbackend/repositories/CandidacyRepository.java
@@ -1,8 +1,21 @@
 package com.example.gestionstagesbackend.repositories;
 
-
 import com.example.gestionstagesbackend.model.Candidacy;
+import org.springframework.data.jpa.repository.EntityGraph;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Optional;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 
+@Repository
 public interface CandidacyRepository extends JpaRepository<Candidacy, Long> {
+    @Query("SELECT c FROM Candidacy c JOIN FETCH c.student JOIN FETCH c.stage JOIN FETCH c.univSupervisor WHERE c.id = :id")
+    Optional<Candidacy> findByIdWithRelations(@Param("id") Long id);
+
+    @Query("SELECT c FROM Candidacy c JOIN FETCH c.student JOIN FETCH c.stage JOIN FETCH c.univSupervisor WHERE c.student.id = :studentId")
+    List<Candidacy> findByStudentId(@Param("studentId") Long studentId);
 }
+
diff --git a/src/main/java/com/example/gestionstagesbackend/repositories/StageRepository.java b/src/main/java/com/example/gestionstagesbackend/repositories/StageRepository.java
new file mode 100644
index 0000000..68d8833
--- /dev/null
+++ b/src/main/java/com/example/gestionstagesbackend/repositories/StageRepository.java
@@ -0,0 +1,10 @@
+package com.example.gestionstagesbackend.repositories;
+
+
+import com.example.gestionstagesbackend.model.Stage;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface StageRepository extends JpaRepository<Stage, Long> {
+}
diff --git a/src/main/java/com/example/gestionstagesbackend/services/CandidacyService.java b/src/main/java/com/example/gestionstagesbackend/services/CandidacyService.java
index b282408..174fd3e 100644
--- a/src/main/java/com/example/gestionstagesbackend/services/CandidacyService.java
+++ b/src/main/java/com/example/gestionstagesbackend/services/CandidacyService.java
@@ -1,10 +1,9 @@
 package com.example.gestionstagesbackend.services;
 
-
-
 import com.example.gestionstagesbackend.model.Candidacy;
 import com.example.gestionstagesbackend.repositories.CandidacyRepository;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import java.util.List;
 import java.util.Optional;
 
@@ -20,8 +19,9 @@ public class CandidacyService {
         return candidacyRepository.findAll();
     }
 
+    @Transactional(readOnly = true)
     public Optional<Candidacy> getCandidacyById(Long id) {
-        return candidacyRepository.findById(id);
+        return candidacyRepository.findByIdWithRelations(id);
     }
 
     public Candidacy saveCandidacy(Candidacy candidacy) {
@@ -31,4 +31,8 @@ public class CandidacyService {
     public void deleteCandidacy(Long id) {
         candidacyRepository.deleteById(id);
     }
+
+    public List<Candidacy> getCandidaciesByStudentId(Long studentId) {
+        return candidacyRepository.findByStudentId(studentId);
+    }
 }
diff --git a/src/main/java/com/example/gestionstagesbackend/services/EnterpriseService.java b/src/main/java/com/example/gestionstagesbackend/services/EnterpriseService.java
index a131399..eec1793 100644
--- a/src/main/java/com/example/gestionstagesbackend/services/EnterpriseService.java
+++ b/src/main/java/com/example/gestionstagesbackend/services/EnterpriseService.java
@@ -8,27 +8,26 @@ import org.springframework.stereotype.Service;
 import java.util.List;
 import java.util.Optional;
 
+
 @Service
 public class EnterpriseService {
+
     private final EnterpriseRepository enterpriseRepository;
 
     public EnterpriseService(EnterpriseRepository enterpriseRepository) {
         this.enterpriseRepository = enterpriseRepository;
     }
 
-    public List<Enterprise> getAllEnterprises() {
-        return enterpriseRepository.findAll();
+    public Enterprise saveEnterprise(Enterprise enterprise) {
+        return enterpriseRepository.save(enterprise);
     }
 
     public Optional<Enterprise> getEnterpriseById(Long id) {
         return enterpriseRepository.findById(id);
-    }
 
-    public Enterprise saveEnterprise(Enterprise enterprise) {
-        return enterpriseRepository.save(enterprise);
     }
 
-    public void deleteEnterprise(Long id) {
-        enterpriseRepository.deleteById(id);
+    public List<Enterprise> getAllEnterprises() {
+        return enterpriseRepository.findAll();
     }
 }
diff --git a/src/main/java/com/example/gestionstagesbackend/services/StageService.java b/src/main/java/com/example/gestionstagesbackend/services/StageService.java
new file mode 100644
index 0000000..36d31ff
--- /dev/null
+++ b/src/main/java/com/example/gestionstagesbackend/services/StageService.java
@@ -0,0 +1,29 @@
+package com.example.gestionstagesbackend.services;
+
+import com.example.gestionstagesbackend.model.Stage;
+import com.example.gestionstagesbackend.repositories.StageRepository;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Optional;
+
+@Service
+public class StageService {
+    private final StageRepository stageRepository;
+
+    public StageService(StageRepository stageRepository) {
+        this.stageRepository = stageRepository;
+    }
+
+    public Stage saveStage(Stage stage) {
+        return stageRepository.save(stage);
+    }
+
+    public List<Stage> getAllStages() {
+        return stageRepository.findAll();
+    }
+
+    public Optional<Stage> getStageById(Long id) {
+        return stageRepository.findById(id);
+    }
+}
diff --git a/src/main/java/com/example/gestionstagesbackend/services/StudentService.java b/src/main/java/com/example/gestionstagesbackend/services/StudentService.java
index 8d9c9ca..6c81c69 100644
--- a/src/main/java/com/example/gestionstagesbackend/services/StudentService.java
+++ b/src/main/java/com/example/gestionstagesbackend/services/StudentService.java
@@ -9,34 +9,21 @@ import java.util.Optional;
 
 @Service
 public class StudentService {
-
     private final StudentRepository studentRepository;
 
     public StudentService(StudentRepository studentRepository) {
         this.studentRepository = studentRepository;
     }
 
-    public List<Student> getAllStudents() {
-        return studentRepository.findAll();
-    }
-
-    public Optional<Student> getStudentById(Long id) {
-        return studentRepository.findById(id);
-    }
-
     public Student saveStudent(Student student) {
         return studentRepository.save(student);
     }
 
-    public Student updateStudent(Long id, Student studentDetails) {
-        return studentRepository.findById(id).map(student -> {
-            student.setFirstname(studentDetails.getFirstname());
-            student.setLastname(studentDetails.getLastname());
-            return studentRepository.save(student);
-        }).orElseThrow(() -> new RuntimeException("Student not found with id " + id));
+    public List<Student> getAllStudents() {
+        return studentRepository.findAll();
     }
 
-    public void deleteStudent(Long id) {
-        studentRepository.deleteById(id);
+    public Optional<Student> getStudentById(Long id) {
+        return studentRepository.findById(id);
     }
 }
diff --git a/src/main/java/com/example/gestionstagesbackend/services/UnivSupervisorService.java b/src/main/java/com/example/gestionstagesbackend/services/UnivSupervisorService.java
index fa10f88..2bd3834 100644
--- a/src/main/java/com/example/gestionstagesbackend/services/UnivSupervisorService.java
+++ b/src/main/java/com/example/gestionstagesbackend/services/UnivSupervisorService.java
@@ -1,10 +1,9 @@
 package com.example.gestionstagesbackend.services;
 
-
-
 import com.example.gestionstagesbackend.model.UnivSupervisor;
 import com.example.gestionstagesbackend.repositories.UnivSupervisorRepository;
 import org.springframework.stereotype.Service;
+
 import java.util.List;
 import java.util.Optional;
 
@@ -16,19 +15,19 @@ public class UnivSupervisorService {
         this.univSupervisorRepository = univSupervisorRepository;
     }
 
-    public List<UnivSupervisor> getAllSupervisors() {
+    public List<UnivSupervisor> getAllUnivSupervisors() {
         return univSupervisorRepository.findAll();
     }
 
-    public Optional<UnivSupervisor> getSupervisorById(Long id) {
+    public Optional<UnivSupervisor> getUnivSupervisorById(Long id) {
         return univSupervisorRepository.findById(id);
     }
 
-    public UnivSupervisor saveSupervisor(UnivSupervisor univSupervisor) {
+    public UnivSupervisor saveUnivSupervisor(UnivSupervisor univSupervisor) {
         return univSupervisorRepository.save(univSupervisor);
     }
 
-    public void deleteSupervisor(Long id) {
+    public void deleteUnivSupervisor(Long id) {
         univSupervisorRepository.deleteById(id);
     }
 }
-- 
GitLab