Ignore:
Timestamp:
06/17/24 21:59:14 (2 weeks ago)
Author:
223021 <daniel.ilievski.2@…>
Branches:
main
Children:
08f82ec
Parents:
b248810
Message:

Added an edit profile page for both job seekers and recruiters, where they can upload profile pictures/company logos and edit their profile data. Added profile page specifically for recruiters. Refactored existing code.

Location:
jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/AdminServiceImpl.java

    rb248810 rbefb988  
    33import lombok.AllArgsConstructor;
    44import lombok.RequiredArgsConstructor;
     5import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RecruiterAdminDetailsDTO;
    56import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RecruiterDetailsDTO;
    67import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.Recruiter;
     
    2021
    2122    @Override
    22     public RecruiterDetailsDTO changeAccess(long recruiterId, boolean access) {
     23    public RecruiterAdminDetailsDTO changeAccess(long recruiterId, boolean access) {
    2324        Recruiter recruiter = recruiterRepository.findById(recruiterId).orElse(null);
    2425        if (recruiter != null) {
    2526            recruiter.setHasAccess(access);
    2627            recruiterRepository.save(recruiter);
    27             return RecruiterMapper.mapToRecruiterDetailsDTO(recruiter);
     28            return RecruiterMapper.mapToRecruiterAdminDetailsDTO(recruiter);
    2829        }
    2930        return null;
     
    3233
    3334    @Override
    34     public List<RecruiterDetailsDTO> findAllRecruiters() {
     35    public List<RecruiterAdminDetailsDTO> findAllRecruiters() {
    3536        List<Recruiter> recruiterList = recruiterRepository.findAll();
    36         return recruiterList.stream().map(RecruiterMapper::mapToRecruiterDetailsDTO).toList();
     37        return recruiterList.stream().map(RecruiterMapper::mapToRecruiterAdminDetailsDTO).toList();
    3738    }
    3839}
  • jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/JobAdvertisementServiceImpl.java

    rb248810 rbefb988  
    3030    @Override
    3131    public JobAdDetailsDTO addJobAdvertisement(JobAdvertisementDTO jobAdvertisementDTO) {
    32         Recruiter recruiter = recruiterRepository.findRecruiterByEmail(jobAdvertisementDTO.getEmail()).orElseThrow(() -> new IllegalArgumentException("User not found"));
     32        Recruiter recruiter = recruiterRepository.findById(jobAdvertisementDTO.getId()).orElseThrow(() -> new IllegalArgumentException("User not found"));
    3333        JobAdvertisement jobAdvertisement = new JobAdvertisement(
    3434                recruiter,
  • jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/JwtServiceImpl.java

    rb248810 rbefb988  
    2525                .claim("role", user.getRole())
    2626                .claim("access", user.isHasAccess())
     27                .claim("id", user.getId())
    2728                .setIssuedAt(new Date())
    2829                .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24))
  • jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/RecruiterServiceImpl.java

    rb248810 rbefb988  
    33import lombok.RequiredArgsConstructor;
    44import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RecruiterDetailsDTO;
     5import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RecruiterEditDetailsDTO;
    56import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.Recruiter;
    67import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.mappers.RecruiterMapper;
    78import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.repositories.RecruiterRepository;
    89import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef.RecruiterService;
     10import org.springframework.beans.factory.annotation.Autowired;
     11import org.springframework.beans.factory.annotation.Value;
     12import org.springframework.core.io.Resource;
     13import org.springframework.core.io.UrlResource;
    914import org.springframework.stereotype.Service;
     15import org.springframework.web.multipart.MultipartFile;
     16
     17import java.io.IOException;
     18import java.nio.file.Files;
     19import java.nio.file.Path;
     20import java.nio.file.Paths;
     21import java.nio.file.StandardCopyOption;
    1022
    1123@Service
     
    1426
    1527    private final RecruiterRepository recruiterRepository;
     28    private final Path logoStorageLocation;
     29
     30    @Autowired
     31    RecruiterServiceImpl(@Value("./uploads") String uploadDir, RecruiterRepository recruiterRepository) {
     32        this.recruiterRepository = recruiterRepository;
     33
     34        this.logoStorageLocation = Paths.get(uploadDir + "/logo").toAbsolutePath().normalize();
     35        try {
     36            Files.createDirectories(this.logoStorageLocation);
     37        } catch (IOException ex) {
     38            throw new RuntimeException("Could not create the directory where the uploaded files will be stored.", ex);
     39        }
     40    }
     41
     42
     43    @Override
     44    public RecruiterEditDetailsDTO editRecruiterDetailsById(Long recruiterId, RecruiterEditDetailsDTO recruiterEditDetailsDTO) {
     45        Recruiter recruiter = recruiterRepository.findById(recruiterId).orElse(null);
     46        recruiter.setEmail(recruiterEditDetailsDTO.getEmail());
     47        recruiter.setCompanyName(recruiterEditDetailsDTO.getCompanyName());
     48        recruiter.setCompanyDescription(recruiterEditDetailsDTO.getCompanyDescription());
     49        recruiter.setContactEmailAddress(recruiterEditDetailsDTO.getContactEmail());
     50        recruiter.setContactPhoneNumber(recruiterEditDetailsDTO.getContactPhoneNumber());
     51        recruiter.setReceptionist(recruiterEditDetailsDTO.getReceptionist());
     52        recruiterRepository.save(recruiter);
     53        return RecruiterMapper.mapToRecruiterEditDetailsDTO(recruiter);
     54    }
     55
     56    @Override
     57    public RecruiterEditDetailsDTO getRecruiterEditDetailsById(Long recruiterId) {
     58        Recruiter recruiter = recruiterRepository.findById(recruiterId).orElse(null);
     59        return RecruiterMapper.mapToRecruiterEditDetailsDTO(recruiter);
     60    }
     61
    1662
    1763    @Override
     
    2066        return RecruiterMapper.mapToRecruiterDetailsDTO(recruiter);
    2167    }
     68
     69    @Override
     70    public void submitLogo(Long recruiterId, MultipartFile logoFile) {
     71
     72        Path recruiterLogoDir = this.logoStorageLocation.resolve(String.valueOf(recruiterId));
     73        try {
     74            Files.createDirectories(recruiterLogoDir);
     75            String originalFilename = logoFile.getOriginalFilename();
     76
     77            if (originalFilename != null) {
     78                Path targetLocation = recruiterLogoDir.resolve(originalFilename);
     79
     80                Files.copy(logoFile.getInputStream(), targetLocation, StandardCopyOption.REPLACE_EXISTING);
     81
     82                Recruiter recruiter = recruiterRepository.findById(recruiterId)
     83                        .orElseThrow(() -> new RuntimeException("Recruiter not found"));
     84                String relativePath = Paths.get("uploads", "logo", String.valueOf(recruiterId), originalFilename).toString();
     85                recruiter.setLogoFilePath(relativePath);
     86                recruiterRepository.save(recruiter);
     87            }
     88
     89        } catch (IOException ex) {
     90            throw new RuntimeException("Could not store file. Please try again!", ex);
     91        }
     92
     93     
     94    }
     95
     96    public Resource loadLogoAsResource(Long recruiterId) {
     97        Recruiter recruiter = recruiterRepository.findById(recruiterId)
     98                .orElseThrow(() -> new RuntimeException("Recruiter not found"));
     99
     100        try {
     101            String relativeLogoPath = recruiter.getLogoFilePath();
     102            Path logoPath = this.logoStorageLocation.getParent().getParent().resolve(relativeLogoPath);
     103            Resource resource = new UrlResource(logoPath.toUri());
     104            if (resource.exists()) {
     105                return resource;
     106            } else {
     107                throw new RuntimeException("File not found " + logoPath);
     108            }
     109        } catch (IOException ex) {
     110            throw new RuntimeException("File not found " + ex);
     111        }
     112
     113    }
     114
    22115}
  • jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/intef/AdminService.java

    rb248810 rbefb988  
    11package mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef;
    22
     3import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RecruiterAdminDetailsDTO;
    34import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RecruiterDetailsDTO;
    45
     
    67
    78public interface AdminService {
    8     RecruiterDetailsDTO changeAccess(long recruiterId, boolean access);
    9     List<RecruiterDetailsDTO> findAllRecruiters();
     9    RecruiterAdminDetailsDTO changeAccess(long recruiterId, boolean access);
     10    List<RecruiterAdminDetailsDTO> findAllRecruiters();
    1011}
  • jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/intef/RecruiterService.java

    rb248810 rbefb988  
    22
    33import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RecruiterDetailsDTO;
    4 import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.Recruiter;
     4import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RecruiterEditDetailsDTO;
     5import org.springframework.core.io.Resource;
     6import org.springframework.web.multipart.MultipartFile;
    57
    68public interface RecruiterService {
    79    RecruiterDetailsDTO getRecruiterDetailsById(Long recruiterId);
     10    RecruiterEditDetailsDTO editRecruiterDetailsById(Long recruiterId, RecruiterEditDetailsDTO recruiterEditDetailsDTO);
     11    RecruiterEditDetailsDTO getRecruiterEditDetailsById(Long recruiterId);
     12
     13    void submitLogo(Long recruiterId, MultipartFile logoFile);
     14    Resource loadLogoAsResource(Long recruiterId);
    815}
Note: See TracChangeset for help on using the changeset viewer.