Index: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/AdminServiceImpl.java
===================================================================
--- jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/AdminServiceImpl.java	(revision 0f0add0e646bd880b8213e381f57f621bc0e6861)
+++ 	(revision )
@@ -1,39 +1,0 @@
-package mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.impl;
-
-import lombok.AllArgsConstructor;
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RecruiterAdminDetailsDTO;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RecruiterDetailsDTO;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.Recruiter;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.mappers.RecruiterMapper;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.repositories.RecruiterRepository;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef.AdminService;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef.RecruiterService;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-@Service
-@AllArgsConstructor
-public class AdminServiceImpl implements AdminService {
-    private final RecruiterService recruiterService;
-    private final RecruiterRepository recruiterRepository;
-
-    @Override
-    public RecruiterAdminDetailsDTO changeAccess(long recruiterId, boolean access) {
-        Recruiter recruiter = recruiterRepository.findById(recruiterId).orElse(null);
-        if (recruiter != null) {
-            recruiter.setHasAccess(access);
-            recruiterRepository.save(recruiter);
-            return RecruiterMapper.mapToRecruiterAdminDetailsDTO(recruiter);
-        }
-        return null;
-
-    }
-
-    @Override
-    public List<RecruiterAdminDetailsDTO> findAllRecruiters() {
-        List<Recruiter> recruiterList = recruiterRepository.findAll();
-        return recruiterList.stream().map(RecruiterMapper::mapToRecruiterAdminDetailsDTO).toList();
-    }
-}
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 0f0add0e646bd880b8213e381f57f621bc0e6861)
+++ 	(revision )
@@ -1,136 +1,0 @@
-package mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.impl;
-
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.applications.DTO.ApplicationDetailsDTO;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.applications.DTO.ApplicationStatusDTO;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.enumerations.ApplicationStatus;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.JobSeeker;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.repositories.JobSeekerRepository;
-import org.springframework.core.io.Resource;
-import org.springframework.core.io.UrlResource;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.applications.Application;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.applications.DTO.ApplicationDTO;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.job_advertisements.JobAdvertisement;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.User;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.repositories.ApplicationRepository;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.repositories.JobAdvertisementRepository;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.repositories.UserRepository;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef.ApplicationService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
-
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.nio.file.StandardCopyOption;
-import java.util.ArrayList;
-import java.util.List;
-
-@Service
-//@RequiredArgsConstructor
-public class ApplicationServiceImpl implements ApplicationService {
-    private final Path fileStorageLocation;
-
-    private final UserRepository userRepository;
-    private final ApplicationRepository applicationRepository;
-    private final JobAdvertisementRepository jobAdvertisementRepository;
-    private final JobSeekerRepository jobSeekerRepository;
-
-    @Autowired
-    public ApplicationServiceImpl(@Value("${file.upload-dir}") String uploadDir, UserRepository userRepository, ApplicationRepository applicationRepository, JobAdvertisementRepository jobAdvertisementRepository,
-                                  JobSeekerRepository jobSeekerRepository) {
-        this.fileStorageLocation = Paths.get(uploadDir + "/applications").toAbsolutePath().normalize();
-
-        try {
-            Files.createDirectories(this.fileStorageLocation);
-        } catch (IOException ex) {
-            throw new RuntimeException("Could not create the directory where the uploaded files will be stored.", ex);
-        }
-
-        this.userRepository = userRepository;
-        this.applicationRepository = applicationRepository;
-        this.jobAdvertisementRepository = jobAdvertisementRepository;
-        this.jobSeekerRepository = jobSeekerRepository;
-    }
-
-    @Override
-    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.");
-        }
-
-        List<String> answers = new ArrayList<>();
-        answers.add(applicationDTO.getAnswerOne());
-        answers.add(applicationDTO.getAnswerTwo());
-        answers.add(applicationDTO.getAnswerThree());
-
-        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);
-    }
-
-    @Override
-    public List<ApplicationDetailsDTO> findAllByJobAdvertisementId(Long jobId) {
-        List<Application> applications =  applicationRepository.findAllByJobAdvertisementId(jobId);
-        return applications.stream().map(Application::mapToApplicationDetailsDTO).toList();
-    }
-
-    @Override
-    public List<ApplicationDetailsDTO> findAllByJobSeekerId(Long jobSeekerId) {
-       List<Application> applications = applicationRepository.findAllByJobSeekerId(jobSeekerId);
-       return applications.stream().map(Application::mapToApplicationDetailsDTO).toList();
-    }
-
-    @Override
-    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 {
-            Resource resource = new UrlResource(filePath.toUri());
-            if (resource.exists()) {
-                return resource;
-            } else {
-                throw new RuntimeException("File not found: " + relativeFilePath);
-            }
-        } catch (IOException ex) {
-            throw new RuntimeException("File path is invalid: " + relativeFilePath, ex);
-        }
-    }
-
-    @Override
-    public ApplicationStatusDTO updateApplicationStatus(Long id, String status) {
-       Application application = applicationRepository.findById(id).orElse(null);
-        System.out.println(status);
-       application.setStatus(ApplicationStatus.valueOf(status));
-       applicationRepository.save(application);
-       return new ApplicationStatusDTO(id, status);
-    }
-}
Index: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/AuthServiceImpl.java
===================================================================
--- jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/AuthServiceImpl.java	(revision 0f0add0e646bd880b8213e381f57f621bc0e6861)
+++ jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/AuthServiceImpl.java	(revision d8b6c91094bd4c748b347d914a3c4c3745d51587)
@@ -18,5 +18,4 @@
 import org.springframework.stereotype.Service;
 
