Index: src/main/java/it/finki/tinki/controller/LoginController.java
===================================================================
--- src/main/java/it/finki/tinki/controller/LoginController.java	(revision 9d4220de2b60d5a2a98b69046569f66d3f4a3ea1)
+++ 	(revision )
@@ -1,39 +1,0 @@
-package it.finki.tinki.controller;
-
-import it.finki.tinki.model.Users.Account;
-import it.finki.tinki.model.pojo.AccountLoginDataPojo;
-import it.finki.tinki.model.pojo.AuthResponseDataPojo;
-import it.finki.tinki.service.AccountService;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.server.ResponseStatusException;
-
-@RestController
-@CrossOrigin(origins = "http://localhost:3000")
-@RequestMapping("/api")
-public class LoginController {
-
-    AccountService accountService;
-
-    public LoginController(AccountService accountService) {
-        this.accountService = accountService;
-    }
-
-    @PostMapping(path = "/login")
-    public AuthResponseDataPojo testPage(@RequestBody AccountLoginDataPojo body) throws ResponseStatusException {
-
-        System.out.println(body);
-
-        Account a1 = accountService.findUser(body.getAccount(), body.getPassword(), body.getType());
-        AuthResponseDataPojo resp = new AuthResponseDataPojo();
-
-        if(a1!=null){
-            resp.setId(a1.getId());
-            resp.setEmail(a1.getEmail());
-            resp.setName(a1.getName());
-            resp.setType(a1.getAccountType());
-        }
-
-        return resp;
-    }
-
-}
Index: src/main/java/it/finki/tinki/controller/RegisterController.java
===================================================================
--- src/main/java/it/finki/tinki/controller/RegisterController.java	(revision 9d4220de2b60d5a2a98b69046569f66d3f4a3ea1)
+++ 	(revision )
@@ -1,92 +1,0 @@
-package it.finki.tinki.controller;
-
-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.SkillService;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-@RestController
-@CrossOrigin(origins = "http://localhost:3000")
-@RequestMapping("/api/register")
-public class RegisterController {
-
-    AccountService accountService;
-    SkillService skillService;
-
-    public RegisterController(AccountService accountService, SkillService skillService) {
-        this.accountService = accountService;
-        this.skillService = skillService;
-    }
-
-    @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){
-
-        List<Skill> retained = this.skillService.returnSkillsBasedOnId(retainedSkills);
-        List<Skill> toLearn = this.skillService.returnSkillsBasedOnId(skillsToLearn);
-
-        Account k = this.accountService.registerUser(email, password, name, surname, retained, toLearn);
-
-        Map<String, String> response = new HashMap<>();
-
-        if(k!=null){
-            response.put("error", "There was an error when trying to register user.");
-        }else{
-            response.put("success", "Registration completed successfully.");
-        }
-
-        return response;
-    }
-
-    @RequestMapping(path = "/team", method = RequestMethod.POST)
-    private Map<String, String> registerTeam(@RequestParam String email,
-                                             @RequestParam String password,
-                                             @RequestParam String name,
-                                             @RequestParam int members){
-
-        Account k = this.accountService.registerTeam(email, password, name, members);
-
-        Map<String, String> response = new HashMap<>();
-
-        if(k!=null){
-            response.put("error", "There was an error when trying to register team.");
-        }else{
-            response.put("success", "Registration completed successfully.");
-        }
-
-        return response;
-    }
-
-    @RequestMapping(path = "/company", method = RequestMethod.POST)
-    private Map<String, String> registerTeam(@RequestParam String email,
-                                             @RequestParam String password,
-                                             @RequestParam String name,
-                                             @RequestParam String country,
-                                             @RequestParam String city,
-                                             @RequestParam String street){
-
-        Account k = this.accountService.registerCompany(email, password, name, country, city, street);
-
-        Map<String, String> response = new HashMap<>();
-
-        if(k!=null){
-            response.put("error", "There was an error when trying to register company.");
-        }else{
-            response.put("success", "Registration completed successfully.");
-        }
-
-        return response;
-    }
-}
Index: src/main/java/it/finki/tinki/model/Match.java
===================================================================
--- src/main/java/it/finki/tinki/model/Match.java	(revision 9d4220de2b60d5a2a98b69046569f66d3f4a3ea1)
+++ src/main/java/it/finki/tinki/model/Match.java	(revision 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
@@ -1,4 +1,5 @@
 package it.finki.tinki.model;
 
+import it.finki.tinki.model.enumerator.WorkType;
 import lombok.Data;
 
@@ -14,8 +15,11 @@
     float coefficient;
 
+    WorkType type;
+
     public Match(){}
 
-    public Match(float coefficient) {
+    public Match(float coefficient, WorkType type) {
         this.coefficient = coefficient;
+        this.type = type;
     }
 }
Index: src/main/java/it/finki/tinki/model/dto/AccountLoginDTO.java
===================================================================
--- src/main/java/it/finki/tinki/model/dto/AccountLoginDTO.java	(revision 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
+++ src/main/java/it/finki/tinki/model/dto/AccountLoginDTO.java	(revision 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
@@ -0,0 +1,11 @@
+package it.finki.tinki.model.dto;
+
+import it.finki.tinki.model.enumerator.AccountType;
+import lombok.Data;
+
+@Data
+public class AccountLoginDTO {
+    private String email;
+    private String password;
+    private AccountType type;
+}
Index: src/main/java/it/finki/tinki/model/dto/AuthResponseDTO.java
===================================================================
--- src/main/java/it/finki/tinki/model/dto/AuthResponseDTO.java	(revision 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
+++ src/main/java/it/finki/tinki/model/dto/AuthResponseDTO.java	(revision 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
@@ -0,0 +1,19 @@
+package it.finki.tinki.model.dto;
+
+import it.finki.tinki.model.enumerator.AccountType;
+import lombok.Data;
+
+@Data
+public class AuthResponseDTO {
+    private Long id;
+    private String email;
+    private String name;
+    private AccountType type;
+
+    public AuthResponseDTO() {
+        this.id = null;
+        this.email = "Wrong username or password!";
+        this.name = "Wrong username or password!";
+        this.type = null;
+    }
+}
Index: src/main/java/it/finki/tinki/model/dto/CompanyResponseDTO.java
===================================================================
--- src/main/java/it/finki/tinki/model/dto/CompanyResponseDTO.java	(revision 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
+++ src/main/java/it/finki/tinki/model/dto/CompanyResponseDTO.java	(revision 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
@@ -0,0 +1,15 @@
+package it.finki.tinki.model.dto;
+
+import it.finki.tinki.model.Address;
+import it.finki.tinki.model.Jobs.Internship;
+import it.finki.tinki.model.Jobs.Job;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class CompanyResponseDTO extends LoginResponseDTO {
+    private Address address;
+    private List<Job> jobs;
+    private List<Internship> internships;
+}
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 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
@@ -0,0 +1,12 @@
+package it.finki.tinki.model.dto;
+
+import it.finki.tinki.model.enumerator.AccountType;
+import lombok.Data;
+
+@Data
+public class LoginResponseDTO {
+    private Long id;
+    private String email;
+    private String name;
+    private AccountType type;
+}
Index: src/main/java/it/finki/tinki/model/dto/TeamResponseDTO.java
===================================================================
--- src/main/java/it/finki/tinki/model/dto/TeamResponseDTO.java	(revision 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
+++ src/main/java/it/finki/tinki/model/dto/TeamResponseDTO.java	(revision 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
@@ -0,0 +1,14 @@
+package it.finki.tinki.model.dto;
+
+import it.finki.tinki.model.Jobs.Job;
+import it.finki.tinki.model.Jobs.Project;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class TeamResponseDTO extends LoginResponseDTO{
+    private int members;
+    private List<Job> jobs;
+    private List<Project> projects;
+}
Index: src/main/java/it/finki/tinki/model/dto/UserResponseDTO.java
===================================================================
--- src/main/java/it/finki/tinki/model/dto/UserResponseDTO.java	(revision 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
+++ src/main/java/it/finki/tinki/model/dto/UserResponseDTO.java	(revision 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
@@ -0,0 +1,19 @@
+package it.finki.tinki.model.dto;
+
+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 lombok.Data;
+
+import java.util.List;
+
+@Data
+public class UserResponseDTO extends LoginResponseDTO{
+    private String surname;
+    private List<Skill> retained;
+    private List<Skill> toLearn;
+    private List<Job> jobs;
+    private List<Internship> internships;
+    private List<Project> projects;
+}
Index: src/main/java/it/finki/tinki/model/enumerator/WorkType.java
===================================================================
--- src/main/java/it/finki/tinki/model/enumerator/WorkType.java	(revision 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
+++ src/main/java/it/finki/tinki/model/enumerator/WorkType.java	(revision 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
@@ -0,0 +1,7 @@
+package it.finki.tinki.model.enumerator;
+
+public enum WorkType {
+    JOB,
+    INTERNSHIP,
+    PROJECT
+}
Index: src/main/java/it/finki/tinki/model/pojo/AccountLoginDataPojo.java
===================================================================
--- src/main/java/it/finki/tinki/model/pojo/AccountLoginDataPojo.java	(revision 9d4220de2b60d5a2a98b69046569f66d3f4a3ea1)
+++ 	(revision )
@@ -1,11 +1,0 @@
-package it.finki.tinki.model.pojo;
-
-import it.finki.tinki.model.enumerator.AccountType;
-import lombok.Data;
-
-@Data
-public class AccountLoginDataPojo {
-    private String account;
-    private String password;
-    private AccountType type;
-}
Index: src/main/java/it/finki/tinki/model/pojo/AuthResponseDataPojo.java
===================================================================
--- src/main/java/it/finki/tinki/model/pojo/AuthResponseDataPojo.java	(revision 9d4220de2b60d5a2a98b69046569f66d3f4a3ea1)
+++ 	(revision )
@@ -1,19 +1,0 @@
-package it.finki.tinki.model.pojo;
-
-import it.finki.tinki.model.enumerator.AccountType;
-import lombok.Data;
-
-@Data
-public class AuthResponseDataPojo {
-    Long id;
-    String email;
-    String name;
-    AccountType type;
-
-    public AuthResponseDataPojo() {
-        this.id = null;
-        this.email = "Wrong username or password!";
-        this.name = "Wrong username or password!";
-        this.type = null;
-    }
-}
Index: src/main/java/it/finki/tinki/repository/MatchRepository.java
===================================================================
--- src/main/java/it/finki/tinki/repository/MatchRepository.java	(revision 9d4220de2b60d5a2a98b69046569f66d3f4a3ea1)
+++ src/main/java/it/finki/tinki/repository/MatchRepository.java	(revision 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
@@ -2,8 +2,13 @@
 
 import it.finki.tinki.model.Match;
+import it.finki.tinki.model.Users.User;
+import it.finki.tinki.model.enumerator.WorkType;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 @Repository
 public interface MatchRepository extends JpaRepository<Match, Long> {
+    List<Match> getAllByCombinedId_UserAndTypeOrderByCoefficientDesc(User user, WorkType 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 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
@@ -0,0 +1,14 @@
+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.Users.User;
+
+import java.util.List;
+
+public interface MatchmakerService {
+    List<Internship> getMatchingInternshipsForUser(User user);
+    List<Job> getMatchingJobsForUser(User user);
+    List<Project> getMatchingProjectsForUser(User user);
+}
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 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
@@ -0,0 +1,62 @@
+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.Users.Team;
+import it.finki.tinki.model.Users.User;
+import it.finki.tinki.model.enumerator.WorkType;
+import it.finki.tinki.repository.MatchRepository;
+import it.finki.tinki.service.MatchmakerService;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+@Service
+public class MatchmakerServiceImpl implements MatchmakerService {
+
+    MatchRepository matchRepository;
+
+    public MatchmakerServiceImpl(MatchRepository matchRepository) {
+        this.matchRepository = matchRepository;
+    }
+
+    @Override
+    public List<Internship> getMatchingInternshipsForUser(User user) {
+        List<Match> matches = this.matchRepository.getAllByCombinedId_UserAndTypeOrderByCoefficientDesc(user, WorkType.INTERNSHIP);
+
+        List<Internship> internships = new ArrayList<>();
+        matches.forEach(match -> {
+            internships.add((Internship) match.getCombinedId().getWork());
+        });
+
+        return internships;
+    }
+
+    @Override
+    public List<Job> getMatchingJobsForUser(User user) {
+        List<Match> matches = this.matchRepository.getAllByCombinedId_UserAndTypeOrderByCoefficientDesc(user, WorkType.JOB);
+
+        List<Job> jobs = new ArrayList<>();
+        matches.forEach(match -> {
+            jobs.add((Job) match.getCombinedId().getWork());
+        });
+
+        return jobs;
+    }
+
+    @Override
+    public List<Project> getMatchingProjectsForUser(User user) {
+        List<Match> matches = this.matchRepository.getAllByCombinedId_UserAndTypeOrderByCoefficientDesc(user, WorkType.PROJECT);
+
+        List<Project> projects = new ArrayList<>();
+        matches.forEach(match -> {
+            projects.add((Project) match.getCombinedId().getWork());
+        });
+
+        return projects;
+    }
+}
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 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
@@ -0,0 +1,66 @@
+package it.finki.tinki.web.controller;
+
+import it.finki.tinki.model.Users.Account;
+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.enumerator.AccountType;
+import it.finki.tinki.service.AccountService;
+import it.finki.tinki.service.MatchmakerService;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.server.ResponseStatusException;
+
+import java.util.Map;
+
+@RestController
+@CrossOrigin(origins = "http://localhost:3000")
+@RequestMapping("/api")
+public class LoginController {
+
+    AccountService accountService;
+    MatchmakerService matchmakerService;
+
+    public LoginController(AccountService accountService, MatchmakerService matchmakerService) {
+        this.accountService = accountService;
+        this.matchmakerService = matchmakerService;
+    }
+
+    @PostMapping(path = "/login")
+    public LoginResponseDTO testPage(@RequestBody AccountLoginDTO body) throws ResponseStatusException {
+
+        System.out.println(body);
+
+        Account a1 = accountService.findUser(body.getEmail(), body.getPassword(), body.getType());
+        if(a1!=null){
+            if(a1.getClass().equals(User.class)){
+
+                UserResponseDTO uDto = new UserResponseDTO();
+
+                uDto.setId(a1.getId());
+                uDto.setEmail(a1.getEmail());
+                uDto.setName(a1.getName());
+                uDto.setType(AccountType.USER);
+                uDto.setSurname(((User) a1).getSurname());
+
+                uDto.setRetained(((User) a1).getRetainedSkills());
+                uDto.setToLearn(((User) a1).getSkillsToLearn());
+
+                uDto.setInternships(this.matchmakerService.getMatchingInternshipsForUser((User) a1));
+                uDto.setJobs(this.matchmakerService.getMatchingJobsForUser((User) a1));
+                uDto.setProjects(this.matchmakerService.getMatchingProjectsForUser((User) a1));
+
+                return uDto;
+            }else if(a1.getClass().equals(Team.class)){
+
+            }else{
+
+            }
+        }
+
+        return null;
+    }
+
+}
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 723994f8a33ce7a2bae5dc0b1def9351e7a32141)
@@ -0,0 +1,89 @@
+package it.finki.tinki.web.controller;
+
+import it.finki.tinki.model.Skill;
+import it.finki.tinki.model.Users.Account;
+import it.finki.tinki.service.AccountService;
+import it.finki.tinki.service.SkillService;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@CrossOrigin(origins = "http://localhost:3000")
+@RequestMapping("/api/register")
+public class RegisterController {
+
+    AccountService accountService;
+    SkillService skillService;
+
+    public RegisterController(AccountService accountService, SkillService skillService) {
+        this.accountService = accountService;
+        this.skillService = skillService;
+    }
+
+    @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){
+
+        List<Skill> retained = this.skillService.returnSkillsBasedOnId(retainedSkills);
+        List<Skill> toLearn = this.skillService.returnSkillsBasedOnId(skillsToLearn);
+
+        Account k = this.accountService.registerUser(email, password, name, surname, retained, toLearn);
+
+        Map<String, String> response = new HashMap<>();
+
+        if(k!=null){
+            response.put("error", "There was an error when trying to register user.");
+        }else{
+            response.put("success", "Registration completed successfully.");
+        }
+
+        return response;
+    }
+
+    @RequestMapping(path = "/team", method = RequestMethod.POST)
+    private Map<String, String> registerTeam(@RequestParam String email,
+                                             @RequestParam String password,
+                                             @RequestParam String name,
+                                             @RequestParam int members){
+
+        Account k = this.accountService.registerTeam(email, password, name, members);
+
+        Map<String, String> response = new HashMap<>();
+
+        if(k!=null){
+            response.put("error", "There was an error when trying to register team.");
+        }else{
+            response.put("success", "Registration completed successfully.");
+        }
+
+        return response;
+    }
+
+    @RequestMapping(path = "/company", method = RequestMethod.POST)
+    private Map<String, String> registerTeam(@RequestParam String email,
+                                             @RequestParam String password,
+                                             @RequestParam String name,
+                                             @RequestParam String country,
+                                             @RequestParam String city,
+                                             @RequestParam String street){
+
+        Account k = this.accountService.registerCompany(email, password, name, country, city, street);
+
+        Map<String, String> response = new HashMap<>();
+
+        if(k!=null){
+            response.put("error", "There was an error when trying to register company.");
+        }else{
+            response.put("success", "Registration completed successfully.");
+        }
+
+        return response;
+    }
+}
