Index: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/config/SecurityConfiguration.java
===================================================================
--- jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/config/SecurityConfiguration.java	(revision befb98800bd9171fa5ce8a5f29287e549f0ff5aa)
+++ jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/config/SecurityConfiguration.java	(revision 08f82ec612b1b125feec3dcd5c8c0f1062f09e18)
@@ -31,18 +31,23 @@
         http.csrf(AbstractHttpConfigurer::disable)
                 .authorizeHttpRequests(request -> request
-                        // TO DO: FIX PERMISSIONS
-                        .requestMatchers("/api/job-advertisements/**",
-                                "/api/job-advertisements/view/**",
+                        .requestMatchers(
+                                "/api/auth/**",
+                                "/api/job-advertisements/**",
+                                "/api/applications/**",
                                 "/api/recruiter/**",
-                                "/api/job-seeker/**",
-                                "/api/recruiter/{id}/info",
-                                "/api/recruiter/{id}/edit-info",
-                                "/api/job-advertisements/apply/**",
-                                "/api/auth/**",
-                                "/api/resume/**",
-                                "/api/my-applications/**",
-                                "/api/applications/{id}/update",
-                                "/api/admin/**").permitAll()
-//                        .requestMatchers("/api/recruiter").hasAnyAuthority(Role.ROLE_RECRUITER.name())
+                                "/api/job-seeker/**"
+                        ).permitAll()
+                        .requestMatchers("/api/admin/**").hasAnyAuthority(Role.ROLE_ADMIN.name())
+                        .requestMatchers("/api/recruiter/{id}/edit-info").hasAnyAuthority(Role.ROLE_RECRUITER.name())
+                        .requestMatchers("/api/recruiter/submit-logo").hasAnyAuthority(Role.ROLE_RECRUITER.name())
+                        .requestMatchers("/api/job-seeker/{id}/edit-info").hasAnyAuthority(Role.ROLE_RECRUITER.name())
+                        .requestMatchers("/api/job-seeker/submit-profile-pic").hasAnyAuthority(Role.ROLE_JOBSEEKER.name())
+                        .requestMatchers("/api/job-advertisements/add").hasAnyAuthority(Role.ROLE_RECRUITER.name())
+                        .requestMatchers("/api/job-advertisements/edit/{id}").hasAnyAuthority(Role.ROLE_RECRUITER.name())
+                        .requestMatchers("/api/job-advertisements/delete/{id}").hasAnyAuthority(Role.ROLE_RECRUITER.name())
+                        .requestMatchers("/api/applications/{id}/update").hasAnyAuthority(Role.ROLE_RECRUITER.name())
+                        .requestMatchers("/api/job-advertisements/{advertisement_id}/applications").hasAnyAuthority(Role.ROLE_RECRUITER.name())
+                        .requestMatchers("/api/applications/submit").hasAnyAuthority(Role.ROLE_JOBSEEKER.name())
+                        .requestMatchers("/api/my-applications/{id}").hasAnyAuthority(Role.ROLE_JOBSEEKER.name())
                         .anyRequest().authenticated())
                 .sessionManagement(manager -> manager.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
Index: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/controllers/ApplicationController.java
===================================================================
--- jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/controllers/ApplicationController.java	(revision befb98800bd9171fa5ce8a5f29287e549f0ff5aa)
+++ jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/controllers/ApplicationController.java	(revision 08f82ec612b1b125feec3dcd5c8c0f1062f09e18)
@@ -42,7 +42,7 @@
     }
 
