diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000000000000000000000000000000000000..622713ae5b165f925be32f476d0fff0ee05f26d7 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="CompilerConfiguration"> + <annotationProcessing> + <profile name="Maven default annotation processors profile" enabled="true"> + <sourceOutputDir name="target/generated-sources/annotations" /> + <sourceTestOutputDir name="target/generated-test-sources/test-annotations" /> + <outputRelativeToContentRoot value="true" /> + <module name="jobmngt" /> + </profile> + </annotationProcessing> + </component> + <component name="JavacSettings"> + <option name="ADDITIONAL_OPTIONS_OVERRIDE"> + <module name="jobmngt" options="-parameters" /> + </option> + </component> +</project> \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000000000000000000000000000000000000..63e900193296f8ed911a1b9f5b051cf908099431 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="Encoding"> + <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" /> + </component> +</project> \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000000000000000000000000000000000000..712ab9d985c20018a0c97b93d2148ac1ffe588a5 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="RemoteRepositoriesConfiguration"> + <remote-repository> + <option name="id" value="central" /> + <option name="name" value="Central Repository" /> + <option name="url" value="https://repo.maven.apache.org/maven2" /> + </remote-repository> + <remote-repository> + <option name="id" value="central" /> + <option name="name" value="Maven Central repository" /> + <option name="url" value="https://repo1.maven.org/maven2" /> + </remote-repository> + <remote-repository> + <option name="id" value="jboss.community" /> + <option name="name" value="JBoss Community repository" /> + <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" /> + </remote-repository> + </component> +</project> \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000000000000000000000000000000000000..67e1e6113bedad649fcaba6caa6eff689b450e20 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ExternalStorageConfigurationManager" enabled="true" /> + <component name="MavenProjectsManager"> + <option name="originalFiles"> + <list> + <option value="$PROJECT_DIR$/pom.xml" /> + </list> + </option> + </component> + <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="17" project-jdk-type="JavaSDK" /> +</project> \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000000000000000000000000000000000000..2b63946d5b31084bbb7dda418ceb3d75eb686373 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="Palette2"> + <group name="Swing"> + <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" /> + </item> + <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" /> + </item> + <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" /> + </item> + <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true"> + <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" /> + </item> + <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" /> + <initial-values> + <property name="text" value="Button" /> + </initial-values> + </item> + <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" /> + <initial-values> + <property name="text" value="RadioButton" /> + </initial-values> + </item> + <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" /> + <initial-values> + <property name="text" value="CheckBox" /> + </initial-values> + </item> + <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" /> + <initial-values> + <property name="text" value="Label" /> + </initial-values> + </item> + <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> + <preferred-size width="150" height="-1" /> + </default-constraints> + </item> + <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> + <preferred-size width="150" height="-1" /> + </default-constraints> + </item> + <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> + <preferred-size width="150" height="-1" /> + </default-constraints> + </item> + <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> + <preferred-size width="150" height="50" /> + </default-constraints> + </item> + <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> + <preferred-size width="150" height="50" /> + </default-constraints> + </item> + <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> + <preferred-size width="150" height="50" /> + </default-constraints> + </item> + <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" /> + </item> + <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> + <preferred-size width="150" height="50" /> + </default-constraints> + </item> + <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3"> + <preferred-size width="150" height="50" /> + </default-constraints> + </item> + <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> + <preferred-size width="150" height="50" /> + </default-constraints> + </item> + <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3"> + <preferred-size width="200" height="200" /> + </default-constraints> + </item> + <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3"> + <preferred-size width="200" height="200" /> + </default-constraints> + </item> + <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" /> + </item> + <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" /> + </item> + <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" /> + </item> + <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" /> + </item> + <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1"> + <preferred-size width="-1" height="20" /> + </default-constraints> + </item> + <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" /> + </item> + <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" /> + </item> + </group> + </component> +</project> \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000000000000000000000000000000000000..35eb1ddfbbc029bcab630581847471d7f238ec53 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="" vcs="Git" /> + </component> +</project> \ No newline at end of file diff --git a/src/main/java/fr/atlantique/imt/inf211/jobmngt/controller/ApplicationController.java b/src/main/java/fr/atlantique/imt/inf211/jobmngt/controller/ApplicationController.java index 1404d663cc9cd2a93b18a05abb6f6e3082401121..6a1d93b906df3626ab4ab6fbdc8b92dce723aedc 100644 --- a/src/main/java/fr/atlantique/imt/inf211/jobmngt/controller/ApplicationController.java +++ b/src/main/java/fr/atlantique/imt/inf211/jobmngt/controller/ApplicationController.java @@ -83,41 +83,41 @@ public class ApplicationController { @RequestParam("sectors") List<Integer> sectorIds, HttpSession session, RedirectAttributes redirectAttributes) { - + Integer userId = (Integer) session.getAttribute("uid"); if (userId == null) { return "redirect:/login?error=Vous devez être connecté pour postuler."; } - + Optional<Candidate> candidateOpt = candidateService.findById(userId); if (candidateOpt.isEmpty()) { redirectAttributes.addFlashAttribute("error", "Utilisateur non trouvé."); return "redirect:/error"; } - + Candidate candidate = candidateOpt.get(); Optional<QualificationLevel> qualificationLevelOpt = qualificationLevelService.findById(qualificationLevelId); - + if (qualificationLevelOpt.isEmpty()) { redirectAttributes.addFlashAttribute("error", "Niveau de qualification non trouvé."); return "redirect:/error"; } - + QualificationLevel qualificationLevel = qualificationLevelOpt.get(); List<Sector> sectors = sectorService.getSectorsByIds(sectorIds); - + if (sectors.isEmpty()) { redirectAttributes.addFlashAttribute("error", "Vous devez sélectionner au moins un secteur."); return "redirect:/error"; } - + Application application = new Application(); application.setCandidate(candidate); application.setCv(cv); application.setQualificationlevel(qualificationLevel); application.setSectors(sectors); application.setAppdate(LocalDateTime.now()); - + Application savedApplication = applicationService.save(application); // Stocke uniquement l'ID en session @@ -160,128 +160,128 @@ public class ApplicationController { @GetMapping("/list") public String listApplications(Model model) { List<Application> applications = applicationService.getAllApplications(); - + if (applications.isEmpty()) { model.addAttribute("error", "Aucune candidature trouvée."); } - + model.addAttribute("applicationsList", applications); // Renommage de la variable return "application/application-list"; } -/** + /** * Affiche les détails de la candidature. */ - @GetMapping("/details/{id}") - public String showApplicationDetails(@PathVariable int id, Model model) { + @GetMapping("/details/{id}") + public String showApplicationDetails(@PathVariable int id, Model model) { Optional<Application> applicationOpt = applicationService.findById(id); -if (applicationOpt.isEmpty()) { - model.addAttribute("error", "Candidature non trouvée."); - return "error"; // Page d'erreur si l'application n'est pas trouvée -} -Application application = applicationOpt.get(); -model.addAttribute("application", application); -return "application/application-details"; - } - - + if (applicationOpt.isEmpty()) { + model.addAttribute("error", "Candidature non trouvée."); + return "error"; // Page d'erreur si l'application n'est pas trouvée + } + Application application = applicationOpt.get(); + model.addAttribute("application", application); + return "application/application-details"; + } + + // suprimer et update candidature -@GetMapping("/edit/{id}") -public String showEditForm(@PathVariable int id, Model model, HttpSession session) { - Integer userId = (Integer) session.getAttribute("uid"); + @GetMapping("/edit/{id}") + public String showEditForm(@PathVariable int id, Model model, HttpSession session) { + Integer userId = (Integer) session.getAttribute("uid"); - if (userId == null) { - return "redirect:/login"; // Rediriger vers login si non connecté - } + if (userId == null) { + return "redirect:/login"; // Rediriger vers login si non connecté + } - Optional<Application> applicationOpt = applicationService.findById(id); - if (applicationOpt.isEmpty()) { - model.addAttribute("error", "Candidature non trouvée."); - return "error"; - } + Optional<Application> applicationOpt = applicationService.findById(id); + if (applicationOpt.isEmpty()) { + model.addAttribute("error", "Candidature non trouvée."); + return "error"; + } + + Application application = applicationOpt.get(); - Application application = applicationOpt.get(); + // Vérification si l'utilisateur est bien le propriétaire + if (application.getCandidate().getId() != userId) { + model.addAttribute("error", "Vous ne pouvez modifier que vos propres candidatures."); + return "error"; + } - // Vérification si l'utilisateur est bien le propriétaire - if (application.getCandidate().getId() != userId) { - model.addAttribute("error", "Vous ne pouvez modifier que vos propres candidatures."); - return "error"; + List<QualificationLevel> qualifications = qualificationLevelService.getAllQualificationLevels(); + List<Sector> sectors = sectorService.getAllSectors(); + + model.addAttribute("application", application); + model.addAttribute("qualifications", qualifications); + model.addAttribute("sectors", sectors); + + return "application/application-edit"; } - List<QualificationLevel> qualifications = qualificationLevelService.getAllQualificationLevels(); - List<Sector> sectors = sectorService.getAllSectors(); - model.addAttribute("application", application); - model.addAttribute("qualifications", qualifications); - model.addAttribute("sectors", sectors); + /** + * Traite la modification d'une candidature + */ + @PostMapping("/update") + public String updateApplication( + @RequestParam("id") int id, + @RequestParam("cv") String cv, + @RequestParam("qualificationLevel") int qualificationLevelId, + @RequestParam("sectors") List<Integer> sectorIds, + RedirectAttributes redirectAttributes) { - return "application/application-edit"; -} + Optional<Application> applicationOpt = applicationService.findById(id); + if (applicationOpt.isEmpty()) { + redirectAttributes.addFlashAttribute("error", "Candidature non trouvée."); + return "redirect:/applications/list"; + } + Application application = applicationOpt.get(); + application.setCv(cv); -/** - * Traite la modification d'une candidature - */ -@PostMapping("/update") -public String updateApplication( - @RequestParam("id") int id, - @RequestParam("cv") String cv, - @RequestParam("qualificationLevel") int qualificationLevelId, - @RequestParam("sectors") List<Integer> sectorIds, - RedirectAttributes redirectAttributes) { + Optional<QualificationLevel> qualificationLevelOpt = qualificationLevelService.findById(qualificationLevelId); + if (qualificationLevelOpt.isPresent()) { + application.setQualificationlevel(qualificationLevelOpt.get()); + } - Optional<Application> applicationOpt = applicationService.findById(id); - if (applicationOpt.isEmpty()) { - redirectAttributes.addFlashAttribute("error", "Candidature non trouvée."); - return "redirect:/applications/list"; - } + List<Sector> sectors = sectorService.getSectorsByIds(sectorIds); + application.setSectors(sectors); - Application application = applicationOpt.get(); - application.setCv(cv); - - Optional<QualificationLevel> qualificationLevelOpt = qualificationLevelService.findById(qualificationLevelId); - if (qualificationLevelOpt.isPresent()) { - application.setQualificationlevel(qualificationLevelOpt.get()); + applicationService.save(application); + redirectAttributes.addFlashAttribute("success", "Candidature mise à jour avec succès."); + + return "redirect:/applications/list"; } - List<Sector> sectors = sectorService.getSectorsByIds(sectorIds); - application.setSectors(sectors); + /** + * Suppression d'une candidature + */ + @GetMapping("/delete/{id}") + public String deleteApplication(@PathVariable int id, RedirectAttributes redirectAttributes, HttpSession session) { + Integer userId = (Integer) session.getAttribute("uid"); - applicationService.save(application); - redirectAttributes.addFlashAttribute("success", "Candidature mise à jour avec succès."); - - return "redirect:/applications/list"; -} + if (userId == null) { + return "redirect:/login"; + } -/** - * Suppression d'une candidature - */ -@GetMapping("/delete/{id}") -public String deleteApplication(@PathVariable int id, RedirectAttributes redirectAttributes, HttpSession session) { - Integer userId = (Integer) session.getAttribute("uid"); + Optional<Application> applicationOpt = applicationService.findById(id); + if (applicationOpt.isEmpty()) { + redirectAttributes.addFlashAttribute("error", "Candidature non trouvée."); + return "redirect:/applications/list"; + } - if (userId == null) { - return "redirect:/login"; - } + Application application = applicationOpt.get(); - Optional<Application> applicationOpt = applicationService.findById(id); - if (applicationOpt.isEmpty()) { - redirectAttributes.addFlashAttribute("error", "Candidature non trouvée."); - return "redirect:/applications/list"; - } + // Vérification que le candidat est bien le propriétaire + if (application.getCandidate().getId() != userId) { + redirectAttributes.addFlashAttribute("error", "Vous n'avez pas l'autorisation de supprimer cette candidature."); + return "redirect:/applications/list"; + } - Application application = applicationOpt.get(); + applicationService.delete(id); + redirectAttributes.addFlashAttribute("success", "Candidature supprimée avec succès."); - // Vérification que le candidat est bien le propriétaire - if (application.getCandidate().getId() != userId) { - redirectAttributes.addFlashAttribute("error", "Vous n'avez pas l'autorisation de supprimer cette candidature."); return "redirect:/applications/list"; } - - applicationService.delete(id); - redirectAttributes.addFlashAttribute("success", "Candidature supprimée avec succès."); - - return "redirect:/applications/list"; -} } \ No newline at end of file diff --git a/src/main/java/fr/atlantique/imt/inf211/jobmngt/controller/CandidateController.java b/src/main/java/fr/atlantique/imt/inf211/jobmngt/controller/CandidateController.java index b0328a5979b69a246c6fc8909987e3b7dfc9c363..24996e030a90ed8c2f8c6bbf1e21169725d47eef 100644 --- a/src/main/java/fr/atlantique/imt/inf211/jobmngt/controller/CandidateController.java +++ b/src/main/java/fr/atlantique/imt/inf211/jobmngt/controller/CandidateController.java @@ -34,21 +34,21 @@ public class CandidateController { @RequestParam String lastname, @RequestParam String firstname, @RequestParam String city) { - + boolean isRegistered = candidateService.registerCandidate(new Candidate(mail, password, city, lastname, firstname)); - + if (!isRegistered) { ModelAndView mav = new ModelAndView("candidate/signupCandidate"); mav.addObject("error", "This email is already registered. Please use another one."); return mav; } - + // Redirection vers confirmation avec un message spécifique ModelAndView mav = new ModelAndView("candidate/confirmation"); mav.addObject("message", "Your account has been successfully created!"); return mav; } - + @GetMapping("/list") public String listCandidates(Model model) { List<Candidate> candidates = candidateService.getAllCandidates(); @@ -95,34 +95,34 @@ public class CandidateController { model.addAttribute("error", "Le candidat n'existe pas."); return "error"; } - + candidate.setPassword(password); candidate.setLastname(lastname); candidate.setFirstname(firstname); candidate.setCity(city); - + candidateService.updateCandidate(candidate); - + // Envoie l’objet candidat pour l’afficher après modification model.addAttribute("message", "Candidat mis à jour avec succès !"); model.addAttribute("candidate", candidate); return "candidate/confirmation"; } - - @GetMapping("/delete/{id}") - public String deleteCandidate(@PathVariable int id, Model model) { - Candidate candidate = candidateService.getCandidateById(id); - - if (candidate == null) { - model.addAttribute("error", "Le candidat avec l'ID " + id + " n'existe pas."); - return "error"; // Affiche une page d'erreur si le candidat n'existe pas - } - - candidateService.deleteCandidate(id); - - // Rediriger vers la liste avec un message de confirmation - model.addAttribute("message", "Le candidat " + candidate.getFirstname() + " " + candidate.getLastname() + " a été supprimé avec succès !"); - return "candidate/confirmationSupp"; // Affichage de la confirmation après suppression + + @GetMapping("/delete/{id}") + public String deleteCandidate(@PathVariable int id, Model model) { + Candidate candidate = candidateService.getCandidateById(id); + + if (candidate == null) { + model.addAttribute("error", "Le candidat avec l'ID " + id + " n'existe pas."); + return "error"; // Affiche une page d'erreur si le candidat n'existe pas } + candidateService.deleteCandidate(id); + + // Rediriger vers la liste avec un message de confirmation + model.addAttribute("message", "Le candidat " + candidate.getFirstname() + " " + candidate.getLastname() + " a été supprimé avec succès !"); + return "candidate/confirmationSupp"; // Affichage de la confirmation après suppression + } + } diff --git a/src/main/java/fr/atlantique/imt/inf211/jobmngt/controller/CompanyController.java b/src/main/java/fr/atlantique/imt/inf211/jobmngt/controller/CompanyController.java index 8ff51acdd8059b2244ae277e03f272d4278a41e7..cdd39045bf5b7982195429abdc7658ea142bbea5 100644 --- a/src/main/java/fr/atlantique/imt/inf211/jobmngt/controller/CompanyController.java +++ b/src/main/java/fr/atlantique/imt/inf211/jobmngt/controller/CompanyController.java @@ -1,17 +1,21 @@ package fr.atlantique.imt.inf211.jobmngt.controller; import java.util.HashSet; +import java.util.List; import java.util.Optional; +import fr.atlantique.imt.inf211.jobmngt.service.JobOfferService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import fr.atlantique.imt.inf211.jobmngt.entity.Company; +import fr.atlantique.imt.inf211.jobmngt.entity.JobOffer; import fr.atlantique.imt.inf211.jobmngt.service.CompanyService; @Controller @@ -19,20 +23,63 @@ public class CompanyController { @Autowired private CompanyService companyService; + private final JobOfferService jobOfferService; - public CompanyController(CompanyService companyService) { + + public CompanyController(CompanyService companyService, JobOfferService jobOfferService) { + this.jobOfferService = jobOfferService; this.companyService = companyService; } + + @GetMapping("/jobOffers/view/{id}") + public String viewJobOffer(@PathVariable("id") Long id, Model model) { + Optional<JobOffer> offerOpt = jobOfferService.findById(id); + if (offerOpt.isPresent()) { + model.addAttribute("offer", offerOpt.get()); + return "jobOffer/jobOfferView"; + } + return "redirect:/companies"; // Redirige si l'offre n'est pas trouvée + } + + + + + + // // // Afficher les offres d'emploi d'une entreprise spécifique + @GetMapping("/companies/{id}/jobOffers") + public String listCompanyJobOffers(@PathVariable("id") Long companyId, Model model) { + Optional<Company> companyOpt = companyService.findById(companyId); + if (companyOpt.isPresent()) { + Company company = companyOpt.get(); + List<JobOffer> jobOffers = jobOfferService.findByCompany(company); + model.addAttribute("company", company); + model.addAttribute("jobOffers", jobOffers); + return "company/jobOffers"; + } + + model.addAttribute("errorMessage", "Entreprise introuvable !"); + return "error"; + + + } + + + + + + + // Affiche le formulaire d'inscription @GetMapping("/companies/create") public String showCreateForm(Model model) { - Company company = new Company(); - company.setJobOffers(new HashSet<>()); - model.addAttribute("company", company); + // On passe un objet 'Company' vide pour lier les champs du formulaire + model.addAttribute("company", new Company()); return "company/companyForm"; } + + // Affiche la liste des entreprises @GetMapping("/companies") public String listCompanies(Model model) { @@ -42,18 +89,20 @@ public class CompanyController { // Affiche les détails d'une entreprise @GetMapping("/companies/view/{id}") - public String viewCompany(@PathVariable("id") int id, Model model, RedirectAttributes redirectAttributes) { + public String viewCompany(@PathVariable("id") Long id, Model model) { Optional<Company> companyOpt = companyService.findById(id); - if (companyOpt.isPresent()) { - model.addAttribute("company", companyOpt.get()); + Company company = companyOpt.get(); + + model.addAttribute("company", company); + model.addAttribute("jobOfferCount", companyService.countJobOffersByCompany(id)); + model.addAttribute("jobOffers", companyService.getJobOffersByCompany(id)); return "company/companyView"; - } else { - redirectAttributes.addFlashAttribute("errorMessage", "❌ L'entreprise avec ID " + id + " n'existe pas !"); - return "redirect:/companies"; } + return "redirect:/companies"; } + // Enregistre une entreprise avec vérification des doublons et message de succès @PostMapping("/companies/create") public String registerCompany(Company company, RedirectAttributes redirectAttributes, Model model) { @@ -72,13 +121,14 @@ public class CompanyController { } catch (Exception e) { model.addAttribute("errorMessage", "❌ Erreur lors de l'inscription !"); model.addAttribute("company", company); - return "company/companyForm"; // 🔹 Rester sur le formulaire en cas d'erreur + return "company/companyForm"; // Rester sur le formulaire en cas d'erreur } } + // Affiche le formulaire de modification d'une entreprise // Affiche le formulaire de modification d'une entreprise @GetMapping("/companies/{id}/edit") - public String showEditForm(@PathVariable("id") int id, Model model, RedirectAttributes redirectAttributes) { + public String showEditForm(@PathVariable("id") Long id, Model model, RedirectAttributes redirectAttributes) { Optional<Company> companyOpt = companyService.findById(id); if (companyOpt.isPresent()) { @@ -90,22 +140,44 @@ public class CompanyController { } } + // // Met à jour les informations d'une entreprise avec message de succès // Met à jour les informations d'une entreprise avec message de succès @PostMapping("/companies/update") - public String updateCompany(Company company, RedirectAttributes redirectAttributes) { + public String updateCompany(@ModelAttribute Company company, RedirectAttributes redirectAttributes) { try { - companyService.updateCompany(company); - redirectAttributes.addFlashAttribute("successMessage", "✅ L'entreprise a été mise à jour avec succès !"); - return "redirect:/companies/view/" + company.getId(); + // Vérifier si l'entreprise existe avant la mise à jour + Optional<Company> existingCompany = companyService.findById(Long.valueOf(company.getId())); + + if (existingCompany.isPresent()) { + // Mettre à jour les informations de l'entreprise + Company companyToUpdate = existingCompany.get(); + companyToUpdate.setDenomination(company.getDenomination()); + companyToUpdate.setDescription(company.getDescription()); + companyToUpdate.setCity(company.getCity()); + companyToUpdate.setMail(company.getMail()); + + // Enregistrer la mise à jour + companyService.saveCompany(companyToUpdate); + redirectAttributes.addFlashAttribute("successMessage", "✅ L'entreprise a été mise à jour avec succès !"); + return "redirect:/companies/view/" + company.getId(); + } else { + redirectAttributes.addFlashAttribute("errorMessage", "❌ L'entreprise n'existe pas !"); + return "redirect:/companies"; + } } catch (Exception e) { - redirectAttributes.addFlashAttribute("errorMessage", "❌ Erreur lors de la mise à jour !"); - return "redirect:/companies/" + company.getId() + "/edit"; + // Log de l'erreur pour debugging + e.printStackTrace(); + redirectAttributes.addFlashAttribute("errorMessage", "❌ Erreur lors de la mise à jour : " + e.getMessage()); + return "redirect:/companies/view/" + company.getId(); } } + + + // Supprime une entreprise // Supprime une entreprise @GetMapping("/companies/delete/{id}") - public String deleteCompany(@PathVariable("id") int id, RedirectAttributes redirectAttributes) { + public String deleteCompany(@PathVariable("id") Long id, RedirectAttributes redirectAttributes) { try { companyService.deleteCompany(id); redirectAttributes.addFlashAttribute("successMessage", "✅ Entreprise supprimée avec succès !"); @@ -118,8 +190,3 @@ public class CompanyController { - - - - - diff --git a/src/main/java/fr/atlantique/imt/inf211/jobmngt/controller/JobOfferController.java b/src/main/java/fr/atlantique/imt/inf211/jobmngt/controller/JobOfferController.java index 984da34404e631795bfc17f761f2baa8c3d9283b..b20d0869f7f091bb39974dd28037ad2aa9e30e78 100644 --- a/src/main/java/fr/atlantique/imt/inf211/jobmngt/controller/JobOfferController.java +++ b/src/main/java/fr/atlantique/imt/inf211/jobmngt/controller/JobOfferController.java @@ -17,12 +17,15 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.mvc.support.RedirectAttributes; +import fr.atlantique.imt.inf211.jobmngt.entity.AppUser; import fr.atlantique.imt.inf211.jobmngt.entity.JobOffer; import fr.atlantique.imt.inf211.jobmngt.entity.Sector; import fr.atlantique.imt.inf211.jobmngt.service.CompanyService; import fr.atlantique.imt.inf211.jobmngt.service.JobOfferService; import fr.atlantique.imt.inf211.jobmngt.service.QualificationLevelService; import fr.atlantique.imt.inf211.jobmngt.service.SectorService; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; @Controller @RequestMapping("/jobs") @@ -33,9 +36,8 @@ public class JobOfferController { private final QualificationLevelService qualificationLevelService; private final SectorService sectorService; - @Autowired - public JobOfferController(JobOfferService jobOfferService, + public JobOfferController(JobOfferService jobOfferService, CompanyService companyService, QualificationLevelService qualificationLevelService, SectorService sectorService) { @@ -47,30 +49,74 @@ public class JobOfferController { // Affiche la liste des offres d'emploi avec log @GetMapping - public String listJobOffers(Model model) { - List<JobOffer> jobOffers = jobOfferService.getAllJobOffers(); - System.out.println("🔎 Nombre d'offres récupérées: " + jobOffers.size()); - - model.addAttribute("jobOffers", jobOffers); - return "jobOffer/jobOfferList"; + public String listJobOffers(Model model, HttpServletRequest request) { + HttpSession session = request.getSession(); + AppUser loggedInUser = (AppUser) session.getAttribute("user"); + + // Vérification de l'utilisateur + if (loggedInUser != null) { + model.addAttribute("userType", loggedInUser.getUsertype()); + model.addAttribute("userEmail", loggedInUser.getMail()); + System.out.println("Utilisateur connecté : " + loggedInUser.getMail() + " | Type: " + loggedInUser.getUsertype()); + } else { + model.addAttribute("userType", null); + model.addAttribute("userEmail", null); + System.out.println("Aucun utilisateur connecté."); + } + + model.addAttribute("jobOffers", jobOfferService.getAllJobOffers()); + return "jobOffer/jobOfferList"; // Correspond au fichier "jobOfferList.html" dans /templates/ } // Affiche les détails d'une offre + + + @GetMapping("/view/{id}") - public String viewJobOffer(@PathVariable("id") int id, Model model, RedirectAttributes redirectAttributes) { + public String viewJobOffer(@PathVariable("id") Long id, Model model, RedirectAttributes redirectAttributes) { + System.out.println("🔍 Recherche de l'offre avec ID : " + id); Optional<JobOffer> jobOfferOpt = jobOfferService.findById(id); + if (jobOfferOpt.isPresent()) { model.addAttribute("jobOffer", jobOfferOpt.get()); return "jobOffer/jobOfferView"; } else { + System.out.println("❌ L'offre avec ID " + id + " est introuvable en base de données !"); redirectAttributes.addFlashAttribute("errorMessage", "L'offre d'emploi avec ID " + id + " n'existe pas !"); return "redirect:/jobs"; } } + + @GetMapping("/company/job/view/{id}") + public String viewCompanyJob(@PathVariable("id") Long jobId, Model model) { + Optional<JobOffer> jobOffer = jobOfferService.findById(jobId); + + if (jobOffer.isEmpty()) { + return "error"; // Rediriger vers une page d'erreur si l'offre n'existe pas + } + + model.addAttribute("jobOffer", jobOffer.get()); + return "jobOffer/companyJobOfferView"; // Nouveau template dédié + } + + + + + // Affiche le formulaire de création avec sélection des secteurs @GetMapping("/create") - public String showCreateForm(Model model) { + public String showCreateForm(Model model, HttpServletRequest request) { + +// // Vérifier si l'utilisateur est une entreprise +// HttpSession session = request.getSession(false); +// if (session == null || !"company".equals(session.getAttribute("usertype"))) { +// return "redirect:/login"; // Redirige vers la connexion si ce n'est pas une entreprise +// } + + + + JobOffer jobOffer = new JobOffer(); jobOffer.setPublicationDate(new Date()); @@ -83,44 +129,95 @@ public class JobOfferController { } // Enregistre une offre avec gestion des secteurs et des erreurs - -@PostMapping("/save") -public String saveJobOffer(@ModelAttribute JobOffer jobOffer, - @RequestParam(value = "sectorIds", required = false) List<Integer> sectorIds, - RedirectAttributes redirectAttributes) { - try { - System.out.println("🔹 Tentative d'enregistrement: " + jobOffer); - - // Associer les secteurs sélectionnés à l'offre d'emploi - if (sectorIds != null && !sectorIds.isEmpty()) { - Set<Sector> selectedSectors = sectorIds.stream() - .map(id -> sectorService.findById(id.longValue())) - .filter(Optional::isPresent) - .map(Optional::get) - .collect(Collectors.toSet()); // Convertir la liste en Set - - jobOffer.setSectors(selectedSectors); // Affectation corrigée - } - jobOfferService.saveJobOffer(jobOffer); - System.out.println(" Enregistrement réussi !"); - redirectAttributes.addFlashAttribute("successMessage", " Offre d'emploi créée avec succès !"); - return "redirect:/jobs"; - } catch (Exception e) { - System.err.println(" Erreur lors de l'enregistrement: " + e.getMessage()); - redirectAttributes.addFlashAttribute("errorMessage", " Erreur lors de la création de l'offre !"); - return "redirect:/jobs/create"; + @PostMapping("/save") + public String saveJobOffer(@ModelAttribute JobOffer jobOffer, + @RequestParam(value = "sectorIds", required = false) List<Integer> sectorIds, + RedirectAttributes redirectAttributes) { + try { + System.out.println("🔹 Tentative d'enregistrement: " + jobOffer); + + // Associer les secteurs sélectionnés à l'offre d'emploi + if (sectorIds != null && !sectorIds.isEmpty()) { + Set<Sector> selectedSectors = sectorIds.stream() + .map(id -> sectorService.findById(id.longValue())) + .filter(Optional::isPresent) + .map(Optional::get) + .collect(Collectors.toSet()); // Convertir la liste en Set + + jobOffer.setSectors(selectedSectors); // Affectation corrigée + } + + jobOfferService.saveJobOffer(jobOffer); + System.out.println(" Enregistrement réussi !"); + redirectAttributes.addFlashAttribute("successMessage", " Offre d'emploi créée avec succès !"); + return "redirect:/jobs"; + } catch (Exception e) { + System.err.println(" Erreur lors de l'enregistrement: " + e.getMessage()); + redirectAttributes.addFlashAttribute("errorMessage", " Erreur lors de la création de l'offre !"); + return "redirect:/jobs/create"; + } } -} + /* @PostMapping("/save") + public String saveJobOffer(@ModelAttribute JobOffer jobOffer, + @RequestParam(value = "sectorIds", required = false) List<Long> sectorIds, + RedirectAttributes redirectAttributes, + HttpServletRequest request ) { + + // Vérifier si l'utilisateur est une entreprise + // HttpSession session = request.getSession(false); + // if (session == null || !"company".equals(session.getAttribute("usertype"))) { + // return "redirect:/login"; + // } + try { + if (sectorIds != null && !sectorIds.isEmpty()) { + Set<Sector> selectedSectors = sectorIds.stream() + .map(id -> sectorService.findById(id.intValue())) // + .filter(Optional::isPresent) + .map(Optional::get) + .collect(Collectors.toSet()); + jobOffer.setSectors(selectedSectors); + } + jobOfferService.saveJobOffer(jobOffer); + redirectAttributes.addFlashAttribute("successMessage", "✅ Offre créée avec succès !"); + return "redirect:/jobs"; + } catch (Exception e) { + redirectAttributes.addFlashAttribute("errorMessage", "❌ Erreur lors de la création de l'offre !"); + return "redirect:/jobs/create"; + } + }*/ + @GetMapping("/delete/{id}") + public String deleteJobOffer(@PathVariable("id") Long id, HttpServletRequest request, RedirectAttributes redirectAttributes) { // Supprime une offre d'emploi -@GetMapping("/delete/{id}") -public String deleteJobOffer(@PathVariable("id") int id, RedirectAttributes redirectAttributes) { - Optional<JobOffer> jobOfferOpt = jobOfferService.findById(id); - - if (jobOfferOpt.isPresent()) { - try { +/*@GetMapping("/delete/{id}") +public String deleteJobOffer(@PathVariable("id") int id, RedirectAttributes redirectAttributes) {*/ + Optional<JobOffer> jobOfferOpt = jobOfferService.findById(id); + if (jobOfferOpt.isPresent()) { + HttpSession session = request.getSession(false); + String userType = (session != null) ? (String) session.getAttribute("usertype") : null; + String userEmail = (session != null) ? (String) session.getAttribute("useremail") : null; + + JobOffer jobOffer = jobOfferOpt.get(); + + // Vérifie si l'utilisateur est bien une entreprise et le propriétaire de l'offre + if (userType != null && userType.equals("company") && jobOffer.getCompany().getMail().equals(userEmail)) { + try { + jobOfferService.deleteJobOffer(id); + redirectAttributes.addFlashAttribute("successMessage", "✅ Offre supprimée avec succès !"); + } catch (Exception e) { + redirectAttributes.addFlashAttribute("errorMessage", "❌ Erreur lors de la suppression de l'offre !"); + } + } else { + redirectAttributes.addFlashAttribute("errorMessage", "❌ Vous n'avez pas l'autorisation de supprimer cette offre !"); + } + } else { + redirectAttributes.addFlashAttribute("errorMessage", "❌ L'offre avec ID " + id + " n'existe pas !"); + } + return "redirect:/jobs"; + } + /* try { jobOfferService.deleteJobOffer(id); redirectAttributes.addFlashAttribute("successMessage", " Offre d'emploi supprimée avec succès !"); } catch (Exception e) { @@ -129,14 +226,14 @@ public String deleteJobOffer(@PathVariable("id") int id, RedirectAttributes redi } else { redirectAttributes.addFlashAttribute("errorMessage", " L'offre d'emploi avec ID " + id + " n'existe pas !"); } - + return "redirect:/jobs"; -} +}*/ // Affiche le formulaire de modification @GetMapping("/{id}/edit") - public String showEditForm(@PathVariable("id") int id, Model model, RedirectAttributes redirectAttributes) { + public String showEditForm(@PathVariable("id") Long id, Model model, RedirectAttributes redirectAttributes) { Optional<JobOffer> jobOfferOpt = jobOfferService.findById(id); if (jobOfferOpt.isPresent()) { model.addAttribute("jobOffer", jobOfferOpt.get()); diff --git a/src/main/java/fr/atlantique/imt/inf211/jobmngt/converter/QualificationLevelConverter.java b/src/main/java/fr/atlantique/imt/inf211/jobmngt/converter/QualificationLevelConverter.java index e7d649ea0543556d83a1e9bf5f9750a1b4b5e938..27595e608f1de64b16303d9ddb5f1de9715acfd3 100644 --- a/src/main/java/fr/atlantique/imt/inf211/jobmngt/converter/QualificationLevelConverter.java +++ b/src/main/java/fr/atlantique/imt/inf211/jobmngt/converter/QualificationLevelConverter.java @@ -1,6 +1,6 @@ package fr.atlantique.imt.inf211.jobmngt.converter; -import org.springframework.core.convert.converter.Converter; +import org.springframework.core.convert.converter.Converter; // ✅ Import ajouté pour Optional import org.springframework.stereotype.Component; import fr.atlantique.imt.inf211.jobmngt.entity.QualificationLevel; @@ -18,7 +18,7 @@ public class QualificationLevelConverter implements Converter<String, Qualificat } @Override - public QualificationLevel convert(String id) { + /* public QualificationLevel convert(String id) { try { int parsedId = Integer.parseInt(id); Optional<QualificationLevel> qualificationLevelOpt = qualificationLevelService.findById(parsedId); @@ -26,5 +26,17 @@ public class QualificationLevelConverter implements Converter<String, Qualificat } catch (NumberFormatException e) { return null; // Gestion d'une conversion invalide } + }*/ + public QualificationLevel convert(String source) { + if (source == null || source.trim().isEmpty() || source.equals("0")) { + return null; // Retourne null si l'entrée est vide ou "0" + } + + try { + int id = Integer.parseInt(source); + return qualificationLevelService.findById(id).orElse(null); // ✅ Utilisation correcte d'Optional + } catch (NumberFormatException e) { + return null; // Gère les erreurs de conversion + } } } diff --git a/src/main/java/fr/atlantique/imt/inf211/jobmngt/dao/ApplicationDao.java b/src/main/java/fr/atlantique/imt/inf211/jobmngt/dao/ApplicationDao.java index 225eaf02b3338d47ffaaa8ad4f38cbae75750bde..c9353c60b29ace81689658db64c511516dc58f73 100644 --- a/src/main/java/fr/atlantique/imt/inf211/jobmngt/dao/ApplicationDao.java +++ b/src/main/java/fr/atlantique/imt/inf211/jobmngt/dao/ApplicationDao.java @@ -27,13 +27,13 @@ public class ApplicationDao { entityManager.persist(transientInstance); } - @Transactional - public void remove(Application application) { - logger.log(Level.INFO, "Removing Application instance"); - if (application != null) { - entityManager.remove(entityManager.contains(application) ? application : entityManager.merge(application)); - } + @Transactional + public void remove(Application application) { + logger.log(Level.INFO, "Removing Application instance"); + if (application != null) { + entityManager.remove(entityManager.contains(application) ? application : entityManager.merge(application)); } + } @Transactional public Application merge(Application detachedInstance) { @@ -42,9 +42,9 @@ public class ApplicationDao { } @Transactional(readOnly = true) -public Optional<Application> findById(int id) { - return Optional.ofNullable(entityManager.find(Application.class, id)); -} + public Optional<Application> findById(int id) { + return Optional.ofNullable(entityManager.find(Application.class, id)); + } @Transactional(readOnly = true) public List<Application> findAll() { @@ -59,6 +59,3 @@ public Optional<Application> findById(int id) { - - - diff --git a/src/main/java/fr/atlantique/imt/inf211/jobmngt/dao/SectorDao.java b/src/main/java/fr/atlantique/imt/inf211/jobmngt/dao/SectorDao.java index c3e70de07b62fa29fe8197126091c2548488dff5..9cc968d0e0ff8b7cf8e5cca090329a94bc50cc49 100644 --- a/src/main/java/fr/atlantique/imt/inf211/jobmngt/dao/SectorDao.java +++ b/src/main/java/fr/atlantique/imt/inf211/jobmngt/dao/SectorDao.java @@ -4,13 +4,13 @@ import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; +import jakarta.persistence.TypedQuery; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import fr.atlantique.imt.inf211.jobmngt.entity.Sector; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; -import jakarta.persistence.TypedQuery; @Repository public class SectorDao { @@ -27,21 +27,21 @@ public class SectorDao { } @Transactional - public void remove(Sector persistentInstance) { + public void remove(Sector sector) { logger.log(Level.INFO, "Removing Sector instance"); - entityManager.remove(persistentInstance); + entityManager.remove(sector); } @Transactional - public Sector merge(Sector detachedInstance) { + public Sector merge(Sector sector) { logger.log(Level.INFO, "Merging Sector instance"); - return entityManager.merge(detachedInstance); + return entityManager.merge(sector); } @Transactional(readOnly = true) public Sector findById(Object id) { - logger.log(Level.INFO, "Fetching Sector instance with ID: " + id); - return entityManager.find(Sector.class, id); + logger.log(Level.INFO, "Fetching Sector instance with ID: " + id); + return entityManager.find(Sector.class, id); } @Transactional(readOnly = true) @@ -55,40 +55,80 @@ public class SectorDao { if (order == null || (!order.equalsIgnoreCase("ASC") && !order.equalsIgnoreCase("DESC"))) { order = "ASC"; // Définit une valeur par défaut si `order` est null } - + // Ici, utilisez `sort` pour définir la colonne par défaut si nécessaire - String sortColumn = (sort != null) ? sort : "id"; - + String sortColumn = (sort != null) ? sort : "id"; + return entityManager.createQuery("SELECT s FROM Sector s ORDER BY s." + sortColumn + " " + order, Sector.class) .getResultList(); } - + + /* logger.log(Level.INFO, "Fetching all sectors sorted by " + sort + " in " + order + " order"); + String query = "SELECT s FROM Sector s ORDER BY s." + sort + " " + (order.equalsIgnoreCase("asc") ? "ASC" : "DESC"); + return entityManager.createQuery(query, Sector.class).getResultList(); + }*/ + /** - * Nouvelle méthode : Récupérer les secteurs ayant un label donné. + * ✅ Nouvelle surcharge de findAll() sans paramètres. */ @Transactional(readOnly = true) - public List<Sector> findByLabel(String label) { - logger.log(Level.INFO, "Fetching sectors with label: " + label); - - String jpql = "SELECT s FROM Sector s WHERE s.label = :label"; - + public List<Sector> findAll() { + logger.log(Level.INFO, "Fetching all sectors"); + return entityManager.createQuery("SELECT s FROM Sector s", Sector.class).getResultList(); + } + + /** + * ✅ Nouvelle méthode pour récupérer plusieurs secteurs par ID. + */ + @Transactional(readOnly = true) + public List<Sector> findAllById(List<Integer> ids) { + logger.log(Level.INFO, "Fetching sectors with IDs: " + ids); + return entityManager.createQuery("SELECT s FROM Sector s WHERE s.id IN :ids", Sector.class) + .setParameter("ids", ids) + .getResultList(); + } + + /** + * ✅ Nouvelle méthode pour enregistrer un secteur. + */ + @Transactional + public void save(Sector sector) { + logger.log(Level.INFO, "Saving sector: " + sector); + entityManager.persist(sector); + } + + /** + * ✅ Nouvelle méthode pour mettre à jour un secteur. + */ + @Transactional + public void update(Sector sector) { + logger.log(Level.INFO, "Updating sector: " + sector); + entityManager.merge(sector); + } + + /** + * ✅ Nouvelle méthode pour supprimer un secteur par ID. + */ + @Transactional + public void delete(int id) { + logger.log(Level.INFO, "Deleting sector with ID: " + id); + Sector sector = findById(id); + if (sector != null) { + entityManager.remove(sector); + } + } + + @Transactional(readOnly = true) + public List<Sector> findAllByIds(List<Integer> ids) { + logger.log(Level.INFO, "Fetching sectors with IDs: " + ids); + + String jpql = "SELECT s FROM Sector s WHERE s.id IN :ids"; + TypedQuery<Sector> query = entityManager.createQuery(jpql, Sector.class); - query.setParameter("label", label); - + query.setParameter("ids", ids); + return query.getResultList(); } - - @Transactional(readOnly = true) -public List<Sector> findAllByIds(List<Integer> ids) { - logger.log(Level.INFO, "Fetching sectors with IDs: " + ids); - - String jpql = "SELECT s FROM Sector s WHERE s.id IN :ids"; - - TypedQuery<Sector> query = entityManager.createQuery(jpql, Sector.class); - query.setParameter("ids", ids); - - return query.getResultList(); -} - + } diff --git a/src/main/java/fr/atlantique/imt/inf211/jobmngt/entity/AppUser.java b/src/main/java/fr/atlantique/imt/inf211/jobmngt/entity/AppUser.java index 072677e33b54ae20f726e92aded274d6e7d0b9ee..7c0503d4e71cf50043c85ad2131a71c0cc813902 100644 --- a/src/main/java/fr/atlantique/imt/inf211/jobmngt/entity/AppUser.java +++ b/src/main/java/fr/atlantique/imt/inf211/jobmngt/entity/AppUser.java @@ -5,17 +5,7 @@ import java.io.Serializable; import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.fasterxml.jackson.annotation.ObjectIdGenerators; -import jakarta.persistence.Column; -import jakarta.persistence.DiscriminatorColumn; -import jakarta.persistence.DiscriminatorType; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; -import jakarta.persistence.Table; -import jakarta.persistence.UniqueConstraint; +import jakarta.persistence.*; @Entity @Table(name = "appuser", schema = "public", uniqueConstraints = @UniqueConstraint(columnNames = "mail")) @@ -37,9 +27,9 @@ public class AppUser implements Serializable { @Column(name = "city", length = 30) private String city; - + @Enumerated(EnumType.STRING) @Column(name = "usertype", length = 50, insertable = false, updatable = false) - private String usertype; // Permet d'identifier le type d'utilisateur + private Role usertype; // Permet d'identifier le type d'utilisateur // Constructeurs public AppUser() {} @@ -49,7 +39,7 @@ public class AppUser implements Serializable { this.password = password; this.city = city; } - + // Getters et Setters public int getId() { @@ -84,11 +74,11 @@ public class AppUser implements Serializable { this.city = city; } - public String getUsertype() { + public Role getUsertype() { return usertype; } - public void setUsertype(String usertype) { + public void setUsertype(Role usertype) { this.usertype = usertype; } } diff --git a/src/main/java/fr/atlantique/imt/inf211/jobmngt/entity/Application.java b/src/main/java/fr/atlantique/imt/inf211/jobmngt/entity/Application.java index 118837ce6c5fed5b434bfea3d3f8746c44bfe34b..7f585796b1143b76187f43ea020dd4124b0e6720 100644 --- a/src/main/java/fr/atlantique/imt/inf211/jobmngt/entity/Application.java +++ b/src/main/java/fr/atlantique/imt/inf211/jobmngt/entity/Application.java @@ -24,7 +24,7 @@ import jakarta.persistence.Table; @Entity @Table(name = "application", schema = "public") @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id") -@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) +@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) public class Application implements Serializable { @Id @@ -35,28 +35,28 @@ public class Application implements Serializable { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "candidateid", nullable = false) - @JsonIgnoreProperties({"applications"}) + @JsonIgnoreProperties({"applications"}) // ✅ Évite la surcharge JSON circulaire private Candidate candidate; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "qualiflevelid", nullable = false) - @JsonIgnoreProperties({"applications"}) + @JsonIgnoreProperties({"applications"}) // ✅ Corrige le problème de référence circulaire avec QualificationLevel private QualificationLevel qualificationlevel; @Column(name = "cv", nullable = false) private String cv; @Column(name = "appdate") - private LocalDateTime appdate; + private LocalDateTime appdate; @ManyToMany(fetch = FetchType.LAZY) @JoinTable( - name = "indexapplicationsector", - schema = "public", - joinColumns = { @JoinColumn(name = "applicationid", nullable = false, updatable = false) }, - inverseJoinColumns = { @JoinColumn(name = "sectorid", nullable = false, updatable = false) } + name = "indexapplicationsector", + schema = "public", + joinColumns = { @JoinColumn(name = "applicationid", nullable = false, updatable = false) }, + inverseJoinColumns = { @JoinColumn(name = "sectorid", nullable = false, updatable = false) } ) - @JsonIgnoreProperties({"applications"}) + @JsonIgnoreProperties({"applications"}) // ✅ Empêche la surcharge JSON circulaire private List<Sector> sectors; // Constructeurs diff --git a/src/main/java/fr/atlantique/imt/inf211/jobmngt/entity/JobOffer.java b/src/main/java/fr/atlantique/imt/inf211/jobmngt/entity/JobOffer.java index 32cb94f2d9a227021ca6b5bb2d86b18d02d38bde..ac444ecdf9401762c558711e5b29cfd34d02b5cb 100644 --- a/src/main/java/fr/atlantique/imt/inf211/jobmngt/entity/JobOffer.java +++ b/src/main/java/fr/atlantique/imt/inf211/jobmngt/entity/JobOffer.java @@ -8,7 +8,6 @@ import org.springframework.format.annotation.DateTimeFormat; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; @@ -34,7 +33,8 @@ public class JobOffer implements java.io.Serializable { @SequenceGenerator(name = "JOBOFFER_ID_GENERATOR", sequenceName = "JOBOFFER_ID_SEQ", allocationSize = 1) @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "JOBOFFER_ID_GENERATOR") @Column(name="id", unique = true, nullable = false) - private Integer id; // Modifié de int à Integer + private Long id; // ✅ Correct + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "compid", nullable = true) // nullable = true pour éviter les erreurs si null @@ -51,33 +51,32 @@ public class JobOffer implements java.io.Serializable { private String taskDescription; @Temporal(TemporalType.DATE) - @DateTimeFormat(pattern = "yyyy-MM-dd") - - - + @Column(name="publicationdate") private Date publicationDate; - @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @ManyToMany(fetch = FetchType.LAZY) + // @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinTable(name="indexjoboffersector", schema="public", - joinColumns = { @JoinColumn(name="jobofferid", nullable = false, updatable = false) }, - inverseJoinColumns = { @JoinColumn(name="sectorid", nullable = false, updatable = false) }) - @JsonIgnoreProperties({"applications", "jobOffers"}) + joinColumns = { @JoinColumn(name="jobofferid", nullable = false, updatable = false) }, + inverseJoinColumns = { @JoinColumn(name="sectorid", nullable = false, updatable = false) }) + @JsonIgnoreProperties({"applications", "jobOffers"}) // Empêche les boucles JSON infinies private Set<Sector> sectors = new HashSet<>(); - @OneToMany(fetch = FetchType.LAZY, mappedBy = "jobOffer", cascade = CascadeType.ALL) + // @OneToMany(fetch = FetchType.LAZY, mappedBy = "jobOffer", cascade = CascadeType.ALL) + @OneToMany(fetch = FetchType.LAZY, mappedBy = "jobOffer") // Correction du mappedBy private Set<OfferMessage> offerMessages = new HashSet<>(); public JobOffer() {} - public JobOffer(Integer id, Company company, QualificationLevel qualificationLevel, String title) { + public JobOffer(Long id, Company company, QualificationLevel qualificationLevel, String title) { this.id = id; this.company = company; this.qualificationLevel = qualificationLevel; this.title = title; } - public JobOffer(Integer id, Company company, QualificationLevel qualificationLevel, String title, + public JobOffer(Long id, Company company, QualificationLevel qualificationLevel, String title, String taskDescription, Date publicationDate, Set<Sector> sectors, Set<OfferMessage> offerMessages) { this.id = id; this.company = company; @@ -89,8 +88,9 @@ public class JobOffer implements java.io.Serializable { this.offerMessages = offerMessages; } - public Integer getId() { return id; } - public void setId(Integer id) { this.id = id; } + public Long getId() { return id; } + public void setId(Long id) { this.id = id; } + public Company getCompany() { return company; } public void setCompany(Company company) { this.company = company; } @@ -113,3 +113,6 @@ public class JobOffer implements java.io.Serializable { public Set<OfferMessage> getOfferMessages() { return offerMessages; } public void setOfferMessages(Set<OfferMessage> offerMessages) { this.offerMessages = offerMessages; } } + + + diff --git a/src/main/java/fr/atlantique/imt/inf211/jobmngt/entity/OfferMessage.java b/src/main/java/fr/atlantique/imt/inf211/jobmngt/entity/OfferMessage.java index 9abb7e72b0545ff464369c08d6866a135aee2f9e..8e99766b25abee19a8cd81631d8cd0d59ac2b94b 100644 --- a/src/main/java/fr/atlantique/imt/inf211/jobmngt/entity/OfferMessage.java +++ b/src/main/java/fr/atlantique/imt/inf211/jobmngt/entity/OfferMessage.java @@ -25,7 +25,7 @@ public class OfferMessage implements java.io.Serializable { @Id @SequenceGenerator(name = "OFFERMESSAGE_ID_GENERATOR", sequenceName = "OFFERMESSAGE_ID_SEQ", allocationSize=1) - @GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "OFFERMESSAGE_ID_GENERATOR") + @GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "OFFERMESSAGE_ID_GENERATOR") @Column(name="id", unique=true, nullable=false) private int id; @@ -54,11 +54,11 @@ public class OfferMessage implements java.io.Serializable { } public OfferMessage(int id, Application application, JobOffer jobOffer, Date sentdate, String message) { - this.id = id; - this.application = application; - this.jobOffer = jobOffer; - this.sentdate = sentdate; - this.message = message; + this.id = id; + this.application = application; + this.jobOffer = jobOffer; + this.sentdate = sentdate; + this.message = message; } public int getId() { return this.id; } diff --git a/src/main/java/fr/atlantique/imt/inf211/jobmngt/entity/Role.java b/src/main/java/fr/atlantique/imt/inf211/jobmngt/entity/Role.java new file mode 100644 index 0000000000000000000000000000000000000000..2b3e13d630a3a66d722dd42481310f986a11789f --- /dev/null +++ b/src/main/java/fr/atlantique/imt/inf211/jobmngt/entity/Role.java @@ -0,0 +1,6 @@ +package fr.atlantique.imt.inf211.jobmngt.entity; + +public enum Role { + COMPANY, + CONDIDATE +} diff --git a/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/AppUserServiceImpl.java b/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/AppUserServiceImpl.java index 7ea784b71879ad3381bfc6a902c378c23866034c..c498d20925155c6e2bb6528bedafa118fab1458d 100644 --- a/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/AppUserServiceImpl.java +++ b/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/AppUserServiceImpl.java @@ -31,5 +31,3 @@ public class AppUserServiceImpl implements AppUserService { return appUserDao.checkLogin(u); } } - - diff --git a/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/ApplicationServiceImpl.java b/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/ApplicationServiceImpl.java index 9b1079c9fe53717b4fc26ca40c929f46ec777692..017a5a65454ab967be5b8918f6505c2cf2225913 100644 --- a/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/ApplicationServiceImpl.java +++ b/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/ApplicationServiceImpl.java @@ -23,11 +23,11 @@ public class ApplicationServiceImpl implements ApplicationService { return application; } - + @Override @Transactional(readOnly = true) public Optional<Application> findById(int id) { - return applicationDao.findById(id); + return applicationDao.findById(id); } diff --git a/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/CandidateServiceImpl.java b/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/CandidateServiceImpl.java index a8d9fd8164d11e58b410f91f5ca67baeaee223e2..56b28220200bfc82f0c78fa14bca64d30de6756c 100644 --- a/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/CandidateServiceImpl.java +++ b/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/CandidateServiceImpl.java @@ -49,14 +49,14 @@ public class CandidateServiceImpl implements CandidateService { } @Override -public void updateCandidate(Candidate candidate) { - Candidate existingCandidate = candidateDao.findById(candidate.getId()); - if (existingCandidate != null) { - // Ne pas autoriser la modification de l'email - candidate.setMail(existingCandidate.getMail()); - candidateDao.merge(candidate); + public void updateCandidate(Candidate candidate) { + Candidate existingCandidate = candidateDao.findById(candidate.getId()); + if (existingCandidate != null) { + // Ne pas autoriser la modification de l'email + candidate.setMail(existingCandidate.getMail()); + candidateDao.merge(candidate); + } } -} @Override public void deleteCandidate(int id) { Candidate candidate = candidateDao.findById(id); @@ -67,8 +67,8 @@ public void updateCandidate(Candidate candidate) { @Override public Optional<Candidate> findById(int id) { Candidate candidate = candidateDao.findById(id); - return Optional.ofNullable(candidate); + return Optional.ofNullable(candidate); } - - + + } diff --git a/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/CompanyService.java b/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/CompanyService.java index 5dee21b833ee923beb3ab20c9be871ce0de353c8..7a6bd598deb7415cfc018152b314e0161fe32d23 100644 --- a/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/CompanyService.java +++ b/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/CompanyService.java @@ -1,15 +1,21 @@ package fr.atlantique.imt.inf211.jobmngt.service; +import fr.atlantique.imt.inf211.jobmngt.entity.Company; +import fr.atlantique.imt.inf211.jobmngt.entity.JobOffer; + import java.util.List; import java.util.Optional; -import fr.atlantique.imt.inf211.jobmngt.entity.Company; - public interface CompanyService { void saveCompany(Company company); List<Company> getAllCompanies(); - Optional<Company> findById(int id); + Optional<Company> findById(Long id); Optional<Company> findByMail(String mail); // Ajout pour vérifier les doublons void updateCompany(Company company); // Mise à jour d'une entreprise - void deleteCompany(int id); // Supprimer une entreprise + void deleteCompany(Long id); // Supprimer une entreprise + int countJobOffersByCompany(Long companyId); + List<JobOffer> getJobOffersByCompany(Long companyId); + + + } diff --git a/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/CompanyServiceImpl.java b/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/CompanyServiceImpl.java index cc0f5c4adcdc37379dc112e37714a008d19b4257..0d6cae8235130f657b019c0a37105fff3d3bd7f9 100644 --- a/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/CompanyServiceImpl.java +++ b/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/CompanyServiceImpl.java @@ -14,7 +14,7 @@ import fr.atlantique.imt.inf211.jobmngt.entity.JobOffer; @Service public class CompanyServiceImpl implements CompanyService { - + private CompanyDao companyDao; private final JobOfferDao jobOfferDao; @@ -60,7 +60,7 @@ public class CompanyServiceImpl implements CompanyService { return jobOfferDao.countByCompanyId(companyId); } - @Override + @Override public List<JobOffer> getJobOffersByCompany(Long companyId) { return jobOfferDao.findByCompanyId(companyId); } @@ -68,11 +68,11 @@ public class CompanyServiceImpl implements CompanyService { public Company getCompanyById(Long id) { return companyDao.findById(id).orElse(null); } - - + + // @Override // public void updateCompany(Company company) { diff --git a/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/JobOfferServiceImpl.java b/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/JobOfferServiceImpl.java index c67c11884ad3b07988feae3a1818f603908627d9..bfe86f422af4b46639af2bbfb90e2f97be4c0f2e 100644 --- a/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/JobOfferServiceImpl.java +++ b/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/JobOfferServiceImpl.java @@ -8,6 +8,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import fr.atlantique.imt.inf211.jobmngt.dao.JobOfferDao; +import fr.atlantique.imt.inf211.jobmngt.entity.Company; import fr.atlantique.imt.inf211.jobmngt.entity.JobOffer; @Service @@ -25,34 +26,49 @@ public class JobOfferServiceImpl implements JobOfferService { return jobOfferDao.findAll(); } - @Override - public Optional<JobOffer> findById(int id) { - return jobOfferDao.findById(id); + public Optional<JobOffer> findById(Long id) { + Optional<JobOffer> jobOfferOpt = jobOfferDao.findById(id); + System.out.println("🔍 Vérification BDD pour l'offre ID " + id + " : " + (jobOfferOpt.isPresent() ? "Trouvée ✅" : "Non trouvée ❌")); + return jobOfferOpt; } + @Override -public void saveJobOffer(JobOffer jobOffer) { - try { + public void saveJobOffer(JobOffer jobOffer) { if (jobOffer.getPublicationDate() == null) { - jobOffer.setPublicationDate(new Date()); + jobOffer.setPublicationDate(new Date()); + jobOffer.setPublicationDate(new Date()); } - System.out.println("🔹 Tentative d'enregistrement: " + jobOffer); jobOfferDao.save(jobOffer); System.out.println(" Enregistrement réussi !"); - } catch (Exception e) { + }/* catch (Exception e) { System.err.println(" Erreur lors de l'enregistrement: " + e.getMessage()); e.printStackTrace(); - } -} + }*/ + // @Override + // public void updateJobOffer(JobOffer jobOffer) { + // jobOfferDao.save(jobOffer); + // } @Override - public void updateJobOffer(JobOffer jobOffer) { - jobOfferDao.save(jobOffer); + public void deleteJobOffer(Long id) { // ✅ Correction int → Long + jobOfferDao.deleteById(id); } @Override - public void deleteJobOffer(int id) { - jobOfferDao.deleteById(id); + public List<JobOffer> getJobOffersByCompanyId(Long companyId) { + return jobOfferDao.findByCompanyId(companyId); // 🔹 Récupère les offres par entreprise } + + @Override + public List<JobOffer> findByCompany(Company company) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'findByCompany'"); + } + + + + + } diff --git a/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/QualificationLevelService.java b/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/QualificationLevelService.java index ed09cd76ee77f7132c532bdeacd0b9e14524fdf4..7323934062e0cd77b7daa110d310b5faff205bca 100644 --- a/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/QualificationLevelService.java +++ b/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/QualificationLevelService.java @@ -6,6 +6,11 @@ import java.util.Optional; import fr.atlantique.imt.inf211.jobmngt.entity.QualificationLevel; public interface QualificationLevelService { - List<QualificationLevel> getAllQualificationLevels(); + + public List<QualificationLevel> listOfQualificationLevels(); + + Optional<QualificationLevel> findById(int id); + + List<QualificationLevel> getAllQualificationLevels(); } diff --git a/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/QualificationLevelServiceImpl.java b/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/QualificationLevelServiceImpl.java index bdfa524641d733a83f549f6ac3ded7a7e415f75c..c0c7ff671da17ece2f3e05e0c17a534cca8366ec 100644 --- a/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/QualificationLevelServiceImpl.java +++ b/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/QualificationLevelServiceImpl.java @@ -12,17 +12,28 @@ import fr.atlantique.imt.inf211.jobmngt.entity.QualificationLevel; @Service public class QualificationLevelServiceImpl implements QualificationLevelService { + private final QualificationLevelDao qualificationLevelDao; + @Autowired - private QualificationLevelDao qualificationLevelDao; + public QualificationLevelServiceImpl(QualificationLevelDao qualificationLevelDao) { + this.qualificationLevelDao = qualificationLevelDao; + } + + @Override + public List<QualificationLevel> listOfQualificationLevels() { + return qualificationLevelDao.findAll("id", "ASC"); + } @Override public List<QualificationLevel> getAllQualificationLevels() { return qualificationLevelDao.findAll("id", "ASC"); // Ajout des paramètres manquants } - + @Override -public Optional<QualificationLevel> findById(int id) { - return Optional.ofNullable(qualificationLevelDao.findById(id)); -} + public Optional<QualificationLevel> findById(int id) { + return qualificationLevelDao.findById(id); // ✅ Corrigé, pas besoin de orElse(null) + // return Optional.ofNullable(qualificationLevelDao.findById(id)); + } + } diff --git a/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/SectorService.java b/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/SectorService.java index 1032ba0850f5864bbf6ba09fbf18bff180e4753d..185a275c66c1d134704915d23a160d3d353b85d3 100644 --- a/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/SectorService.java +++ b/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/SectorService.java @@ -6,9 +6,15 @@ import java.util.Optional; import fr.atlantique.imt.inf211.jobmngt.entity.Sector; public interface SectorService { + List<Sector> listOfSectors(); // ✅ Ajout de cette méthode + Optional<Sector> findById(int id); // ✅ Changer int en Long + + void saveSector(Sector sector); + void updateSector(Sector sector); + void deleteSector(int id); List<Sector> getAllSectors(); List<Sector> getSectorsByIds(List<Integer> sectorIds); Optional<Sector> findById(long id); - Object listOfSectors(); - public Optional<Sector> findById(int id); + + public long countSectors(); } diff --git a/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/SectorServiceImpl.java b/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/SectorServiceImpl.java index bc6f1b56ed92c9b2e9e0c6dafa9e9ee5d190d62c..b4d86f07622a96caa0f64aad1c5a6d8522cbd416 100644 --- a/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/SectorServiceImpl.java +++ b/src/main/java/fr/atlantique/imt/inf211/jobmngt/service/SectorServiceImpl.java @@ -13,21 +13,31 @@ import fr.atlantique.imt.inf211.jobmngt.entity.Sector; public class SectorServiceImpl implements SectorService { @Autowired - SectorDao sectorDao; + private SectorDao sectorDao; + + @Override + public List<Sector> listOfSectors() { + return sectorDao.findAll(); // ✅ Appel de la nouvelle méthode sans arguments + } + + @Override + public Optional<Sector> findById(int id) { + return Optional.empty(); + } @Override public List<Sector> getAllSectors() { return sectorDao.findAll(null, null); } - + public List<Sector> getSectorsByIds(List<Integer> sectorIds) { return sectorDao.findAllByIds(sectorIds); } @Override - public Optional<Sector> findById(int id) { - return Optional.ofNullable(sectorDao.findById(id)); + public long countSectors() { + return sectorDao.count(); } @Override @@ -35,10 +45,18 @@ public class SectorServiceImpl implements SectorService { // TODO Auto-generated method stub throw new UnsupportedOperationException("Unimplemented method 'findById'"); } + public void saveSector(Sector sector) { + sectorDao.save(sector); + } @Override - public Object listOfSectors() { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'listOfSectors'"); + public void updateSector(Sector sector) { + sectorDao.update(sector); } + + @Override + public void deleteSector(int id) { + sectorDao.delete(id); + } + } diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/JobmngtApplication.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/JobmngtApplication.class index 2b36ca8b345ac2dd44982ef1e6536e08114e7ef7..f0a90d1bbf5e1de067104184ac2327e4bc6ec7c1 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/JobmngtApplication.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/JobmngtApplication.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/config/WebConfig.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/config/WebConfig.class index 50d5c3e4b986652913b1a08586ee99d4b13ff9fb..52731e8e29e734dfac6fcc14f364098385bfd1a1 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/config/WebConfig.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/config/WebConfig.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/ApplicationController.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/ApplicationController.class index ebb1cd07638a3a84ad4cd146dee28fb7cb71cd97..3fcaf5ff35a551475b6e68047acb99678d811296 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/ApplicationController.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/ApplicationController.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/CandidateController.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/CandidateController.class index d0c06cda510e698f9a8eb1d00514346491c3e182..c1d26ac598126b95b48b57bfb0a05a5f924f14ca 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/CandidateController.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/CandidateController.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/CompanyController.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/CompanyController.class index d1170384285d05a36a5981b3d1e94267dbdd2c68..2d63e8afadfea3eb2a4cc75e3f6f7f00c4a55ad9 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/CompanyController.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/CompanyController.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/JobOfferController.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/JobOfferController.class index 9a669740b433576d8024308d6bdad897138692e2..811cc81375a5b878017bc133bf637de270a86cb0 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/JobOfferController.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/JobOfferController.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/LoginController.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/LoginController.class index 4b6498c7530594a9ae6854bfdabd29b9635afd40..90153c1ab690d1c2889ce5dbcc4d948667b050bc 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/LoginController.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/LoginController.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/PagesController.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/PagesController.class index 0ef37c9b68e7a07cc1bb5892a079629c4eb40aa4..947d212e8ad107f1e14b34dc66b858003ed260ec 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/PagesController.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/PagesController.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/QualificationLevelController.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/QualificationLevelController.class index 0c3f48963ee425f88e19fdfcb134f219dfc2e2bb..9662375e4fed106d6562be28ac04d1dfb9bea61d 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/QualificationLevelController.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/QualificationLevelController.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/SectorController.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/SectorController.class index a01cecaf77cb22655abbdd6ad8d10dc170b3df1a..891e652c6835417fc6eb01c4fa8296edae1ee9ac 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/SectorController.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/controller/SectorController.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/converter/CompanyConverter.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/converter/CompanyConverter.class index 63f6a7a42c4a8879294bfd611192931bdfdc3e42..69b5b745c27680d537d723367dd1d26780b226b5 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/converter/CompanyConverter.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/converter/CompanyConverter.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/converter/QualificationLevelConverter.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/converter/QualificationLevelConverter.class index 4e3504981e3513a7882bcb924f0fa95e66fd0fd2..358cb863b000b7b2c99866099dfe450f742eee40 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/converter/QualificationLevelConverter.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/converter/QualificationLevelConverter.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/AppUserDao.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/AppUserDao.class index 4dbc86467838cb1ed89cc2c06242f59e43de5aea..72371914d226adbddc19b8e87dfb2415e2f364e5 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/AppUserDao.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/AppUserDao.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/ApplicationDao.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/ApplicationDao.class index f17cb506f20ad9b2fc5b03eabbc1fdb9d79d772b..8387ebab7a1575d0e80c1445458e1423f979e1da 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/ApplicationDao.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/ApplicationDao.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/ApplicationMessageDao.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/ApplicationMessageDao.class index 56c4b4b35f7e8dff2a54a4aca76fc7ccd4a06708..f0ebdf8b25523edd30d499ec2100aa455b192a1c 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/ApplicationMessageDao.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/ApplicationMessageDao.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/CandidateDao.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/CandidateDao.class index 64ebd03df2efd75d4e2ac34daaa591a03703f052..f18ce38b42f4a6f07d91ac4c0a5f675eb28d12d6 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/CandidateDao.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/CandidateDao.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/CompanyDao.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/CompanyDao.class index 203a0ae5a34ee846ced862c5091760e6bad31ca1..f4523efaf9abc0da87905cd33c5719743f932207 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/CompanyDao.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/CompanyDao.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/JobOfferDao.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/JobOfferDao.class index 8135d3d754e03900af1d7f62cd7ac4372c63ceb3..a925598f027de2690213cf12ef27ff30629aba44 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/JobOfferDao.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/JobOfferDao.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/OfferMessageDao.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/OfferMessageDao.class index 302b39e7f7dd0dda1d8f17acee94d675dfe0e537..9f124def4fd006b38a026a18d5a1919e52396cf1 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/OfferMessageDao.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/OfferMessageDao.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/QualificationLevelDao.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/QualificationLevelDao.class index 8007f008519c4bf388d1662bebad7f2dcaa43986..2ea3970e656f6e73dd8ac2f98f7da640b427b7aa 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/QualificationLevelDao.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/QualificationLevelDao.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/SectorDao.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/SectorDao.class index 09d33755ab8a624dbcfd1b0dd22bd9c993391a0b..e8247d42b70c88de69e88771d4a9efe9868227a7 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/SectorDao.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/dao/SectorDao.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/AppUser.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/AppUser.class index 090606a3afcb7e323b9644541b2b5bab499e6c61..e9fb9bca45ab2cf9833d8ea6508cd46b56c1e4e7 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/AppUser.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/AppUser.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/Application.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/Application.class index 5fddf38c1f2c12a3257598eb8e3d038927f808f6..1db376ad3094759e8307757ae5055fc14d64284f 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/Application.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/Application.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/ApplicationMessage.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/ApplicationMessage.class index 3ea69a3c3b7a79cc8e8032110bc7340cb4dd49ff..94b5d8300bea8f896a3b89ebe32d6d49e72167ef 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/ApplicationMessage.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/ApplicationMessage.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/Candidate.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/Candidate.class index 135543e0180417a02d8be1df9de1e55ba45586f5..1e2bc7aa657a3cfe9be477d995cdb16276863040 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/Candidate.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/Candidate.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/Company.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/Company.class index 4b6589240fa1bb74d160a97f895a5bee30bdec99..a1fd23885096354fe952948017a5a2239e96ceb5 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/Company.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/Company.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/JobOffer.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/JobOffer.class index d0c222ab2361940776710d9a425e073324eeddbc..1821fd1a0edd009d51a7d0cd1e66947164735014 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/JobOffer.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/JobOffer.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/OfferMessage.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/OfferMessage.class index 2bf7663fdb299a1f49f3cfa134e7ee56109f1ff1..c3808951a49b5bab19ef144587e807649ef7254b 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/OfferMessage.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/OfferMessage.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/QualificationLevel.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/QualificationLevel.class index 79b9c5db3994ec9fc109e6191645f40a949a30ff..b9fff9b0711bc03004b71f3a6436d5583a60c8ae 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/QualificationLevel.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/QualificationLevel.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/Role.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/Role.class new file mode 100644 index 0000000000000000000000000000000000000000..9bf8dd8acd032b883c07ca8bb9c1d4057510b7d6 Binary files /dev/null and b/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/Role.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/Sector.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/Sector.class index dc2efbc4ec65c937d69e1b36c9c0b999dadd6a65..4a368de5745fae2cbcee9180b53724f6df60f07a 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/Sector.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/entity/Sector.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/service/AppUserService.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/service/AppUserService.class index 347b8c84689a6cc0ce961a09f81891b049a7dec3..9d72472a36a6ab69616234ea7df7a8b0f74d3aa5 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/service/AppUserService.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/service/AppUserService.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/service/AppUserServiceImpl.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/service/AppUserServiceImpl.class index b7d4f38bb88c61a88aa0531663e2870e6d6b3e81..3228527ea8ab8d6aa2fbdc25684e9fe6230ed4e0 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/service/AppUserServiceImpl.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/service/AppUserServiceImpl.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/service/ApplicationService.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/service/ApplicationService.class index 9039bc596b01e2ab3fc4598fd060419606c97e53..de7ffc19de4d27bdd196383f98c7252afad57b4a 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/service/ApplicationService.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/service/ApplicationService.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/service/ApplicationServiceImpl.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/service/ApplicationServiceImpl.class index 0276f5fbd3ba7d4de348c33ca1a0fb0813c409e0..b62fe88fc7e407352b996c6e7806008729122e18 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/service/ApplicationServiceImpl.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/service/ApplicationServiceImpl.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/service/CandidateService.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/service/CandidateService.class index b53649f409c330bc61f4e400f2630086e32f4a4e..968568c5ee8c9d52857e324fe49acf398ffbd298 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/service/CandidateService.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/service/CandidateService.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/service/CandidateServiceImpl.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/service/CandidateServiceImpl.class index 044c6bb116c183d91051d000a621cd1c4bbdd870..fe49a05345bec1cfe13f4d8ba89a2155edcc41cb 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/service/CandidateServiceImpl.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/service/CandidateServiceImpl.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/service/CompanyService.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/service/CompanyService.class index 531c366e00e39c8d642c1344b34582c97fe73e08..e2861966110f6a9d7e4017cb32fa8e8136582dd6 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/service/CompanyService.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/service/CompanyService.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/service/CompanyServiceImpl.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/service/CompanyServiceImpl.class index 7603576a2573c5fa12706c591dff3ff3da7d3ff9..8ad1a9e13a4bda5e25887a5aab25d99113405907 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/service/CompanyServiceImpl.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/service/CompanyServiceImpl.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/service/JobOfferService.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/service/JobOfferService.class index 331abe9a8037f5ae8fb6f5bf213ae75d3cd11c95..26391a03bc3ab02727f3298cfefbca83ab08cd5f 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/service/JobOfferService.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/service/JobOfferService.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/service/JobOfferServiceImpl.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/service/JobOfferServiceImpl.class index 0e2b451e33427573d29944f7307137fa13bd7dc1..f6bb8ccbf30bcc046b83cc026ed53ce875ef1e96 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/service/JobOfferServiceImpl.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/service/JobOfferServiceImpl.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/service/QualificationLevelService.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/service/QualificationLevelService.class index 1b70eef46d04839cbe15a53e61fb03fafbfb0716..fe80d7a4927a73af6a43447607f8f758237bd9ed 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/service/QualificationLevelService.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/service/QualificationLevelService.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/service/QualificationLevelServiceImpl.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/service/QualificationLevelServiceImpl.class index 65051ed719687baf738b9e59335caa59eac0262d..463ddd644b26be9ddcb2d3dcfffcab69c3d02e2f 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/service/QualificationLevelServiceImpl.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/service/QualificationLevelServiceImpl.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/service/SectorService.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/service/SectorService.class index ad6840b8f640dd1a00ced437059aa871aedb98d8..16a09ecf2262483ee0bebe3ff3837ef520291c49 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/service/SectorService.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/service/SectorService.class differ diff --git a/target/classes/fr/atlantique/imt/inf211/jobmngt/service/SectorServiceImpl.class b/target/classes/fr/atlantique/imt/inf211/jobmngt/service/SectorServiceImpl.class index 9592705e7684f3567598e4b8b7b472147a8bba1d..b57324062d1f8c4154ef0ea63660752754e0d559 100644 Binary files a/target/classes/fr/atlantique/imt/inf211/jobmngt/service/SectorServiceImpl.class and b/target/classes/fr/atlantique/imt/inf211/jobmngt/service/SectorServiceImpl.class differ