source: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/RecruiterServiceImpl.java@ befb988

main
Last change on this file since befb988 was befb988, checked in by 223021 <daniel.ilievski.2@…>, 12 days ago

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.

  • Property mode set to 100644
File size: 5.0 KB
Line 
1package mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.impl;
2
3import lombok.RequiredArgsConstructor;
4import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RecruiterDetailsDTO;
5import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RecruiterEditDetailsDTO;
6import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.Recruiter;
7import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.mappers.RecruiterMapper;
8import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.repositories.RecruiterRepository;
9import 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;
14import 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;
22
23@Service
24@RequiredArgsConstructor
25public class RecruiterServiceImpl implements RecruiterService {
26
27 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
62
63 @Override
64 public RecruiterDetailsDTO getRecruiterDetailsById(Long recruiterId) {
65 Recruiter recruiter = recruiterRepository.findById(recruiterId).orElse(null);
66 return RecruiterMapper.mapToRecruiterDetailsDTO(recruiter);
67 }
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
115}
Note: See TracBrowser for help on using the repository browser.