-    @GetMapping("/resume/{fileName:.+}")
-    public ResponseEntity<Resource> downloadResume(@PathVariable("fileName") String fileName) {
-        Resource resource = applicationService.loadResumeAsResource(fileName);
+    @GetMapping("/applications/{id}/download-resume")
+    public ResponseEntity<Resource> downloadResume(@PathVariable("id") Long applicationId) {
+        Resource resource = applicationService.loadResumeAsResource(applicationId);
         return ResponseEntity.ok()
                 .contentType(MediaType.APPLICATION_PDF)
@@ -51,5 +51,5 @@
     }
 
-    @PostMapping("/job-advertisements/apply")
+    @PostMapping("/applications/submit")
     public ResponseEntity<ApplicationDetailsDTO> submitApplication(
             @RequestParam("jobSeekerId") Long jobSeekerId,
@@ -61,8 +61,8 @@
             @RequestParam("messageToRecruiter") String messageToRecruiter) {
 
-        ApplicationDTO applicationDTO = new ApplicationDTO(jobSeekerId, jobAdId, resumeFile, answerOne, answerTwo, answerThree, messageToRecruiter);
+        ApplicationDTO applicationDTO = new ApplicationDTO(jobSeekerId, jobAdId,
+                resumeFile, answerOne, answerTwo, answerThree, messageToRecruiter);
         ApplicationDetailsDTO applicationDetailsDTO = applicationService.submitApplication(applicationDTO);
         return new ResponseEntity<>(applicationDetailsDTO, HttpStatus.OK);
     }
-
 }
Index: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/controllers/JobAdvertisementController.java
===================================================================
--- jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/controllers/JobAdvertisementController.java	(revision befb98800bd9171fa5ce8a5f29287e549f0ff5aa)
+++ jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/controllers/JobAdvertisementController.java	(revision 08f82ec612b1b125feec3dcd5c8c0f1062f09e18)
@@ -46,5 +46,5 @@
 
     @GetMapping("/recruiter/{id}")
