diff --git a/src/main/java/com/example/gestionstagesbackend/controllers/CandidacyController.java b/src/main/java/com/example/gestionstagesbackend/controllers/CandidacyController.java index 6861e1ddf847495a6b3737954aded7eedb4cafb2..2ae6084ab0bd0dba6cff3f7c728dea64c9437f0c 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 aa09befcfdc5a8e1d32c667b71617078ccaf9fc8..2f789a69d83ef1402032aab0a079cd3555780201 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 0000000000000000000000000000000000000000..3b783883763693495fdb05c20da4020a64b02d5f --- /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 af799250469988b6da3c48361efef5f8f1196398..5e34a73754082926d6ae24d2a87a2c0dea00709b 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 0000000000000000000000000000000000000000..51f19a62bc4e0da2623fea5d13b23e9711cba612 --- /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 ea5f3787b6750745621b9b925f585900947134fa..5304e92e7ab3475ae9151fddbadf45fe0f095cb1 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 7aeb3f5716a9ecc694f212b3a6d295793e029918..a6bc14382388e874dd333e5205c46fae8e16edfb 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 5155a7d64ec55a480664e81ad21cdf5ebf91ac98..bc2c8b772e92abd8e7a3a7c98b5e82f5d9b539de 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 949bb22afa36e15ddcbbbe27ff4658799301750e..3c14cc0ef6cc70e69fe525f9ab07056c55e23424 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 1a9c4c286f323dc903ef45611dc119e16fc22be9..d5d6417fbf2f21686eb1697721bf3dc0a8a97d6a 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 1f4a52ab97c6c4d13c7ea6edf79f278ce33090cc..e6654c1f4c0993f39ed66e1283cb7234f2f7e41b 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 0000000000000000000000000000000000000000..68d883388339deffcdcdc09c0efd9b617996fd08 --- /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 b28240826ec9f46484efa8c269396f879f800e07..174fd3eab4d0f0fdfa7a3ce947897a1338bda1a0 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 a1313996fd9ad7a625a8dcd8319319a26301e31b..eec1793227de4615df9fdd8ef404de3ccff41360 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 0000000000000000000000000000000000000000..36d31ff4a821bb5822e9a34d89a12339992efee7 --- /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 8d9c9ca970fc20b12ad633b5db81e0a6868388ea..6c81c6909d27a21ad9e811296b1710e0855065f4 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 fa10f8887b68cc5163da614042816953b4164da4..2bd38343a173b9e2df9ade00cae231430e6f2415 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); } }