[19398ad] | 1 | package mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.impl;
|
---|
| 2 |
|
---|
| 3 | import lombok.RequiredArgsConstructor;
|
---|
| 4 | import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RecruiterDetailsDTO;
|
---|
[befb988] | 5 | import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RecruiterEditDetailsDTO;
|
---|
[19398ad] | 6 | import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.Recruiter;
|
---|
| 7 | import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.mappers.RecruiterMapper;
|
---|
| 8 | import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.repositories.RecruiterRepository;
|
---|
| 9 | import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef.RecruiterService;
|
---|
[befb988] | 10 | import org.springframework.beans.factory.annotation.Autowired;
|
---|
| 11 | import org.springframework.beans.factory.annotation.Value;
|
---|
| 12 | import org.springframework.core.io.Resource;
|
---|
| 13 | import org.springframework.core.io.UrlResource;
|
---|
[19398ad] | 14 | import org.springframework.stereotype.Service;
|
---|
[befb988] | 15 | import org.springframework.web.multipart.MultipartFile;
|
---|
| 16 |
|
---|
| 17 | import java.io.IOException;
|
---|
| 18 | import java.nio.file.Files;
|
---|
| 19 | import java.nio.file.Path;
|
---|
| 20 | import java.nio.file.Paths;
|
---|
| 21 | import java.nio.file.StandardCopyOption;
|
---|
[19398ad] | 22 |
|
---|
| 23 | @Service
|
---|
| 24 | @RequiredArgsConstructor
|
---|
| 25 | public class RecruiterServiceImpl implements RecruiterService {
|
---|
| 26 |
|
---|
| 27 | private final RecruiterRepository recruiterRepository;
|
---|
[befb988] | 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 |
|
---|
[19398ad] | 62 |
|
---|
| 63 | @Override
|
---|
| 64 | public RecruiterDetailsDTO getRecruiterDetailsById(Long recruiterId) {
|
---|
| 65 | Recruiter recruiter = recruiterRepository.findById(recruiterId).orElse(null);
|
---|
| 66 | return RecruiterMapper.mapToRecruiterDetailsDTO(recruiter);
|
---|
| 67 | }
|
---|
[befb988] | 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 |
|
---|
[19398ad] | 115 | }
|
---|