Index: src/main/java/it/finki/tinki/bootstrap/DataHolder.java
===================================================================
--- src/main/java/it/finki/tinki/bootstrap/DataHolder.java	(revision 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
+++ src/main/java/it/finki/tinki/bootstrap/DataHolder.java	(revision 509cb956bf2b3a456ea102e01dac170e0d7c6879)
@@ -56,4 +56,9 @@
         }
 
+        List<Skill> lista;
+        lista = skillRepository.findAll();
+
+        userRepository.save(new User("asdf", "asdf", "Zoki", AccountType.USER, "Poki", lista, lista));
+
         addressRepository.save(new Address("asdf", "asdf", "asdf"));
         companyRepository.save(new Company("asdf@asdf", "pass", "Co.co", AccountType.COMPANY, addressRepository.findAll().get(0)));
Index: src/main/java/it/finki/tinki/helper/Matchmaker.java
===================================================================
--- src/main/java/it/finki/tinki/helper/Matchmaker.java	(revision 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
+++ src/main/java/it/finki/tinki/helper/Matchmaker.java	(revision 509cb956bf2b3a456ea102e01dac170e0d7c6879)
@@ -2,9 +2,12 @@
 
 import it.finki.tinki.model.Skill;
+import org.springframework.stereotype.Component;
+
 import java.util.List;
 
+@Component
 public class Matchmaker {
 
-    public float match(List<Skill> work, List<Skill> user){
+    public static float match(List<Skill> work, List<Skill> user){
 
         float coef = work.size();
Index: src/main/java/it/finki/tinki/model/EmbeddedMatchId.java
===================================================================
--- src/main/java/it/finki/tinki/model/EmbeddedMatchId.java	(revision 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
+++ src/main/java/it/finki/tinki/model/EmbeddedMatchId.java	(revision 509cb956bf2b3a456ea102e01dac170e0d7c6879)
@@ -18,3 +18,11 @@
     @OneToOne
     private User user;
+
+    public EmbeddedMatchId(){ }
+
+    public EmbeddedMatchId(Work work, User user){
+        this.work = work;
+        this.user = user;
+    }
+
 }
Index: src/main/java/it/finki/tinki/model/Match.java
===================================================================
--- src/main/java/it/finki/tinki/model/Match.java	(revision 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
+++ src/main/java/it/finki/tinki/model/Match.java	(revision 509cb956bf2b3a456ea102e01dac170e0d7c6879)
@@ -19,5 +19,6 @@
     public Match(){}
 
-    public Match(float coefficient, WorkType type) {
+    public Match(EmbeddedMatchId embeddedMatchId, float coefficient, WorkType type) {
+        this.combinedId = embeddedMatchId;
         this.coefficient = coefficient;
         this.type = type;
Index: src/main/java/it/finki/tinki/model/dto/LoginResponseDTO.java
===================================================================
--- src/main/java/it/finki/tinki/model/dto/LoginResponseDTO.java	(revision 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
+++ src/main/java/it/finki/tinki/model/dto/LoginResponseDTO.java	(revision 509cb956bf2b3a456ea102e01dac170e0d7c6879)
@@ -10,3 +10,8 @@
     private String name;
     private AccountType type;
+    private String error;
+
+    public LoginResponseDTO() {
+        this.error = "Invalid username or password!";
+    }
 }
Index: src/main/java/it/finki/tinki/repository/MatchRepository.java
===================================================================
--- src/main/java/it/finki/tinki/repository/MatchRepository.java	(revision 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
+++ src/main/java/it/finki/tinki/repository/MatchRepository.java	(revision 509cb956bf2b3a456ea102e01dac170e0d7c6879)
@@ -11,4 +11,4 @@
 @Repository
 public interface MatchRepository extends JpaRepository<Match, Long> {
-    List<Match> getAllByCombinedId_UserAndTypeOrderByCoefficientDesc(User user, WorkType type);
+    List<Match> getAllByCombinedId_User_IdAndTypeOrderByCoefficientDesc(Long uId, WorkType type);
 }
Index: src/main/java/it/finki/tinki/service/AccountService.java
===================================================================
--- src/main/java/it/finki/tinki/service/AccountService.java	(revision 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
+++ src/main/java/it/finki/tinki/service/AccountService.java	(revision 509cb956bf2b3a456ea102e01dac170e0d7c6879)
@@ -6,5 +6,4 @@
 
 import java.util.List;
-import java.util.Map;
 
 public interface AccountService {
@@ -13,3 +12,4 @@
     Account registerTeam(String email, String password, String name, int members);
     Account registerCompany(String email, String password, String name, String country, String city, String street);
+    Account findByIdAndType(Long accId, AccountType type);
 }
Index: src/main/java/it/finki/tinki/service/MatchmakerService.java
===================================================================
--- src/main/java/it/finki/tinki/service/MatchmakerService.java	(revision 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
+++ src/main/java/it/finki/tinki/service/MatchmakerService.java	(revision 509cb956bf2b3a456ea102e01dac170e0d7c6879)
@@ -12,3 +12,6 @@
     List<Job> getMatchingJobsForUser(User user);
     List<Project> getMatchingProjectsForUser(User user);
+    void setUpUserJobMatches(Job job, User user);
+    void setUpUserProjectMatches(Project project, User user);
+    void setUpUserInternshipMatches(Internship internship, User user);
 }
Index: src/main/java/it/finki/tinki/service/WorkService.java
===================================================================
--- src/main/java/it/finki/tinki/service/WorkService.java	(revision 509cb956bf2b3a456ea102e01dac170e0d7c6879)
+++ src/main/java/it/finki/tinki/service/WorkService.java	(revision 509cb956bf2b3a456ea102e01dac170e0d7c6879)
@@ -0,0 +1,21 @@
+package it.finki.tinki.service;
+
+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.enumerator.AccountType;
+
+import java.util.Date;
+import java.util.List;
+
+public interface WorkService {
+    List<Job> getAllJobsByAccount(Long accId);
+    List<Internship> getAllInternshipsByAccount(Long accId);
+    List<Project> getAllProjectsByAccount(Long accId);
+    List<Job> getAllJobs();
+    List<Internship> getAllInternships();
+    List<Project> getAllProjects();
+    Job insertJob(String title, String description, Long accId, int salary, List<Integer> skillsRequired, AccountType type);
+    Internship insertInternship(String title, String description, Long adccId, int salary, List<Integer> skillsTrained, int openSpots, AccountType type);
+    Project insertProject(String title, String description, Long adccId, int salary, List<Integer> skillsRequired, Date validUntil, AccountType type);
+}
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);
+    }
+}
Index: src/main/java/it/finki/tinki/web/controller/LoginController.java
===================================================================
--- src/main/java/it/finki/tinki/web/controller/LoginController.java	(revision 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
+++ src/main/java/it/finki/tinki/web/controller/LoginController.java	(revision 509cb956bf2b3a456ea102e01dac170e0d7c6879)
@@ -2,13 +2,13 @@
 
 import it.finki.tinki.model.Users.Account;
+import it.finki.tinki.model.Users.Company;
 import it.finki.tinki.model.Users.Team;
 import it.finki.tinki.model.Users.User;
-import it.finki.tinki.model.dto.AccountLoginDTO;
-import it.finki.tinki.model.dto.AuthResponseDTO;
-import it.finki.tinki.model.dto.LoginResponseDTO;
-import it.finki.tinki.model.dto.UserResponseDTO;
+import it.finki.tinki.model.dto.*;
 import it.finki.tinki.model.enumerator.AccountType;
 import it.finki.tinki.service.AccountService;
 import it.finki.tinki.service.MatchmakerService;
+import it.finki.tinki.service.WorkService;
+import org.apache.coyote.Response;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.server.ResponseStatusException;
@@ -23,8 +23,10 @@
     AccountService accountService;
     MatchmakerService matchmakerService;
+    WorkService workService;
 
-    public LoginController(AccountService accountService, MatchmakerService matchmakerService) {
+    public LoginController(AccountService accountService, MatchmakerService matchmakerService, WorkService workService) {
         this.accountService = accountService;
         this.matchmakerService = matchmakerService;
+        this.workService = workService;
     }
 
@@ -35,8 +37,11 @@
 
         Account a1 = accountService.findUser(body.getEmail(), body.getPassword(), body.getType());
+
         if(a1!=null){
             if(a1.getClass().equals(User.class)){
 
                 UserResponseDTO uDto = new UserResponseDTO();
+
+                uDto.setError(null);
 
                 uDto.setId(a1.getId());
@@ -54,12 +59,43 @@
 
                 return uDto;
+
             }else if(a1.getClass().equals(Team.class)){
 
+                TeamResponseDTO tDto = new TeamResponseDTO();
+
+                tDto.setError(null);
+
+                tDto.setId(a1.getId());
+                tDto.setEmail(a1.getEmail());
+                tDto.setName(a1.getName());
+                tDto.setType(AccountType.USER);
+                tDto.setMembers(((Team) a1).getMembers());
+
+                tDto.setJobs(this.workService.getAllJobsByAccount(a1.getId()));
+                tDto.setProjects(this.workService.getAllProjectsByAccount(a1.getId()));
+
+                return tDto;
+
             }else{
+
+                CompanyResponseDTO cDto = new CompanyResponseDTO();
+
+                cDto.setError(null);
+
+                cDto.setId(a1.getId());
+                cDto.setEmail(a1.getEmail());
+                cDto.setName(a1.getName());
+                cDto.setType(AccountType.USER);
+                cDto.setAddress(((Company) a1).getAddress());
+
+                cDto.setJobs(this.workService.getAllJobsByAccount(a1.getId()));
+                cDto.setInternships(this.workService.getAllInternshipsByAccount(a1.getId()));
+
+                return cDto;
 
             }
         }
 
-        return null;
+        return new LoginResponseDTO();
     }
 
Index: src/main/java/it/finki/tinki/web/controller/RegisterController.java
===================================================================
--- src/main/java/it/finki/tinki/web/controller/RegisterController.java	(revision 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
+++ src/main/java/it/finki/tinki/web/controller/RegisterController.java	(revision 509cb956bf2b3a456ea102e01dac170e0d7c6879)
@@ -1,8 +1,15 @@
 package it.finki.tinki.web.controller;
 
+import it.finki.tinki.helper.Matchmaker;
+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.Skill;
 import it.finki.tinki.model.Users.Account;
+import it.finki.tinki.model.Users.User;
 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.web.bind.annotation.*;
 
@@ -18,17 +25,21 @@
     AccountService accountService;
     SkillService skillService;
+    WorkService workService;
+    MatchmakerService matchmakerService;
 
-    public RegisterController(AccountService accountService, SkillService skillService) {
+    public RegisterController(AccountService accountService, SkillService skillService, WorkService workService, MatchmakerService matchmakerService) {
         this.accountService = accountService;
         this.skillService = skillService;
+        this.workService = workService;
+        this.matchmakerService = matchmakerService;
     }
 
     @RequestMapping(path = "/user", method = RequestMethod.POST)
     private Map<String, String> registerUser(@RequestParam String email,
-                                                @RequestParam String password,
-                                                @RequestParam String name,
-                                                @RequestParam String surname,
-                                                @RequestParam List<Integer> retainedSkills,
-                                                @RequestParam List<Integer> skillsToLearn){
+                                             @RequestParam String password,
+                                             @RequestParam String name,
+                                             @RequestParam String surname,
+                                             @RequestParam List<Integer> retainedSkills,
+                                             @RequestParam List<Integer> skillsToLearn){
 
         List<Skill> retained = this.skillService.returnSkillsBasedOnId(retainedSkills);
@@ -39,7 +50,23 @@
         Map<String, String> response = new HashMap<>();
 
-        if(k!=null){
+        if(k==null){
             response.put("error", "There was an error when trying to register user.");
         }else{
+            List<Job> jobs = this.workService.getAllJobs();
+            List<Project> projects = this.workService.getAllProjects();
+            List<Internship> internships = this.workService.getAllInternships();
+
+            jobs.forEach(job -> {
+                this.matchmakerService.setUpUserJobMatches(job, (User) k);
+            });
+
+            projects.forEach(project -> {
+                this.matchmakerService.setUpUserProjectMatches(project, (User) k);
+            });
+
+            internships.forEach(internship -> {
+                this.matchmakerService.setUpUserInternshipMatches(internship, (User) k);
+            });
+
             response.put("success", "Registration completed successfully.");
         }
@@ -58,5 +85,5 @@
         Map<String, String> response = new HashMap<>();
 
-        if(k!=null){
+        if(k==null){
             response.put("error", "There was an error when trying to register team.");
         }else{
@@ -79,5 +106,5 @@
         Map<String, String> response = new HashMap<>();
 
-        if(k!=null){
+        if(k==null){
             response.put("error", "There was an error when trying to register company.");
         }else{
