Index: src/main/java/it/finki/tinki/SecurityConfiguration.java
===================================================================
--- src/main/java/it/finki/tinki/SecurityConfiguration.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
+++ src/main/java/it/finki/tinki/SecurityConfiguration.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
@@ -0,0 +1,18 @@
+package it.finki.tinki;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+
+@Configuration
+public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
+
+    @Override
+    protected void configure(HttpSecurity http) throws Exception {
+        http.authorizeRequests().antMatchers("/").permitAll()
+                .antMatchers("/h2").permitAll();
+
+        http.csrf().disable();
+        http.headers().frameOptions().disable();
+    }
+}
Index: src/main/java/it/finki/tinki/TinkiApplication.java
===================================================================
--- src/main/java/it/finki/tinki/TinkiApplication.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
+++ src/main/java/it/finki/tinki/TinkiApplication.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
@@ -0,0 +1,13 @@
+package it.finki.tinki;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class TinkiApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(TinkiApplication.class, args);
+    }
+
+}
Index: src/main/java/it/finki/tinki/bootstrap/DataHolder.java
===================================================================
--- src/main/java/it/finki/tinki/bootstrap/DataHolder.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
+++ src/main/java/it/finki/tinki/bootstrap/DataHolder.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
@@ -0,0 +1,7 @@
+package it.finki.tinki.bootstrap;
+
+import javax.annotation.PostConstruct;
+
+public class DataHolder {
+
+}
Index: src/main/java/it/finki/tinki/model/Address.java
===================================================================
--- src/main/java/it/finki/tinki/model/Address.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
+++ src/main/java/it/finki/tinki/model/Address.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
@@ -0,0 +1,26 @@
+package it.finki.tinki.model;
+
+import lombok.Data;
+
+import javax.persistence.*;
+
+@Entity
+@Data
+public class Address {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    Long id;
+
+    String country;
+    String city;
+    String street;
+
+    public Address() {}
+
+    public Address(String country, String city, String street) {
+        this.country = country;
+        this.city = city;
+        this.street = street;
+    }
+}
Index: src/main/java/it/finki/tinki/model/EmbeddedMatchId.java
===================================================================
--- src/main/java/it/finki/tinki/model/EmbeddedMatchId.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
+++ src/main/java/it/finki/tinki/model/EmbeddedMatchId.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
@@ -0,0 +1,20 @@
+package it.finki.tinki.model;
+
+import it.finki.tinki.model.Jobs.Work;
+import it.finki.tinki.model.Users.User;
+import lombok.Data;
+
+import javax.persistence.Embeddable;
+import javax.persistence.OneToOne;
+import java.io.Serializable;
+
+@Embeddable
+@Data
+public class EmbeddedMatchId implements Serializable {
+
+    @OneToOne
+    private Work work;
+
+    @OneToOne
+    private User user;
+}
Index: src/main/java/it/finki/tinki/model/Jobs/Internship.java
===================================================================
--- src/main/java/it/finki/tinki/model/Jobs/Internship.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
+++ src/main/java/it/finki/tinki/model/Jobs/Internship.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
@@ -0,0 +1,26 @@
+package it.finki.tinki.model.Jobs;
+
+import it.finki.tinki.model.Skill;
+import it.finki.tinki.model.Users.Account;
+import lombok.Data;
+
+import javax.persistence.*;
+import java.util.List;
+
+@Entity
+@Data
+public class Internship extends Work {
+
+    @ManyToMany
+    List<Skill> skillsTrained;
+
+    int openSpots;
+
+    public Internship(){}
+
+    public Internship(String title, String description, Account account, int salary, List<Skill> skillsTrained, int openSpots) {
+        super(title, description, account, salary);
+        this.skillsTrained = skillsTrained;
+        this.openSpots = openSpots;
+    }
+}
Index: src/main/java/it/finki/tinki/model/Jobs/Job.java
===================================================================
--- src/main/java/it/finki/tinki/model/Jobs/Job.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
+++ src/main/java/it/finki/tinki/model/Jobs/Job.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
@@ -0,0 +1,23 @@
+package it.finki.tinki.model.Jobs;
+
+import it.finki.tinki.model.Skill;
+import it.finki.tinki.model.Users.Account;
+import lombok.Data;
+
+import javax.persistence.*;
+import java.util.List;
+
+@Entity
+@Data
+public class Job extends Work {
+
+    @ManyToMany
+    List<Skill> skillsRequired;
+
+    public Job(){}
+
+    public Job(String title, String description, Account account, int salary, List<Skill> skillsRequired) {
+        super(title, description, account, salary);
+        this.skillsRequired = skillsRequired;
+    }
+}
Index: src/main/java/it/finki/tinki/model/Jobs/Project.java
===================================================================
--- src/main/java/it/finki/tinki/model/Jobs/Project.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
+++ src/main/java/it/finki/tinki/model/Jobs/Project.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
@@ -0,0 +1,27 @@
+package it.finki.tinki.model.Jobs;
+
+import it.finki.tinki.model.Skill;
+import it.finki.tinki.model.Users.Account;
+import lombok.Data;
+
+import javax.persistence.*;
+import java.util.Date;
+import java.util.List;
+
+@Entity
+@Data
+public class Project extends Work {
+
+    @ManyToMany
+    List<Skill> skillsRequired;
+
+    Date validUntil;
+
+    public Project(){}
+
+    public Project(String title, String description, Account account, int salary, List<Skill> skillsRequired, Date validUntil) {
+        super(title, description, account, salary);
+        this.skillsRequired = skillsRequired;
+        this.validUntil = validUntil;
+    }
+}
Index: src/main/java/it/finki/tinki/model/Jobs/Work.java
===================================================================
--- src/main/java/it/finki/tinki/model/Jobs/Work.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
+++ src/main/java/it/finki/tinki/model/Jobs/Work.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
@@ -0,0 +1,33 @@
+package it.finki.tinki.model.Jobs;
+
+import it.finki.tinki.model.Users.Account;
+import lombok.Data;
+
+import javax.persistence.*;
+
+@Entity
+@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
+@Data
+public abstract class Work {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    Long id;
+
+    String title;
+    String description;
+
+    @ManyToOne(targetEntity = Account.class)
+    Account account;
+
+    int salary;
+
+    public Work(){}
+
+    public Work(String title, String description, Account account, int salary) {
+        this.title = title;
+        this.description = description;
+        this.account = account;
+        this.salary = salary;
+    }
+}
Index: src/main/java/it/finki/tinki/model/Match.java
===================================================================
--- src/main/java/it/finki/tinki/model/Match.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
+++ src/main/java/it/finki/tinki/model/Match.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
@@ -0,0 +1,21 @@
+package it.finki.tinki.model;
+
+import lombok.Data;
+
+import javax.persistence.*;
+
+@Entity
+@Data
+public class Match {
+
+    @Id
+    EmbeddedMatchId combinedId;
+
+    float coefficient;
+
+    public Match(){}
+
+    public Match(float coefficient) {
+        this.coefficient = coefficient;
+    }
+}
Index: src/main/java/it/finki/tinki/model/Skill.java
===================================================================
--- src/main/java/it/finki/tinki/model/Skill.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
+++ src/main/java/it/finki/tinki/model/Skill.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
@@ -0,0 +1,25 @@
+package it.finki.tinki.model;
+
+import lombok.Data;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+@Entity
+@Data
+public class Skill {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    Long id;
+
+    String name;
+
+    public Skill(){}
+
+    public Skill(String name) {
+        this.name = name;
+    }
+}
Index: src/main/java/it/finki/tinki/model/Users/Account.java
===================================================================
--- src/main/java/it/finki/tinki/model/Users/Account.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
+++ src/main/java/it/finki/tinki/model/Users/Account.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
@@ -0,0 +1,32 @@
+package it.finki.tinki.model.Users;
+
+import it.finki.tinki.model.enumerator.AccountType;
+import lombok.Data;
+
+import javax.persistence.*;
+
+@Entity
+@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
+@Data
+public abstract class Account {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    Long id;
+
+    String email;
+    String password;
+
+    String name;
+
+    AccountType accountType;
+
+    public Account(){}
+
+    public Account(String email, String password, String name, AccountType accountType) {
+        this.email = email;
+        this.password = password;
+        this.name = name;
+        this.accountType = accountType;
+    }
+}
Index: src/main/java/it/finki/tinki/model/Users/Company.java
===================================================================
--- src/main/java/it/finki/tinki/model/Users/Company.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
+++ src/main/java/it/finki/tinki/model/Users/Company.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
@@ -0,0 +1,23 @@
+package it.finki.tinki.model.Users;
+
+import it.finki.tinki.model.Address;
+import it.finki.tinki.model.enumerator.AccountType;
+import lombok.Data;
+
+import javax.persistence.Entity;
+import javax.persistence.OneToOne;
+
+@Entity
+@Data
+public class Company extends Account{
+
+    @OneToOne
+    Address address;
+
+    public Company(){}
+
+    public Company(String email, String password, String name, AccountType accountType, Address address) {
+        super(email, password, name, accountType);
+        this.address = address;
+    }
+}
Index: src/main/java/it/finki/tinki/model/Users/Team.java
===================================================================
--- src/main/java/it/finki/tinki/model/Users/Team.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
+++ src/main/java/it/finki/tinki/model/Users/Team.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
@@ -0,0 +1,20 @@
+package it.finki.tinki.model.Users;
+
+import it.finki.tinki.model.enumerator.AccountType;
+import lombok.Data;
+
+import javax.persistence.Entity;
+
+@Entity
+@Data
+public class Team extends Account {
+
+    int members;
+
+    public Team(){}
+
+    public Team(String email, String password, String name, AccountType accountType, int members) {
+        super(email, password, name, accountType);
+        this.members = members;
+    }
+}
Index: src/main/java/it/finki/tinki/model/Users/User.java
===================================================================
--- src/main/java/it/finki/tinki/model/Users/User.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
+++ src/main/java/it/finki/tinki/model/Users/User.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
@@ -0,0 +1,31 @@
+package it.finki.tinki.model.Users;
+
+import it.finki.tinki.model.Skill;
+import it.finki.tinki.model.enumerator.AccountType;
+import lombok.Data;
+
+import javax.persistence.Entity;
+import javax.persistence.ManyToMany;
+import java.util.List;
+
+@Entity
+@Data
+public class User extends Account{
+
+    String surname;
+
+    @ManyToMany
+    List<Skill> retainedSkills;
+
+    @ManyToMany
+    List<Skill> skillsToLearn;
+
+    public User(){}
+
+    public User(String email, String password, String name, AccountType accountType, String surname, List<Skill> retainedSkills, List<Skill> skillsToLearn) {
+        super(email, password, name, accountType);
+        this.surname = surname;
+        this.retainedSkills = retainedSkills;
+        this.skillsToLearn = skillsToLearn;
+    }
+}
Index: src/main/java/it/finki/tinki/model/enumerator/AccountType.java
===================================================================
--- src/main/java/it/finki/tinki/model/enumerator/AccountType.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
+++ src/main/java/it/finki/tinki/model/enumerator/AccountType.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
@@ -0,0 +1,7 @@
+package it.finki.tinki.model.enumerator;
+
+public enum AccountType {
+    USER,
+    TEAM,
+    COMPANY
+}
Index: src/main/java/it/finki/tinki/repository/InternshipRepository.java
===================================================================
--- src/main/java/it/finki/tinki/repository/InternshipRepository.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
+++ src/main/java/it/finki/tinki/repository/InternshipRepository.java	(revision e6ff7241c31091c3de6c6687022e758bec6738ec)
@@ -0,0 +1,11 @@
+package it.finki.tinki.repository;
+
+import it.finki.tinki.model.Jobs.Internship;
+import it.finki.tinki.model.Jobs.Work;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.List;
+
+public interface InternshipRepository extends JpaRepository<Internship, Long> {
+    List<Internship> findAllByAccount_Id(Long accountId);
+}
