Index: src/main/java/it/finki/tinki/service/impl/AccountServiceImpl.java
===================================================================
--- src/main/java/it/finki/tinki/service/impl/AccountServiceImpl.java	(revision 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
+++ src/main/java/it/finki/tinki/service/impl/AccountServiceImpl.java	(revision 509cb956bf2b3a456ea102e01dac170e0d7c6879)
@@ -96,3 +96,16 @@
         return this.companyRepository.save(c);
     }
+
+    public Account findByIdAndType(Long id, AccountType type){
+        switch (type){
+            case COMPANY:
+                return this.companyRepository.findById(id).get();
+            case TEAM:
+                return this.teamRepository.findById(id).get();
+            case USER:
+                return this.userRepository.findById(id).get();
+        }
+
+        return null;
+    }
 }
Index: src/main/java/it/finki/tinki/service/impl/MatchmakerServiceImpl.java
===================================================================
--- src/main/java/it/finki/tinki/service/impl/MatchmakerServiceImpl.java	(revision 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
+++ src/main/java/it/finki/tinki/service/impl/MatchmakerServiceImpl.java	(revision 509cb956bf2b3a456ea102e01dac170e0d7c6879)
@@ -1,9 +1,12 @@
 package it.finki.tinki.service.impl;
 
+import it.finki.tinki.helper.Matchmaker;
+import it.finki.tinki.model.EmbeddedMatchId;
 import it.finki.tinki.model.Jobs.Internship;
 import it.finki.tinki.model.Jobs.Job;
 import it.finki.tinki.model.Jobs.Project;
+import it.finki.tinki.model.Jobs.Work;
 import it.finki.tinki.model.Match;
-import it.finki.tinki.model.Users.Team;
+import it.finki.tinki.model.Skill;
 import it.finki.tinki.model.Users.User;
 import it.finki.tinki.model.enumerator.WorkType;
@@ -27,5 +30,5 @@
     @Override
     public List<Internship> getMatchingInternshipsForUser(User user) {
-        List<Match> matches = this.matchRepository.getAllByCombinedId_UserAndTypeOrderByCoefficientDesc(user, WorkType.INTERNSHIP);
+        List<Match> matches = this.matchRepository.getAllByCombinedId_User_IdAndTypeOrderByCoefficientDesc(user.getId(), WorkType.INTERNSHIP);
 
         List<Internship> internships = new ArrayList<>();
@@ -39,5 +42,5 @@
     @Override
     public List<Job> getMatchingJobsForUser(User user) {
-        List<Match> matches = this.matchRepository.getAllByCombinedId_UserAndTypeOrderByCoefficientDesc(user, WorkType.JOB);
+        List<Match> matches = this.matchRepository.getAllByCombinedId_User_IdAndTypeOrderByCoefficientDesc(user.getId(), WorkType.JOB);
 
         List<Job> jobs = new ArrayList<>();
@@ -51,5 +54,5 @@
     @Override
     public List<Project> getMatchingProjectsForUser(User user) {
-        List<Match> matches = this.matchRepository.getAllByCombinedId_UserAndTypeOrderByCoefficientDesc(user, WorkType.PROJECT);
+        List<Match> matches = this.matchRepository.getAllByCombinedId_User_IdAndTypeOrderByCoefficientDesc(user.getId(), WorkType.PROJECT);
 
         List<Project> projects = new ArrayList<>();
@@ -60,3 +63,47 @@
         return projects;
     }
+
+    @Override
+    public void setUpUserJobMatches(Job job, User user) {
+        List<Skill> jobSkill = job.getSkillsRequired();
+        List<Skill> userSkill = user.getRetainedSkills();
+
+        float coef = Matchmaker.match(jobSkill, userSkill);
+
+        if(coef!=0){
+            EmbeddedMatchId matchId = new EmbeddedMatchId(job, user);
+            Match m = new Match(matchId, coef, WorkType.JOB);
+            this.matchRepository.save(m);
+        }
+    }
+
+    @Override
+    public void setUpUserProjectMatches(Project project, User user) {
+        List<Skill> projectSkills = project.getSkillsRequired();
+        List<Skill> userSkill = user.getRetainedSkills();
+
+        float coef = Matchmaker.match(projectSkills, userSkill);
+
+        if(coef!=0){
+            EmbeddedMatchId matchId = new EmbeddedMatchId(project, user);
+            Match m = new Match(matchId, coef, WorkType.PROJECT);
+            this.matchRepository.save(m);
+        }
+    }
+
+    @Override
+    public void setUpUserInternshipMatches(Internship internship, User user) {
+        List<Skill> internshipSkills = internship.getSkillsTrained();
+        List<Skill> userSkill = user.getSkillsToLearn();
+
+        float coef = Matchmaker.match(internshipSkills, userSkill);
+
+        if(coef!=0){
+            EmbeddedMatchId matchId = new EmbeddedMatchId(internship, user);
+            Match m = new Match(matchId, coef, WorkType.INTERNSHIP);
+            this.matchRepository.save(m);
+        }
+    }
+
+
 }
Index: src/main/java/it/finki/tinki/service/impl/WorkServiceImpl.java
===================================================================
--- src/main/java/it/finki/tinki/service/impl/WorkServiceImpl.java	(revision 509cb956bf2b3a456ea102e01dac170e0d7c6879)
+++ src/main/java/it/finki/tinki/service/impl/WorkServiceImpl.java	(revision 509cb956bf2b3a456ea102e01dac170e0d7c6879)
@@ -0,0 +1,101 @@
+package it.finki.tinki.service.impl;
+
+import it.finki.tinki.model.Jobs.Internship;
+import it.finki.tinki.model.Jobs.Job;
+import it.finki.tinki.model.Jobs.Project;
+import it.finki.tinki.model.Match;
+import it.finki.tinki.model.Skill;
+import it.finki.tinki.model.Users.Account;
+import it.finki.tinki.model.enumerator.AccountType;
+import it.finki.tinki.model.enumerator.WorkType;
+import it.finki.tinki.repository.InternshipRepository;
+import it.finki.tinki.repository.JobRepository;
+import it.finki.tinki.repository.MatchRepository;
+import it.finki.tinki.repository.ProjectRepository;
+import it.finki.tinki.service.AccountService;
+import it.finki.tinki.service.MatchmakerService;
+import it.finki.tinki.service.SkillService;
+import it.finki.tinki.service.WorkService;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+@Service
+public class WorkServiceImpl implements WorkService {
+
+    JobRepository jobRepository;
+    InternshipRepository internshipRepository;
+    ProjectRepository projectRepository;
+    MatchRepository matchRepository;
+    SkillService skillService;
+    AccountService accountService;
+
+    public WorkServiceImpl(JobRepository jobRepository,
+                           InternshipRepository internshipRepository,
+                           ProjectRepository projectRepository,
+                           MatchRepository matchRepository,
+                           SkillService skillService,
+                           AccountService accountService) {
+        this.jobRepository = jobRepository;
+        this.internshipRepository = internshipRepository;
+        this.projectRepository = projectRepository;
+        this.matchRepository = matchRepository;
+        this.skillService = skillService;
+        this.accountService = accountService;
+    }
+
+    @Override
+    public List<Job> getAllJobsByAccount(Long accId) {
+        return this.jobRepository.findAllByAccount_Id(accId);
+    }
+
+    @Override
+    public List<Internship> getAllInternshipsByAccount(Long accId) {
+        return this.internshipRepository.findAllByAccount_Id(accId);
+    }
+
+    @Override
+    public List<Project> getAllProjectsByAccount(Long accId) {
+        return this.projectRepository.findAllByAccount_Id(accId);
+    }
+
+    @Override
+    public List<Job> getAllJobs() {
+        return this.jobRepository.findAll();
+    }
+
+    @Override
+    public List<Internship> getAllInternships() {
+        return this.internshipRepository.findAll();
+    }
+
+    @Override
+    public List<Project> getAllProjects() {
+        return this.projectRepository.findAll();
+    }
+
+    @Override
+    public Job insertJob(String title, String description, Long adccId, int salary, List<Integer> skillsRequired, AccountType type) {
+        List<Skill> skills = this.skillService.returnSkillsBasedOnId(skillsRequired);
+        Account account = this.accountService.findByIdAndType(adccId, type);
+        Job j = new Job(title, description, account, salary, skills);
+        return this.jobRepository.save(j);
+    }
+
+    @Override
+    public Internship insertInternship(String title, String description, Long adccId, int salary, List<Integer> skillsTrained, int openSpots, AccountType type) {
+        List<Skill> skills = this.skillService.returnSkillsBasedOnId(skillsTrained);
+        Account account = this.accountService.findByIdAndType(adccId, type);
+        Internship j = new Internship(title, description, account, salary, skills, openSpots);
+        return this.internshipRepository.save(j);
+    }
+
+    @Override
+    public Project insertProject(String title, String description, Long adccId, int salary, List<Integer> skillsRequired, Date validUntil, AccountType type) {
+        List<Skill> skills = this.skillService.returnSkillsBasedOnId(skillsRequired);
+        Account account = this.accountService.findByIdAndType(adccId, type);
+        Project j = new Project(title, description, account, salary, skills, validUntil);
+        return this.projectRepository.save(j);
+    }
+}