-import java.time.LocalDateTime;
 import java.util.HashMap;
 
@@ -32,9 +31,8 @@
     private final JwtService jwtService;
 
+
     @Override
     public User signUpJobSeeker(JobSeeker jobSeeker) {
         jobSeeker.setPassword(passwordEncoder.encode(jobSeeker.getPassword()));
-        jobSeeker.setHasAccess(true);
-        jobSeeker.setRegisteredOn(LocalDateTime.now());
         return jobSeekerRepository.save(jobSeeker);
     }
@@ -42,6 +40,4 @@
     public User signUpRecruiter(Recruiter recruiter) {
         recruiter.setPassword(passwordEncoder.encode(recruiter.getPassword()));
-        recruiter.setHasAccess(false);
-        recruiter.setRegisteredOn(LocalDateTime.now());
         return recruiterRepository.save(recruiter);
     }
@@ -54,5 +50,5 @@
         String refreshJwt = jwtService.generateRefreshToken(new HashMap<>(), user);
 
-        return new JwtAuthResponse(user.getId(), user.getEmail(), user.getName(), user.getRole().name(), user.isHasAccess(), jwt, refreshJwt);
+        return new JwtAuthResponse(user.getEmail(), user.getName(), user.getRole().name(), jwt, refreshJwt);
     }
     
@@ -63,5 +59,5 @@
             String jwt = jwtService.generateToken(user);
 
