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.JobSeekerEditDetailsDTO;
|
---|
5 | import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.JobSeeker;
|
---|
6 | import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.mappers.JobSeekerMapper;
|
---|
7 | import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.repositories.JobSeekerRepository;
|
---|
8 | import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef.JobSeekerService;
|
---|
9 | import org.springframework.beans.factory.annotation.Autowired;
|
---|
10 | import org.springframework.beans.factory.annotation.Value;
|
---|
11 | import org.springframework.core.io.Resource;
|
---|
12 | import org.springframework.core.io.UrlResource;
|
---|
13 | import org.springframework.stereotype.Service;
|
---|
14 | import org.springframework.web.multipart.MultipartFile;
|
---|
15 |
|
---|
16 | import java.io.IOException;
|
---|
17 | import java.nio.file.Files;
|
---|
18 | import java.nio.file.Path;
|
---|
19 | import java.nio.file.Paths;
|
---|
20 | import java.nio.file.StandardCopyOption;
|
---|
21 |
|
---|
22 | @Service
|
---|
23 | @RequiredArgsConstructor
|
---|
24 | public class JobSeekerServiceImpl implements JobSeekerService {
|
---|
25 |
|
---|
26 | private final JobSeekerRepository jobSeekerRepository;
|
---|
27 | private final Path profilePicStorageLocation;
|
---|
28 |
|
---|
29 | @Autowired
|
---|
30 | JobSeekerServiceImpl(@Value("./uploads") String uploadDir, JobSeekerRepository jobSeekerRepository) {
|
---|
31 | this.jobSeekerRepository = jobSeekerRepository;
|
---|
32 |
|
---|
33 | this.profilePicStorageLocation = Paths.get(uploadDir + "/job-seekers").toAbsolutePath().normalize();
|
---|
34 | try {
|
---|
35 | Files.createDirectories(this.profilePicStorageLocation);
|
---|
36 | } catch (IOException ex) {
|
---|
37 | throw new RuntimeException("Could not create the directory where the uploaded files will be stored.", ex);
|
---|
38 | }
|
---|
39 | }
|
---|
40 |
|
---|
41 | @Override
|
---|
42 | public JobSeekerEditDetailsDTO editJobSeekerDetailsById(Long jobSeekerId, JobSeekerEditDetailsDTO jobSeekerEditDetailsDTO) {
|
---|
43 | JobSeeker jobSeeker = jobSeekerRepository.findById(jobSeekerId).orElse(null);
|
---|
44 | jobSeeker.setEmail(jobSeekerEditDetailsDTO.getEmail());
|
---|
45 | jobSeeker.setFirstName(jobSeekerEditDetailsDTO.getFirstName());
|
---|
46 | jobSeeker.setLastName(jobSeekerEditDetailsDTO.getLastName());
|
---|
47 | jobSeeker.setPhoneNumber(jobSeekerEditDetailsDTO.getPhoneNumber());
|
---|
48 | jobSeekerRepository.save(jobSeeker);
|
---|
49 | return JobSeekerMapper.mapToJobSeekerEditDetailsDTO(jobSeeker);
|
---|
50 | }
|
---|
51 |
|
---|
52 | @Override
|
---|
53 | public JobSeekerEditDetailsDTO getJobSeekerEditDetailsById(Long jobSeekerId) {
|
---|
54 | JobSeeker jobSeeker = jobSeekerRepository.findById(jobSeekerId).orElse(null);
|
---|
55 | return JobSeekerMapper.mapToJobSeekerEditDetailsDTO(jobSeeker);
|
---|
56 | }
|
---|
57 |
|
---|
58 | @Override
|
---|
59 | public void submitProfilePic(Long jobSeekerId, MultipartFile profilePicFile) {
|
---|
60 | Path jobSeekerProfilePicDir = this.profilePicStorageLocation.resolve(String.valueOf(jobSeekerId)).resolve("profile-pics");
|
---|
61 |
|
---|
62 | try {
|
---|
63 | Files.createDirectories(jobSeekerProfilePicDir);
|
---|
64 | String originalFileName = profilePicFile.getOriginalFilename();
|
---|
65 |
|
---|
66 | if(originalFileName != null) {
|
---|
67 | Path targetLocation = jobSeekerProfilePicDir.resolve(originalFileName);
|
---|
68 | Files.copy(profilePicFile.getInputStream(), targetLocation, StandardCopyOption.REPLACE_EXISTING);
|
---|
69 |
|
---|
70 | JobSeeker jobSeeker = jobSeekerRepository.findById(jobSeekerId).orElse(null);
|
---|
71 | String relativePath = Paths.get("uploads", "job-seekers", String.valueOf(jobSeekerId), "profile-pics", originalFileName).toString();
|
---|
72 |
|
---|
73 | jobSeeker.setProfilePicFilePath(relativePath);
|
---|
74 | jobSeekerRepository.save(jobSeeker);
|
---|
75 | }
|
---|
76 | } catch (IOException e) {
|
---|
77 | throw new RuntimeException(e);
|
---|
78 | }
|
---|
79 | }
|
---|
80 |
|
---|
81 | @Override
|
---|
82 | public Resource loadProfilePicAsResource(Long jobSeekerId) {
|
---|
83 | JobSeeker jobSeeker = jobSeekerRepository.findById(jobSeekerId)
|
---|
84 | .orElseThrow(() -> new RuntimeException("Job Seeker not found"));
|
---|
85 |
|
---|
86 | try {
|
---|
87 | String relativeProfilePicPath = jobSeeker.getProfilePicFilePath();
|
---|
88 | Path profilePicPath = profilePicStorageLocation.getParent().getParent().resolve(relativeProfilePicPath);
|
---|
89 | Resource resource = new UrlResource(profilePicPath.toUri());
|
---|
90 | if(resource.exists()) {
|
---|
91 | return resource;
|
---|
92 | } else {
|
---|
93 | throw new RuntimeException("Could not find profile pic at " + profilePicPath);
|
---|
94 | }
|
---|
95 | } catch (IOException ex) {
|
---|
96 | throw new RuntimeException(ex);
|
---|
97 | }
|
---|
98 |
|
---|
99 |
|
---|
100 | }
|
---|
101 | }
|
---|