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