-            return new JwtAuthResponse(user.getId(), user.getEmail(), user.getName(), user.getRole().name(), user.isHasAccess(), jwt, refreshTokenRequest.getToken());
+            return new JwtAuthResponse(user.getEmail(), user.getName(), user.getRole().name(), jwt, refreshTokenRequest.getToken());
         }
         return null;
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 0f0add0e646bd880b8213e381f57f621bc0e6861)
+++ 	(revision )
@@ -1,137 +1,0 @@
-package mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.impl;
-
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.enumerations.EmploymentStatus;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.enumerations.JobType;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.job_advertisements.DTO.JobAdDetailsDTO;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.job_advertisements.DTO.JobAdFilterDTO;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.job_advertisements.DTO.JobAdvertisementDTO;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.job_advertisements.JobAdvertisement;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.Recruiter;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.User;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.repositories.JobAdvertisementRepository;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.repositories.RecruiterRepository;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.repositories.UserRepository;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef.JobAdvertisementService;
-import org.springframework.stereotype.Service;
-
-import java.time.LocalDate;
-import java.util.Comparator;
-import java.util.List;
-
-@Service
-@RequiredArgsConstructor
-public class JobAdvertisementServiceImpl implements JobAdvertisementService {
-    private final JobAdvertisementRepository jobAdvertisementRepository;
-    private final RecruiterRepository recruiterRepository;
-
-    @Override
-    public JobAdDetailsDTO addJobAdvertisement(JobAdvertisementDTO jobAdvertisementDTO) {
-        Recruiter recruiter = recruiterRepository.findById(jobAdvertisementDTO.getId())
-                .orElseThrow(() -> new IllegalArgumentException("User not found"));
-        JobAdvertisement jobAdvertisement = new JobAdvertisement(
-                recruiter,
-                jobAdvertisementDTO.getTitle(),
-                jobAdvertisementDTO.getDescription(),
-                jobAdvertisementDTO.getIndustry(),
-                jobAdvertisementDTO.getStartingSalary(),
-                LocalDate.parse(jobAdvertisementDTO.getActiveUntil()),
-                JobType.valueOf(jobAdvertisementDTO.getJobType()),
-                EmploymentStatus.valueOf(jobAdvertisementDTO.getEmploymentStatus())
-        );
-        jobAdvertisementRepository.save(jobAdvertisement);
-        return JobAdvertisement.mapToJobAdDetailsDTO(jobAdvertisement);
-    }
-
-    @Override
-    public JobAdDetailsDTO editJobAdvertisement(Long id, JobAdvertisementDTO jobAdvertisementDTO) {
-        JobAdvertisement jobAdvertisement = jobAdvertisementRepository.findById(id)
-                .orElseThrow(() -> new IllegalArgumentException("Job Advertisement not found"));
-        jobAdvertisement.setTitle(jobAdvertisementDTO.getTitle());
-        jobAdvertisement.setDescription(jobAdvertisementDTO.getDescription());
-        jobAdvertisement.setIndustry(jobAdvertisementDTO.getIndustry());
-        jobAdvertisement.setStartingSalary(jobAdvertisementDTO.getStartingSalary());
-        jobAdvertisement.setActiveUntil(LocalDate.parse(jobAdvertisementDTO.getActiveUntil()));
-        jobAdvertisement.setActive(jobAdvertisement.isJobAdActive());
-        jobAdvertisement.setJobType(JobType.valueOf(jobAdvertisementDTO.getJobType()));
-        jobAdvertisement.setEmploymentStatus(EmploymentStatus.valueOf(jobAdvertisementDTO.getEmploymentStatus()));
-        jobAdvertisementRepository.save(jobAdvertisement);
-        return JobAdvertisement.mapToJobAdDetailsDTO(jobAdvertisement);
-    }
-
-    @Override
-    public void deleteJobAdvertisement(Long jobAdvertisementId) {
-        jobAdvertisementRepository.deleteById(jobAdvertisementId);
-    }
-
-    @Override
-    public List<JobAdDetailsDTO> findAllJobAdvertisements() {
-        List<JobAdvertisement> jobAdvertisementList = jobAdvertisementRepository.findAll();
-        jobAdvertisementList.forEach(jobAdvertisement -> {
-            if (!jobAdvertisement.isJobAdActive() && jobAdvertisement.isActive()) {
-                jobAdvertisement.setActive(false);
-                jobAdvertisementRepository.save(jobAdvertisement);
-            } else if (jobAdvertisement.isJobAdActive() && !jobAdvertisement.isActive()) {
-                jobAdvertisement.setActive(true);
-                jobAdvertisementRepository.save(jobAdvertisement);
-            }
-        });
-
-        return jobAdvertisementList.stream()
-                .map(JobAdvertisement::mapToJobAdDetailsDTO)
-                .toList();
-    }
-
-    @Override
-    public List<JobAdDetailsDTO> filterJobAdvertisements(JobAdFilterDTO jobAdFilterDTO) {
-        List<JobAdvertisement> filteredJobAds = jobAdvertisementRepository.findAll();
-        filteredJobAds = filter(filteredJobAds, jobAdFilterDTO);
-
-        return filteredJobAds.stream()
-                .map(JobAdvertisement::mapToJobAdDetailsDTO)
-                .toList();
-    }
-
-    private List<JobAdvertisement> filter(List<JobAdvertisement> filteredJobAdvertisements, JobAdFilterDTO jobAdFilterDTO) {
-        return filteredJobAdvertisements.stream()
-                .filter(jobAd -> jobAd.getTitle().toLowerCase().contains(jobAdFilterDTO.getSearchTerm().toLowerCase()))
-                .filter(jobAd -> jobAdFilterDTO.getIndustry().equals("all") || jobAd.getIndustry().equals(jobAdFilterDTO.getIndustry()))
-                .sorted(getComparator(jobAdFilterDTO.getSortOrder()))
-                .toList();
-    }
-
-    private Comparator<JobAdvertisement> getComparator(String sortOrder) {
-        return switch (sortOrder) {
-            case "date_newest" -> Comparator.comparing(JobAdvertisement::getPostedOn).reversed();
-            case "date_oldest" -> Comparator.comparing(JobAdvertisement::getPostedOn);
-            case "salary_highest" -> Comparator.comparing(JobAdvertisement::getStartingSalary).reversed();
-            case "salary_lowest" -> Comparator.comparing(JobAdvertisement::getStartingSalary);
-            default -> Comparator.comparing(JobAdvertisement::getPostedOn); // Default sorting order
-        };
-    }
-
-
-    @Override
-    public List<JobAdDetailsDTO> findAllJobAdvertisementsByRecruiterId(Long recruiterId) {
-        List<JobAdvertisement> jobAdvertisementList = jobAdvertisementRepository.findAllByRecruiterId(recruiterId);
-
-        return jobAdvertisementList.stream()
-                .map(JobAdvertisement::mapToJobAdDetailsDTO)
-                .toList();
-    }
-
-    @Override
-    public List<JobAdDetailsDTO> filterJobAdvertisementsByRecruiterId(Long recruiterId, JobAdFilterDTO jobAdFilterDTO) {
-        List<JobAdvertisement> filteredJobAds = jobAdvertisementRepository.findAllByRecruiterId(recruiterId);
-        filteredJobAds = filter(filteredJobAds, jobAdFilterDTO);
-        return filteredJobAds.stream()
-                .map(JobAdvertisement::mapToJobAdDetailsDTO)
-                .toList();
-    }
-
-    @Override
-    public JobAdDetailsDTO findJobAdvertisementById(Long id) {
-        JobAdvertisement jobAdvertisement = jobAdvertisementRepository.findById(id).orElse(null);
-        return JobAdvertisement.mapToJobAdDetailsDTO(jobAdvertisement);
-    }
-}
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 0f0add0e646bd880b8213e381f57f621bc0e6861)
+++ 	(revision )
@@ -1,101 +1,0 @@
-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/JwtServiceImpl.java
===================================================================
--- jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/JwtServiceImpl.java	(revision 0f0add0e646bd880b8213e381f57f621bc0e6861)
+++ jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/JwtServiceImpl.java	(revision d8b6c91094bd4c748b347d914a3c4c3745d51587)
@@ -6,5 +6,4 @@
 import io.jsonwebtoken.io.Decoders;
 import io.jsonwebtoken.security.Keys;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.User;
 import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef.JwtService;
 import org.springframework.security.core.userdetails.UserDetails;
