source: src/main/java/it/finki/tinki/service/impl/MatchmakerServiceImpl.java@ 33d4f5d

Last change on this file since 33d4f5d was 33d4f5d, checked in by Vzdra <vladko.zdravkovski@…>, 3 years ago

bugfixes and refactoring

  • Property mode set to 100644
File size: 4.5 KB
Line 
1package it.finki.tinki.service.impl;
2
3import it.finki.tinki.helper.Matchmaker;
4import it.finki.tinki.model.EmbeddedMatchId;
5import it.finki.tinki.model.Work.Internship;
6import it.finki.tinki.model.Work.Job;
7import it.finki.tinki.model.Work.Project;
8import it.finki.tinki.model.Match;
9import it.finki.tinki.model.Skill;
10import it.finki.tinki.model.Users.User;
11import it.finki.tinki.model.enumerator.WorkType;
12import it.finki.tinki.repository.InternshipRepository;
13import it.finki.tinki.repository.JobRepository;
14import it.finki.tinki.repository.MatchRepository;
15import it.finki.tinki.repository.ProjectRepository;
16import it.finki.tinki.service.MatchmakerService;
17import org.springframework.stereotype.Service;
18
19import javax.transaction.Transactional;
20import java.util.ArrayList;
21import java.util.List;
22
23
24@Service
25public class MatchmakerServiceImpl implements MatchmakerService {
26
27 MatchRepository matchRepository;
28 JobRepository jobRepository;
29 InternshipRepository internshipRepository;
30 ProjectRepository projectRepository;
31
32 public MatchmakerServiceImpl(MatchRepository matchRepository,
33 JobRepository jobRepository,
34 InternshipRepository internshipRepository,
35 ProjectRepository projectRepository) {
36 this.matchRepository = matchRepository;
37 this.jobRepository = jobRepository;
38 this.internshipRepository = internshipRepository;
39 this.projectRepository = projectRepository;
40 }
41
42 @Override
43 public List<Internship> getMatchingInternshipsForUser(User user) {
44 List<Match> matches = this.matchRepository.findAllByEmbeddedMatchIdUserAndTypeOrderByCoefficientDesc(user, WorkType.INTERNSHIP);
45
46 List<Internship> internships = new ArrayList<>();
47 if(matches.size()!=0){
48 matches.forEach(match -> {
49 internships.add((Internship) match.getEmbeddedMatchId().getWork());
50 });
51 }
52
53 return internships;
54 }
55
56 @Override
57 public List<Job> getMatchingJobsForUser(User user) {
58 List<Match> matches = this.matchRepository.findAllByEmbeddedMatchIdUserAndTypeOrderByCoefficientDesc(user, WorkType.JOB);
59
60 List<Job> jobs = new ArrayList<>();
61 if(matches.size()!=0) {
62 matches.forEach(match -> {
63 jobs.add((Job) match.getEmbeddedMatchId().getWork());
64 });
65 }
66
67 return jobs;
68 }
69
70 @Override
71 public List<Project> getMatchingProjectsForUser(User user) {
72 List<Match> matches = this.matchRepository.findAllByEmbeddedMatchIdUserAndTypeOrderByCoefficientDesc(user, WorkType.PROJECT);
73
74 List<Project> projects = new ArrayList<>();
75 if(matches.size()!=0) {
76 matches.forEach(match -> {
77 projects.add((Project) match.getEmbeddedMatchId().getWork());
78 });
79 }
80
81 return projects;
82 }
83
84 @Override
85 public void setUpUserJobMatches(Job job, User user) {
86 List<Skill> jobSkill = job.getSkillsRequired();
87 List<Skill> userSkill = user.getRetainedSkills();
88
89 float coef = Matchmaker.match(jobSkill, userSkill);
90
91 if(coef!=0){
92 EmbeddedMatchId embeddedMatchId = new EmbeddedMatchId(job, user);
93 Match m = new Match(embeddedMatchId, coef, WorkType.JOB);
94 this.matchRepository.save(m);
95 }
96 }
97
98 @Override
99 public void setUpUserProjectMatches(Project project, User user) {
100 List<Skill> projectSkills = project.getSkillsRequired();
101 List<Skill> userSkill = user.getRetainedSkills();
102
103 float coef = Matchmaker.match(projectSkills, userSkill);
104
105 if(coef!=0){
106 EmbeddedMatchId embeddedMatchId = new EmbeddedMatchId(project, user);
107 Match m = new Match(embeddedMatchId, coef, WorkType.PROJECT);
108 this.matchRepository.save(m);
109 }
110 }
111
112 @Override
113 public void setUpUserInternshipMatches(Internship internship, User user) {
114 List<Skill> internshipSkills = internship.getSkillsTrained();
115 List<Skill> userSkill = user.getSkillsToLearn();
116
117 float coef = Matchmaker.match(internshipSkills, userSkill);
118
119 if(coef!=0){
120 EmbeddedMatchId embeddedMatchId = new EmbeddedMatchId(internship, user);
121 Match m = new Match(embeddedMatchId, coef, WorkType.INTERNSHIP);
122 this.matchRepository.save(m);
123 }
124 }
125
126 @Transactional
127 @Override
128 public List<Match> removeByUserId(Long userId) {
129 return this.matchRepository.deleteAllByEmbeddedMatchId_User_Id(userId);
130 }
131
132}
Note: See TracBrowser for help on using the repository browser.