-    public ResponseEntity<?> findALlJobAdvertisementsByRecruiterId(@PathVariable Long id) {
+    public ResponseEntity<?> findAllJobAdvertisementsByRecruiterId(@PathVariable Long id) {
         List<JobAdDetailsDTO> jobAdDetailsDTOS = jobAdvertisementService.findAllJobAdvertisementsByRecruiterId(id);
         return new ResponseEntity<>(jobAdDetailsDTOS, HttpStatus.OK);
Index: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/models/applications/Application.java
===================================================================
--- jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/models/applications/Application.java	(revision befb98800bd9171fa5ce8a5f29287e549f0ff5aa)
+++ jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/models/applications/Application.java	(revision 08f82ec612b1b125feec3dcd5c8c0f1062f09e18)
@@ -32,6 +32,6 @@
     private JobAdvertisement jobAdvertisement;
 
-    @Column(name = "resume_file_name", nullable = false)
-    private String resumeFileName;
+    @Column(name = "resume_file_name", nullable = true)
+    private String resumeFilePath;
 
     @ElementCollection
@@ -45,8 +45,8 @@
     private ApplicationStatus status;
 
-    public Application(JobSeeker jobSeeker, JobAdvertisement jobAdvertisement, String resumeFileName, List<String> answers, String message) {
+    public Application(JobSeeker jobSeeker, JobAdvertisement jobAdvertisement, List<String> answers, String message) {
         this.jobSeeker = jobSeeker;
         this.jobAdvertisement = jobAdvertisement;
-        this.resumeFileName = resumeFileName;
+        this.resumeFilePath = "";
         this.questionAnswers = answers;
         this.message = message;
@@ -69,5 +69,5 @@
                 application.getJobAdvertisement().getTitle(),
                 application.getQuestionAnswers(),
-                application.getResumeFileName(),
+                application.getResumeFilePath(),
                 application.getMessage(),
                 application.getSubmittedOn(),
Index: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/models/users/DTO/JobSeekerEditDetailsDTO.java
===================================================================
--- jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/models/users/DTO/JobSeekerEditDetailsDTO.java	(revision 08f82ec612b1b125feec3dcd5c8c0f1062f09e18)
+++ jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/models/users/DTO/JobSeekerEditDetailsDTO.java	(revision 08f82ec612b1b125feec3dcd5c8c0f1062f09e18)
@@ -0,0 +1,15 @@
+package mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class JobSeekerEditDetailsDTO {
+    private String email;
+    private String firstName;
+    private String lastName;
+    private String phoneNumber;
+}
Index: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/models/users/DTO/RecruiterAdminDetailsDTO.java
===================================================================
--- jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/models/users/DTO/RecruiterAdminDetailsDTO.java	(revision 08f82ec612b1b125feec3dcd5c8c0f1062f09e18)
+++ jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/models/users/DTO/RecruiterAdminDetailsDTO.java	(revision 08f82ec612b1b125feec3dcd5c8c0f1062f09e18)
@@ -0,0 +1,22 @@
+package mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class RecruiterAdminDetailsDTO {
+    private Long id;
+    private String email;
+    private String companyName;
+    private String companyDescription;
+    private String contactEmail;
+    private String contactPhoneNumber;
+    private String receptionist;
+    private boolean hasAccess;
+    private LocalDateTime registeredOn;
+}
Index: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/models/users/DTO/RecruiterEditDetailsDTO.java
===================================================================
--- jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/models/users/DTO/RecruiterEditDetailsDTO.java	(revision 08f82ec612b1b125feec3dcd5c8c0f1062f09e18)
+++ jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/models/users/DTO/RecruiterEditDetailsDTO.java	(revision 08f82ec612b1b125feec3dcd5c8c0f1062f09e18)
@@ -0,0 +1,18 @@
+package mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class RecruiterEditDetailsDTO {
+    private String email;
+    private String companyName;
+    private String companyDescription;
+    private String contactEmail;
+    private String contactPhoneNumber;
+    private String receptionist;
+}
Index: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/ApplicationServiceImpl.java
===================================================================
--- jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/ApplicationServiceImpl.java	(revision befb98800bd9171fa5ce8a5f29287e549f0ff5aa)
+++ jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/ApplicationServiceImpl.java	(revision 08f82ec612b1b125feec3dcd5c8c0f1062f09e18)
@@ -41,5 +41,5 @@
     public ApplicationServiceImpl(@Value("${file.upload-dir}") String uploadDir, UserRepository userRepository, ApplicationRepository applicationRepository, JobAdvertisementRepository jobAdvertisementRepository,
                                   JobSeekerRepository jobSeekerRepository) {
-        this.fileStorageLocation = Paths.get(uploadDir).toAbsolutePath().normalize();
+        this.fileStorageLocation = Paths.get(uploadDir + "/applications").toAbsolutePath().normalize();
 
         try {
@@ -58,17 +58,12 @@
     public ApplicationDetailsDTO submitApplication(ApplicationDTO applicationDTO) {
 
+        JobSeeker jobSeeker = jobSeekerRepository.findById(applicationDTO.getJobSeekerId())
+                .orElseThrow(() -> new IllegalArgumentException("User not found."));
+        JobAdvertisement jobAdvertisement = jobAdvertisementRepository.findById(applicationDTO.getJobAdId())
+                .orElseThrow(() -> new IllegalArgumentException("Job advertisement not found."));
+
         if (applicationDTO.getResumeFile().isEmpty()) {
             throw new RuntimeException("Failed to store empty file.");
         }
-
-        Path targetLocation = this.fileStorageLocation.resolve(applicationDTO.getResumeFile().getOriginalFilename());
-        try {
-            Files.copy(applicationDTO.getResumeFile().getInputStream(), targetLocation, StandardCopyOption.REPLACE_EXISTING);
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        }
-
-        JobSeeker jobSeeker = jobSeekerRepository.findById(applicationDTO.getJobSeekerId()).orElseThrow(() -> new IllegalArgumentException("User not found"));
-        JobAdvertisement jobAdvertisement = jobAdvertisementRepository.findById(applicationDTO.getJobAdId()).orElseThrow(() -> new IllegalArgumentException("Job Ad not found"));
 
         List<String> answers = new ArrayList<>();
@@ -77,6 +72,23 @@
         answers.add(applicationDTO.getAnswerThree());
 
-        Application application = new Application(jobSeeker, jobAdvertisement, applicationDTO.getResumeFile().getOriginalFilename(), answers, applicationDTO.getMessageToRecruiter());
-        applicationRepository.save(application);
+        Application application = new Application(jobSeeker, jobAdvertisement,
+                answers,applicationDTO.getMessageToRecruiter());
+        application = applicationRepository.save(application);
+
+        Path filePath = this.fileStorageLocation.resolve(String.valueOf(application.getId())).resolve("resume");
+        Path targetLocation = filePath.resolve(applicationDTO.getResumeFile().getOriginalFilename());
+
+        try {
+            Files.createDirectories(filePath);
+            Files.copy(applicationDTO.getResumeFile().getInputStream(), targetLocation);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+
+        String relativePath = Paths.get("uploads","applications",String.valueOf(application.getId()),
+                "resume", applicationDTO.getResumeFile().getOriginalFilename()).toString();
+        application.setResumeFilePath(relativePath);
+        application = applicationRepository.save(application);
+
         return Application.mapToApplicationDetailsDTO(application);
     }
@@ -95,15 +107,20 @@
 
     @Override
-    public Resource loadResumeAsResource(String fileName) {
+    public Resource loadResumeAsResource(Long applicationId) {
+        Application application = applicationRepository.findById(applicationId).
+                orElseThrow(() -> new IllegalArgumentException("Application not found"));
+
+        String relativeFilePath = application.getResumeFilePath();
+        Path filePath = fileStorageLocation.getParent().getParent().resolve(relativeFilePath).normalize();
+
         try {
-            Path filePath = fileStorageLocation.resolve(fileName).normalize();
             Resource resource = new UrlResource(filePath.toUri());
             if (resource.exists()) {
                 return resource;
             } else {
-                throw new RuntimeException("File not found " + fileName);
+                throw new RuntimeException("File not found: " + relativeFilePath);
             }
         } catch (IOException ex) {
-            throw new RuntimeException("File not found " + fileName, ex);
+            throw new RuntimeException("File path is invalid: " + relativeFilePath, ex);
         }
     }
Index: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/JobAdvertisementServiceImpl.java
===================================================================
--- jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/JobAdvertisementServiceImpl.java	(revision befb98800bd9171fa5ce8a5f29287e549f0ff5aa)
+++ jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/JobAdvertisementServiceImpl.java	(revision 08f82ec612b1b125feec3dcd5c8c0f1062f09e18)
@@ -17,5 +17,4 @@
 
 import java.time.LocalDate;
-import java.time.LocalDateTime;
 import java.util.Comparator;
 import java.util.List;
@@ -24,5 +23,4 @@
 @RequiredArgsConstructor
 public class JobAdvertisementServiceImpl implements JobAdvertisementService {
-    private final UserRepository userRepository;
     private final JobAdvertisementRepository jobAdvertisementRepository;
     private final RecruiterRepository recruiterRepository;
@@ -30,5 +28,6 @@
     @Override
     public JobAdDetailsDTO addJobAdvertisement(JobAdvertisementDTO jobAdvertisementDTO) {
-        Recruiter recruiter = recruiterRepository.findById(jobAdvertisementDTO.getId()).orElseThrow(() -> new IllegalArgumentException("User not found"));
+        Recruiter recruiter = recruiterRepository.findById(jobAdvertisementDTO.getId())
+                .orElseThrow(() -> new IllegalArgumentException("User not found"));
         JobAdvertisement jobAdvertisement = new JobAdvertisement(
                 recruiter,
@@ -47,5 +46,6 @@
     @Override
     public JobAdDetailsDTO editJobAdvertisement(Long id, JobAdvertisementDTO jobAdvertisementDTO) {
-        JobAdvertisement jobAdvertisement = jobAdvertisementRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("Job Advertisement not found"));
+        JobAdvertisement jobAdvertisement = jobAdvertisementRepository.findById(id)
+                .orElseThrow(() -> new IllegalArgumentException("Job Advertisement not found"));
         jobAdvertisement.setTitle(jobAdvertisementDTO.getTitle());
         jobAdvertisement.setDescription(jobAdvertisementDTO.getDescription());
Index: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/JobSeekerServiceImpl.java
===================================================================
--- jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/JobSeekerServiceImpl.java	(revision 08f82ec612b1b125feec3dcd5c8c0f1062f09e18)
+++ jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/JobSeekerServiceImpl.java	(revision 08f82ec612b1b125feec3dcd5c8c0f1062f09e18)
@@ -0,0 +1,101 @@
+package mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.impl;
+
+import lombok.RequiredArgsConstructor;
+import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.JobSeekerEditDetailsDTO;
+import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.JobSeeker;
+import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.mappers.JobSeekerMapper;
+import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.repositories.JobSeekerRepository;
+import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef.JobSeekerService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.UrlResource;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+
+@Service
+@RequiredArgsConstructor
+public class JobSeekerServiceImpl implements JobSeekerService {
+
+    private final JobSeekerRepository jobSeekerRepository;
+    private final Path profilePicStorageLocation;
+
+    @Autowired
+    JobSeekerServiceImpl(@Value("./uploads") String uploadDir, JobSeekerRepository jobSeekerRepository) {
+        this.jobSeekerRepository = jobSeekerRepository;
+
+        this.profilePicStorageLocation = Paths.get(uploadDir + "/job-seekers").toAbsolutePath().normalize();
+        try {
+            Files.createDirectories(this.profilePicStorageLocation);
+        } catch (IOException ex) {
+            throw new RuntimeException("Could not create the directory where the uploaded files will be stored.", ex);
+        }
+    }
+
+    @Override
+    public JobSeekerEditDetailsDTO editJobSeekerDetailsById(Long jobSeekerId, JobSeekerEditDetailsDTO jobSeekerEditDetailsDTO) {
+        JobSeeker jobSeeker = jobSeekerRepository.findById(jobSeekerId).orElse(null);
+        jobSeeker.setEmail(jobSeekerEditDetailsDTO.getEmail());
+        jobSeeker.setFirstName(jobSeekerEditDetailsDTO.getFirstName());
+        jobSeeker.setLastName(jobSeekerEditDetailsDTO.getLastName());
+        jobSeeker.setPhoneNumber(jobSeekerEditDetailsDTO.getPhoneNumber());
+        jobSeekerRepository.save(jobSeeker);
+        return JobSeekerMapper.mapToJobSeekerEditDetailsDTO(jobSeeker);
+    }
+
+    @Override
+    public JobSeekerEditDetailsDTO getJobSeekerEditDetailsById(Long jobSeekerId) {
+        JobSeeker jobSeeker = jobSeekerRepository.findById(jobSeekerId).orElse(null);
+        return JobSeekerMapper.mapToJobSeekerEditDetailsDTO(jobSeeker);
+    }
+
+    @Override
+    public void submitProfilePic(Long jobSeekerId, MultipartFile profilePicFile) {
+        Path jobSeekerProfilePicDir = this.profilePicStorageLocation.resolve(String.valueOf(jobSeekerId)).resolve("profile-pics");
+
+        try {
+            Files.createDirectories(jobSeekerProfilePicDir);
+            String originalFileName = profilePicFile.getOriginalFilename();
+
+            if(originalFileName != null) {
+                Path targetLocation = jobSeekerProfilePicDir.resolve(originalFileName);
+                Files.copy(profilePicFile.getInputStream(), targetLocation, StandardCopyOption.REPLACE_EXISTING);
+
+                JobSeeker jobSeeker = jobSeekerRepository.findById(jobSeekerId).orElse(null);
+                String relativePath = Paths.get("uploads", "job-seekers", String.valueOf(jobSeekerId), "profile-pics", originalFileName).toString();
+
+                jobSeeker.setProfilePicFilePath(relativePath);
+                jobSeekerRepository.save(jobSeeker);
+            }
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public Resource loadProfilePicAsResource(Long jobSeekerId) {
+       JobSeeker jobSeeker =  jobSeekerRepository.findById(jobSeekerId)
+               .orElseThrow(() -> new RuntimeException("Job Seeker not found"));
+
+       try {
+           String relativeProfilePicPath = jobSeeker.getProfilePicFilePath();
+           Path profilePicPath = profilePicStorageLocation.getParent().getParent().resolve(relativeProfilePicPath);
+            Resource resource = new UrlResource(profilePicPath.toUri());
+            if(resource.exists()) {
+                return resource;
+            } else {
+                throw new RuntimeException("Could not find profile pic at " + profilePicPath);
+            }
+       } catch (IOException ex) {
+           throw new RuntimeException(ex);
+       }
+
+
+    }
+}
Index: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/RecruiterServiceImpl.java
===================================================================
--- jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/RecruiterServiceImpl.java	(revision befb98800bd9171fa5ce8a5f29287e549f0ff5aa)
+++ jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/RecruiterServiceImpl.java	(revision 08f82ec612b1b125feec3dcd5c8c0f1062f09e18)
@@ -32,5 +32,5 @@
         this.recruiterRepository = recruiterRepository;
 
-        this.logoStorageLocation = Paths.get(uploadDir + "/logo").toAbsolutePath().normalize();
+        this.logoStorageLocation = Paths.get(uploadDir + "/recruiters").toAbsolutePath().normalize();
         try {
             Files.createDirectories(this.logoStorageLocation);
@@ -70,5 +70,5 @@
     public void submitLogo(Long recruiterId, MultipartFile logoFile) {
 
-        Path recruiterLogoDir = this.logoStorageLocation.resolve(String.valueOf(recruiterId));
+        Path recruiterLogoDir = this.logoStorageLocation.resolve(String.valueOf(recruiterId)).resolve("logos");
         try {
             Files.createDirectories(recruiterLogoDir);
@@ -82,5 +82,5 @@
                 Recruiter recruiter = recruiterRepository.findById(recruiterId)
                         .orElseThrow(() -> new RuntimeException("Recruiter not found"));
-                String relativePath = Paths.get("uploads", "logo", String.valueOf(recruiterId), originalFilename).toString();
+                String relativePath = Paths.get("uploads","recruiters", String.valueOf(recruiterId), "logos", originalFilename).toString();
                 recruiter.setLogoFilePath(relativePath);
                 recruiterRepository.save(recruiter);
Index: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/intef/ApplicationService.java
===================================================================
--- jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/intef/ApplicationService.java	(revision befb98800bd9171fa5ce8a5f29287e549f0ff5aa)
+++ jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/intef/ApplicationService.java	(revision 08f82ec612b1b125feec3dcd5c8c0f1062f09e18)
@@ -14,5 +14,5 @@
     List<ApplicationDetailsDTO> findAllByJobAdvertisementId(Long jobId);
     List<ApplicationDetailsDTO> findAllByJobSeekerId(Long jobSeekerId);
-    Resource loadResumeAsResource(String fileName);
+    Resource loadResumeAsResource(Long applicationId);
     ApplicationStatusDTO updateApplicationStatus(Long id, String status);
 }
Index: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/intef/JobSeekerService.java
===================================================================
--- jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/intef/JobSeekerService.java	(revision 08f82ec612b1b125feec3dcd5c8c0f1062f09e18)
+++ jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/intef/JobSeekerService.java	(revision 08f82ec612b1b125feec3dcd5c8c0f1062f09e18)
@@ -0,0 +1,15 @@
+package mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef;
+
+import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.JobSeekerEditDetailsDTO;
+import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RecruiterEditDetailsDTO;
+import org.springframework.core.io.Resource;
+import org.springframework.web.multipart.MultipartFile;
+
+public interface JobSeekerService {
+
+    JobSeekerEditDetailsDTO editJobSeekerDetailsById(Long jobSeekerId, JobSeekerEditDetailsDTO jobSeekerEditDetailsDTO);
+    JobSeekerEditDetailsDTO getJobSeekerEditDetailsById(Long jobSeekerId);
+
+    void submitProfilePic(Long jobSeekerId, MultipartFile logoFile);
+    Resource loadProfilePicAsResource(Long jobSeekerId);
+}