@@ -20,10 +19,6 @@
     private final static String SECRET_KEY = "7191b1d33668d4a2316a02f9a40798b77bccd22173bd882c93a0a916a5e921d1";
 
-    public String generateToken(User user) {
-        return Jwts.builder().setSubject(user.getUsername())
-                .claim("name", user.getName())
-                .claim("role", user.getRole())
-                .claim("access", user.isHasAccess())
-                .claim("id", user.getId())
+    public String generateToken(UserDetails userDetails) {
+        return Jwts.builder().setSubject(userDetails.getUsername())
                 .setIssuedAt(new Date())
                 .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24))
@@ -46,4 +41,8 @@
     }
 
+    public String extractUsername(String token) {
+        return extractClaim(token, Claims::getSubject);
+    }
+
     private Claims extractAllClaims(String token) {
         return Jwts.parserBuilder().setSigningKey(getSigninKey()).build().parseClaimsJws(token).getBody();
@@ -55,10 +54,4 @@
     }
 
-    @Override
-    public String extractUsername(String token) {
-        return extractClaim(token, Claims::getSubject);
-    }
-
-    @Override
     public boolean isTokenValid(String token, UserDetails userDetails) {
         final String username = extractUsername(token);
@@ -66,6 +59,6 @@
     }
 
-    @Override
-    public boolean isTokenExpired(String token) {
+
+    private boolean isTokenExpired(String token) {
         return extractClaim(token, Claims::getExpiration).before(new Date());
     }
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 0f0add0e646bd880b8213e381f57f621bc0e6861)
+++ 	(revision )
@@ -1,115 +1,0 @@
-package mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.impl;
-
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RecruiterDetailsDTO;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RecruiterEditDetailsDTO;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.Recruiter;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.mappers.RecruiterMapper;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.repositories.RecruiterRepository;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef.RecruiterService;
-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 RecruiterServiceImpl implements RecruiterService {
-
-    private final RecruiterRepository recruiterRepository;
-    private final Path logoStorageLocation;
-
-    @Autowired
-    RecruiterServiceImpl(@Value("./uploads") String uploadDir, RecruiterRepository recruiterRepository) {
-        this.recruiterRepository = recruiterRepository;
-
-        this.logoStorageLocation = Paths.get(uploadDir + "/recruiters").toAbsolutePath().normalize();
-        try {
-            Files.createDirectories(this.logoStorageLocation);
-        } catch (IOException ex) {
-            throw new RuntimeException("Could not create the directory where the uploaded files will be stored.", ex);
-        }
-    }
-
-
-    @Override
-    public RecruiterEditDetailsDTO editRecruiterDetailsById(Long recruiterId, RecruiterEditDetailsDTO recruiterEditDetailsDTO) {
-        Recruiter recruiter = recruiterRepository.findById(recruiterId).orElse(null);
-        recruiter.setEmail(recruiterEditDetailsDTO.getEmail());
-        recruiter.setCompanyName(recruiterEditDetailsDTO.getCompanyName());
-        recruiter.setCompanyDescription(recruiterEditDetailsDTO.getCompanyDescription());
-        recruiter.setContactEmailAddress(recruiterEditDetailsDTO.getContactEmail());
-        recruiter.setContactPhoneNumber(recruiterEditDetailsDTO.getContactPhoneNumber());
-        recruiter.setReceptionist(recruiterEditDetailsDTO.getReceptionist());
-        recruiterRepository.save(recruiter);
-        return RecruiterMapper.mapToRecruiterEditDetailsDTO(recruiter);
-    }
-
-    @Override
-    public RecruiterEditDetailsDTO getRecruiterEditDetailsById(Long recruiterId) {
-        Recruiter recruiter = recruiterRepository.findById(recruiterId).orElse(null);
-        return RecruiterMapper.mapToRecruiterEditDetailsDTO(recruiter);
-    }
-
-
-    @Override
-    public RecruiterDetailsDTO getRecruiterDetailsById(Long recruiterId) {
-        Recruiter recruiter = recruiterRepository.findById(recruiterId).orElse(null);
-        return RecruiterMapper.mapToRecruiterDetailsDTO(recruiter);
-    }
-
-    @Override
-    public void submitLogo(Long recruiterId, MultipartFile logoFile) {
-
-        Path recruiterLogoDir = this.logoStorageLocation.resolve(String.valueOf(recruiterId)).resolve("logos");
-        try {
-            Files.createDirectories(recruiterLogoDir);
-            String originalFilename = logoFile.getOriginalFilename();
-
-            if (originalFilename != null) {
-                Path targetLocation = recruiterLogoDir.resolve(originalFilename);
-
-                Files.copy(logoFile.getInputStream(), targetLocation, StandardCopyOption.REPLACE_EXISTING);
-
-                Recruiter recruiter = recruiterRepository.findById(recruiterId)
-                        .orElseThrow(() -> new RuntimeException("Recruiter not found"));
-                String relativePath = Paths.get("uploads","recruiters", String.valueOf(recruiterId), "logos", originalFilename).toString();
-                recruiter.setLogoFilePath(relativePath);
-                recruiterRepository.save(recruiter);
-            }
-
-        } catch (IOException ex) {
-            throw new RuntimeException("Could not store file. Please try again!", ex);
-        }
-
-      
-    }
-
-    public Resource loadLogoAsResource(Long recruiterId) {
-        Recruiter recruiter = recruiterRepository.findById(recruiterId)
-                .orElseThrow(() -> new RuntimeException("Recruiter not found"));
-
-        try {
-            String relativeLogoPath = recruiter.getLogoFilePath();
-            Path logoPath = this.logoStorageLocation.getParent().getParent().resolve(relativeLogoPath);
-            Resource resource = new UrlResource(logoPath.toUri());
-            if (resource.exists()) {
-                return resource;
-            } else {
-                throw new RuntimeException("File not found " + logoPath);
-            }
-        } catch (IOException ex) {
-            throw new RuntimeException("File not found " + ex);
-        }
-
-    }
-
-}
Index: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/UserServiceImpl.java
===================================================================
--- jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/UserServiceImpl.java	(revision 0f0add0e646bd880b8213e381f57f621bc0e6861)
+++ jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/UserServiceImpl.java	(revision d8b6c91094bd4c748b347d914a3c4c3745d51587)
@@ -1,11 +1,64 @@
 package mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.impl;
 
