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