-import lombok.RequiredArgsConstructor;
+import lombok.AllArgsConstructor;
+import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.repositories.JobSeekerRepository;
+import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.repositories.RecruiterRepository;
+import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.repositories.UserRepository;
+import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef.JwtService;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.stereotype.Service;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef.UserService;
 
 @Service
-@RequiredArgsConstructor
-public class UserServiceImpl implements UserService {
+@AllArgsConstructor
 
+public class UserServiceImpl  {
+    private final UserRepository userRepository;
+    private final RecruiterRepository recruiterRepository;
+    private final JobSeekerRepository jobSeekerRepository;
+    private final PasswordEncoder passwordEncoder;
+    private final AuthenticationManager authenticationManager;
+    private final JwtService jwtService;
+
+
+//    @Override
+//    public User registerJobSeeker(JobSeeker jobSeeker) {
+//        jobSeeker.setPassword(passwordEncoder.encode(jobSeeker.getPassword()));
+//        return jobSeekerRepository.save(jobSeeker);
+//    }
+//
+//    @Override
+//    public User registerRecruiter(Recruiter recruiter) {
+//        recruiter.setPassword(passwordEncoder.encode(recruiter.getPassword()));
+//        return recruiterRepository.save(recruiter);
+//    }
+//
+//    @Override
+//    public JwtAuthenticationResponse login(JwtAuthenticationRequest jwtAuthenticationRequest) {
+//        authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(jwtAuthenticationRequest.getEmail(), jwtAuthenticationRequest.getPassword()));
+//
+//        var user = userRepository.findByEmail(jwtAuthenticationRequest.getEmail()).orElseThrow(() -> new IllegalArgumentException("Email or password is incorrect"));
+//        var jwt = jwtService.generateToken(user);
+//        var refreshToken = jwtService.generateRefreshToken(new HashMap<>(), user);
+//
+//        JwtAuthenticationResponse jwtAuthenticationResponse = new JwtAuthenticationResponse();
+//        jwtAuthenticationResponse.setToken(jwt);
+//        jwtAuthenticationResponse.setRefreshToken(refreshToken);
+//        return jwtAuthenticationResponse;
+//    }
+//
+//    @Override
+//    public JwtAuthenticationResponse refreshToken(RefreshTokenRequest refreshTokenRequest) {
+//        String userEmail = jwtService.extractUsername(refreshTokenRequest.getToken());
+//        User user = userRepository.findByEmail(userEmail).orElseThrow();
+//        if(jwtService.isTokenValid(refreshTokenRequest.getToken(), user)) {
+//            var jwt = jwtService.generateToken(user);
+//
+//            JwtAuthenticationResponse jwtAuthenticationResponse = new JwtAuthenticationResponse();
+//            jwtAuthenticationResponse.setToken(jwt);
+//            jwtAuthenticationResponse.setRefreshToken(refreshTokenRequest.getToken());
+//            return jwtAuthenticationResponse;
+//        }
+//        return null;
+//    }
 }
Index: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/intef/AdminService.java
===================================================================
--- jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/intef/AdminService.java	(revision 0f0add0e646bd880b8213e381f57f621bc0e6861)
+++ 	(revision )
@@ -1,11 +1,0 @@
-package mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef;
-
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RecruiterAdminDetailsDTO;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RecruiterDetailsDTO;
-
-import java.util.List;
-
-public interface AdminService {
-    RecruiterAdminDetailsDTO changeAccess(long recruiterId, boolean access);
-    List<RecruiterAdminDetailsDTO> findAllRecruiters();
-}
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 0f0add0e646bd880b8213e381f57f621bc0e6861)
+++ 	(revision )
@@ -1,18 +1,0 @@
-package mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef;
-
-
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.applications.Application;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.applications.DTO.ApplicationDTO;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.applications.DTO.ApplicationDetailsDTO;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.applications.DTO.ApplicationStatusDTO;
-import org.springframework.core.io.Resource;
-
-import java.util.List;
-
-public interface ApplicationService {
-    ApplicationDetailsDTO submitApplication(ApplicationDTO applicationDTO);
-    List<ApplicationDetailsDTO> findAllByJobAdvertisementId(Long jobId);
-    List<ApplicationDetailsDTO> findAllByJobSeekerId(Long jobSeekerId);
-    Resource loadResumeAsResource(Long applicationId);
-    ApplicationStatusDTO updateApplicationStatus(Long id, String status);
-}
Index: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/intef/JobAdvertisementService.java
===================================================================
--- jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/intef/JobAdvertisementService.java	(revision 0f0add0e646bd880b8213e381f57f621bc0e6861)
+++ 	(revision )
@@ -1,23 +1,0 @@
-package mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef;
-
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.job_advertisements.DTO.JobAdDetailsDTO;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.job_advertisements.DTO.JobAdFilterDTO;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.job_advertisements.DTO.JobAdvertisementDTO;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.job_advertisements.JobAdvertisement;
-
-import java.util.List;
-import java.util.Optional;
-
-public interface JobAdvertisementService {
-    JobAdDetailsDTO addJobAdvertisement(JobAdvertisementDTO jobAdvertisementDTO);
-    JobAdDetailsDTO editJobAdvertisement(Long id, JobAdvertisementDTO jobAdvertisementDTO);
-    void deleteJobAdvertisement(Long jobAdvertisementId);
-
-    List<JobAdDetailsDTO> findAllJobAdvertisements();
-    List<JobAdDetailsDTO> filterJobAdvertisements(JobAdFilterDTO jobAdFilterDTO);
-    List<JobAdDetailsDTO> findAllJobAdvertisementsByRecruiterId(Long recruiterId);
-    List<JobAdDetailsDTO> filterJobAdvertisementsByRecruiterId(Long recruiterId, JobAdFilterDTO jobAdFilterDTO);
-    JobAdDetailsDTO findJobAdvertisementById(Long id);
-
-
-}
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 0f0add0e646bd880b8213e381f57f621bc0e6861)
+++ 	(revision )
@@ -1,15 +1,0 @@
-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);
-}
Index: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/intef/JwtService.java
===================================================================
--- jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/intef/JwtService.java	(revision 0f0add0e646bd880b8213e381f57f621bc0e6861)
+++ jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/intef/JwtService.java	(revision d8b6c91094bd4c748b347d914a3c4c3745d51587)
@@ -1,5 +1,4 @@
 package mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef;
 
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.User;
 import org.springframework.security.core.userdetails.UserDetails;
 
@@ -7,9 +6,9 @@
 
 public interface JwtService {
-    String generateToken(User user);
-    String generateRefreshToken(Map<String, Object> extraClaims, UserDetails userDetails);
+
+    String generateToken(UserDetails userDetails);
     String extractUsername(String token);
     boolean isTokenValid(String token, UserDetails userDetails);
-    boolean isTokenExpired(String token);
+    String generateRefreshToken(Map<String, Object> extraClaims, UserDetails userDetails);
 
 }
Index: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/intef/RecruiterService.java
===================================================================
--- jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/intef/RecruiterService.java	(revision 0f0add0e646bd880b8213e381f57f621bc0e6861)
+++ 	(revision )
@@ -1,15 +1,0 @@
-package mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef;
-
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RecruiterDetailsDTO;
-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 RecruiterService {
-    RecruiterDetailsDTO getRecruiterDetailsById(Long recruiterId);
-    RecruiterEditDetailsDTO editRecruiterDetailsById(Long recruiterId, RecruiterEditDetailsDTO recruiterEditDetailsDTO);
-    RecruiterEditDetailsDTO getRecruiterEditDetailsById(Long recruiterId);
-
-    void submitLogo(Long recruiterId, MultipartFile logoFile);
-    Resource loadLogoAsResource(Long recruiterId);
-}
Index: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/intef/UserService.java
===================================================================
--- jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/intef/UserService.java	(revision 0f0add0e646bd880b8213e381f57f621bc0e6861)
+++ jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/intef/UserService.java	(revision d8b6c91094bd4c748b347d914a3c4c3745d51587)
@@ -1,7 +1,15 @@
 package mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef;
 
+import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.SignInDTO;
+import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.JwtAuthResponse;
+import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RefreshTokenRequest;
+import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.JobSeeker;
 import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.Recruiter;
+import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.User;
 
 public interface UserService {
-
+    User registerJobSeeker(JobSeeker jobSeeker);
+    User registerRecruiter(Recruiter recruiter);
+    JwtAuthResponse login(SignInDTO signInDTO);
+    JwtAuthResponse refreshToken(RefreshTokenRequest refreshTokenRequest);
 }
