diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000..e5fef68
Binary files /dev/null and b/.DS_Store differ
diff --git a/README.md b/README.md
index 1e099d4..3ee8251 100644
--- a/README.md
+++ b/README.md
@@ -12,9 +12,7 @@ You can have an overview of our Spring Boot Server with the diagram below:
 
 For more detail, please visit:
 > [Secure Spring Boot App with Spring Security & JWT Authentication](https://bezkoder.com/spring-boot-jwt-authentication/)
-
 > [For MongoDB](https://bezkoder.com/spring-boot-jwt-auth-mongodb/)
-
 ## Refresh Token
 
 ![spring-boot-refresh-token-jwt-example-flow](spring-boot-refresh-token-jwt-example-flow.png)
@@ -24,55 +22,32 @@ For instruction: [Spring Boot Refresh Token with JWT example](https://bezkoder.c
 ## Fullstack Authentication
 
 > [Spring Boot + Vue.js JWT Authentication](https://bezkoder.com/spring-boot-vue-js-authentication-jwt-spring-security/)
-
 > [Spring Boot + Angular 8 JWT Authentication](https://bezkoder.com/angular-spring-boot-jwt-auth/)
-
 > [Spring Boot + Angular 10 JWT Authentication](https://bezkoder.com/angular-10-spring-boot-jwt-auth/)
-
 > [Spring Boot + Angular 11 JWT Authentication](https://bezkoder.com/angular-11-spring-boot-jwt-auth/)
-
 > [Spring Boot + React JWT Authentication](https://bezkoder.com/spring-boot-react-jwt-auth/)
-
 ## Fullstack CRUD App
 
 > [Vue.js + Spring Boot + MySQL/PostgreSQL example](https://bezkoder.com/spring-boot-vue-js-crud-example/)
-
 > [Angular 8 + Spring Boot + MySQL example](https://bezkoder.com/angular-spring-boot-crud/)
-
 > [Angular 8 + Spring Boot + PostgreSQL example](https://bezkoder.com/angular-spring-boot-postgresql/)
-
 > [Angular 10 + Spring Boot + MySQL example](https://bezkoder.com/angular-10-spring-boot-crud/)
-
 > [Angular 10 + Spring Boot + PostgreSQL example](https://bezkoder.com/angular-10-spring-boot-postgresql/)
-
 > [Angular 11 + Spring Boot + MySQL example](https://bezkoder.com/angular-11-spring-boot-crud/)
-
 > [Angular 11 + Spring Boot + PostgreSQL example](https://bezkoder.com/angular-11-spring-boot-postgresql/)
-
 > [React + Spring Boot + MySQL example](https://bezkoder.com/react-spring-boot-crud/)
-
 > [React + Spring Boot + PostgreSQL example](https://bezkoder.com/spring-boot-react-postgresql/)
-
 > [React + Spring Boot + MongoDB example](https://bezkoder.com/react-spring-boot-mongodb/)
-
 Run both Back-end & Front-end in one place:
 > [Integrate Angular with Spring Boot Rest API](https://bezkoder.com/integrate-angular-spring-boot/)
-
 > [Integrate React.js with Spring Boot Rest API](https://bezkoder.com/integrate-reactjs-spring-boot/)
-
 > [Integrate Vue.js with Spring Boot Rest API](https://bezkoder.com/integrate-vue-spring-boot/)
-
 More Practice:
 > [Spring Boot File upload example with Multipart File](https://bezkoder.com/spring-boot-file-upload/)
-
 > [Exception handling: @RestControllerAdvice example in Spring Boot](https://bezkoder.com/spring-boot-restcontrolleradvice/)
-
 > [Spring Boot Repository Unit Test with @DataJpaTest](https://bezkoder.com/spring-boot-unit-test-jpa-repo-datajpatest/)
-
 > [Deploy Spring Boot App on AWS – Elastic Beanstalk](https://bezkoder.com/deploy-spring-boot-aws-eb/)
-
 > [Secure Spring Boot App with Spring Security & JWT Authentication](https://bezkoder.com/spring-boot-jwt-authentication/)
-
 ## Dependency
 – If you want to use PostgreSQL:
 ```xml
@@ -97,13 +72,10 @@ Open `src/main/resources/application.properties`
 spring.datasource.url= jdbc:postgresql://localhost:5432/testdb
 spring.datasource.username= postgres
 spring.datasource.password= 123
-
 spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation= true
 spring.jpa.properties.hibernate.dialect= org.hibernate.dialect.PostgreSQLDialect
-
 # Hibernate ddl auto (create, create-drop, validate, update)
 spring.jpa.hibernate.ddl-auto= update
-
 # App Properties
 bezkoder.app.jwtSecret= bezKoderSecretKey
 bezkoder.app.jwtExpirationMs= 86400000
@@ -113,10 +85,8 @@ bezkoder.app.jwtExpirationMs= 86400000
 spring.datasource.url= jdbc:mysql://localhost:3306/testdb?useSSL=false
 spring.datasource.username= root
 spring.datasource.password= 123456
-
 spring.jpa.properties.hibernate.dialect= org.hibernate.dialect.MySQL5InnoDBDialect
 spring.jpa.hibernate.ddl-auto= update
-
 # App Properties
 bezkoder.app.jwtSecret= bezKoderSecretKey
 bezkoder.app.jwtExpirationMs= 86400000
@@ -132,3 +102,4 @@ INSERT INTO roles(name) VALUES('ROLE_USER');
 INSERT INTO roles(name) VALUES('ROLE_MODERATOR');
 INSERT INTO roles(name) VALUES('ROLE_ADMIN');
 ```
+# backend-matcher
diff --git a/pom.xml b/pom.xml
index 907ac6a..ca35be3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,40 +24,80 @@
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter-data-jpa</artifactId>
 		</dependency>
-
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-web</artifactId>
+		 </dependency>
+		 <dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-websocket</artifactId>
+		 </dependency>
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter-security</artifactId>
 		</dependency>
-
+		<dependency>
+			<groupId>org.projectlombok</groupId>
+			<artifactId>lombok</artifactId>
+			<optional>true</optional>
+		</dependency>
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter-web</artifactId>
 		</dependency>
-
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-websocket</artifactId>
+		</dependency>
 		<dependency>
 			<groupId>mysql</groupId>
 			<artifactId>mysql-connector-java</artifactId>
 			<scope>runtime</scope>
 		</dependency>
-
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-jetty</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-websocket</artifactId>
+			<exclusions>
+				<exclusion>
+					<groupId>org.springframework.boot</groupId>
+					<artifactId>spring-boot-starter-tomcat</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
 		<dependency>
 			<groupId>io.jsonwebtoken</groupId>
 			<artifactId>jjwt</artifactId>
 			<version>0.9.1</version>
 		</dependency>
-
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-websocket</artifactId>
+		</dependency>
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter-test</artifactId>
 			<scope>test</scope>
 		</dependency>
-
 		<dependency>
 			<groupId>org.springframework.security</groupId>
 			<artifactId>spring-security-test</artifactId>
 			<scope>test</scope>
 		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-test</artifactId>
+			<scope>test</scope>
+			<exclusions>
+				<exclusion>
+					<groupId>org.junit.vintage</groupId>
+					<artifactId>junit-vintage-engine</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
 	</dependencies>
 
 	<build>
diff --git a/src/.DS_Store b/src/.DS_Store
new file mode 100644
index 0000000..34c2b1a
Binary files /dev/null and b/src/.DS_Store differ
diff --git a/src/main/.DS_Store b/src/main/.DS_Store
new file mode 100644
index 0000000..8ea1cf3
Binary files /dev/null and b/src/main/.DS_Store differ
diff --git a/src/main/java/.DS_Store b/src/main/java/.DS_Store
new file mode 100644
index 0000000..10c64d9
Binary files /dev/null and b/src/main/java/.DS_Store differ
diff --git a/src/main/java/com/.DS_Store b/src/main/java/com/.DS_Store
new file mode 100644
index 0000000..20071a0
Binary files /dev/null and b/src/main/java/com/.DS_Store differ
diff --git a/src/main/java/com/bezkoder/springjwt/models/User.java b/src/main/java/com/bezkoder/springjwt/models/User.java
deleted file mode 100644
index 6e3eaa2..0000000
--- a/src/main/java/com/bezkoder/springjwt/models/User.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package com.bezkoder.springjwt.models;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import javax.persistence.*;
-import javax.validation.constraints.Email;
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.Size;
-
-@Entity
-@Table(	name = "users", 
-		uniqueConstraints = { 
-			@UniqueConstraint(columnNames = "username"),
-			@UniqueConstraint(columnNames = "email") 
-		})
-public class User {
-	@Id
-	@GeneratedValue(strategy = GenerationType.IDENTITY)
-	private Long id;
-
-	@NotBlank
-	@Size(max = 20)
-	private String username;
-
-	@NotBlank
-	@Size(max = 50)
-	@Email
-	private String email;
-
-	@NotBlank
-	@Size(max = 120)
-	private String password;
-
-	@ManyToMany(fetch = FetchType.LAZY)
-	@JoinTable(	name = "user_roles", 
-				joinColumns = @JoinColumn(name = "user_id"), 
-				inverseJoinColumns = @JoinColumn(name = "role_id"))
-	private Set<Role> roles = new HashSet<>();
-
-	public User() {
-	}
-
-	public User(String username, String email, String password) {
-		this.username = username;
-		this.email = email;
-		this.password = password;
-	}
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public String getUsername() {
-		return username;
-	}
-
-	public void setUsername(String username) {
-		this.username = username;
-	}
-
-	public String getEmail() {
-		return email;
-	}
-
-	public void setEmail(String email) {
-		this.email = email;
-	}
-
-	public String getPassword() {
-		return password;
-	}
-
-	public void setPassword(String password) {
-		this.password = password;
-	}
-
-	public Set<Role> getRoles() {
-		return roles;
-	}
-
-	public void setRoles(Set<Role> roles) {
-		this.roles = roles;
-	}
-}
diff --git a/src/main/java/com/spring/.DS_Store b/src/main/java/com/spring/.DS_Store
new file mode 100644
index 0000000..084ac8e
Binary files /dev/null and b/src/main/java/com/spring/.DS_Store differ
diff --git a/src/main/java/com/spring/data/.DS_Store b/src/main/java/com/spring/data/.DS_Store
new file mode 100644
index 0000000..fd1b151
Binary files /dev/null and b/src/main/java/com/spring/data/.DS_Store differ
diff --git a/src/main/java/com/bezkoder/springjwt/SpringBootSecurityJwtApplication.java b/src/main/java/com/spring/data/SpringBootSecurityJwtApplication.java
similarity index 90%
rename from src/main/java/com/bezkoder/springjwt/SpringBootSecurityJwtApplication.java
rename to src/main/java/com/spring/data/SpringBootSecurityJwtApplication.java
index d13abd7..0635aa4 100644
--- a/src/main/java/com/bezkoder/springjwt/SpringBootSecurityJwtApplication.java
+++ b/src/main/java/com/spring/data/SpringBootSecurityJwtApplication.java
@@ -1,4 +1,4 @@
-package com.bezkoder.springjwt;
+package com.spring.data;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/src/main/java/com/bezkoder/springjwt/controllers/AuthController.java b/src/main/java/com/spring/data/controllers/AuthController.java
similarity index 81%
rename from src/main/java/com/bezkoder/springjwt/controllers/AuthController.java
rename to src/main/java/com/spring/data/controllers/AuthController.java
index e598702..07dd640 100644
--- a/src/main/java/com/bezkoder/springjwt/controllers/AuthController.java
+++ b/src/main/java/com/spring/data/controllers/AuthController.java
@@ -1,4 +1,4 @@
-package com.bezkoder.springjwt.controllers;
+package com.spring.data.controllers;
 
 import java.util.HashSet;
 import java.util.List;
@@ -7,6 +7,18 @@
 
 import javax.validation.Valid;
 
+import com.spring.data.models.ERole;
+import com.spring.data.models.Role;
+import com.spring.data.models.User;
+import com.spring.data.payload.request.LoginRequest;
+import com.spring.data.payload.request.SignupRequest;
+import com.spring.data.payload.response.JwtResponse;
+import com.spring.data.payload.response.MessageResponse;
+import com.spring.data.repository.RoleRepository;
+import com.spring.data.repository.UserRepository;
+import com.spring.data.security.jwt.JwtUtils;
+import com.spring.data.security.services.UserDetailsImpl;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.security.authentication.AuthenticationManager;
@@ -20,19 +32,7 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import com.bezkoder.springjwt.models.ERole;
-import com.bezkoder.springjwt.models.Role;
-import com.bezkoder.springjwt.models.User;
-import com.bezkoder.springjwt.payload.request.LoginRequest;
-import com.bezkoder.springjwt.payload.request.SignupRequest;
-import com.bezkoder.springjwt.payload.response.JwtResponse;
-import com.bezkoder.springjwt.payload.response.MessageResponse;
-import com.bezkoder.springjwt.repository.RoleRepository;
-import com.bezkoder.springjwt.repository.UserRepository;
-import com.bezkoder.springjwt.security.jwt.JwtUtils;
-import com.bezkoder.springjwt.security.services.UserDetailsImpl;
-
-@CrossOrigin(origins = "*", maxAge = 3600)
+@CrossOrigin(origins = "*")
 @RestController
 @RequestMapping("/api/auth")
 public class AuthController {
@@ -74,21 +74,21 @@ public ResponseEntity<?> authenticateUser(@Valid @RequestBody LoginRequest login
 
 	@PostMapping("/signup")
 	public ResponseEntity<?> registerUser(@Valid @RequestBody SignupRequest signUpRequest) {
-		if (userRepository.existsByUsername(signUpRequest.getUsername())) {
+		if (userRepository.existsByNom(signUpRequest.getNom())) {
 			return ResponseEntity
 					.badRequest()
 					.body(new MessageResponse("Error: Username is already taken!"));
 		}
 
-		if (userRepository.existsByEmail(signUpRequest.getEmail())) {
+		if (userRepository.existsByUsername(signUpRequest.getUsername())) {
 			return ResponseEntity
 					.badRequest()
 					.body(new MessageResponse("Error: Email is already in use!"));
 		}
 
 		// Create new user's account
-		User user = new User(signUpRequest.getUsername(), 
-							 signUpRequest.getEmail(),
+		User user = new User(signUpRequest.getNom(), 
+							 signUpRequest.getUsername(),
 							 encoder.encode(signUpRequest.getPassword()));
 
 		Set<String> strRoles = signUpRequest.getRole();
diff --git a/src/main/java/com/spring/data/controllers/ChatController.java b/src/main/java/com/spring/data/controllers/ChatController.java
new file mode 100644
index 0000000..a3c8e10
--- /dev/null
+++ b/src/main/java/com/spring/data/controllers/ChatController.java
@@ -0,0 +1,31 @@
+package com.spring.data.controllers;
+
+import com.spring.data.models.ChatMessage;
+
+import org.springframework.messaging.handler.annotation.MessageMapping;
+import org.springframework.messaging.handler.annotation.Payload;
+import org.springframework.messaging.handler.annotation.SendTo;
+import org.springframework.messaging.simp.SimpMessageHeaderAccessor;
+import org.springframework.stereotype.Controller;
+
+@Controller
+public class ChatController {
+    
+    @MessageMapping("/chat.send")
+    @SendTo("/topic/public")
+    public ChatMessage sendMessage(@Payload final ChatMessage chatMessage) {
+        return chatMessage;
+    }
+
+    @MessageMapping("/chat.newUser")
+    @SendTo("/topic/public")
+    public ChatMessage newUser(@Payload final ChatMessage chatMessage, SimpMessageHeaderAccessor headerAccessor) {
+        headerAccessor.getSessionAttributes().put("username", chatMessage.getSender());
+        return chatMessage;
+    }
+
+
+
+
+
+}
diff --git a/src/main/java/com/spring/data/controllers/ConversaController.java b/src/main/java/com/spring/data/controllers/ConversaController.java
new file mode 100644
index 0000000..b32257e
--- /dev/null
+++ b/src/main/java/com/spring/data/controllers/ConversaController.java
@@ -0,0 +1,91 @@
+package com.spring.data.controllers;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+import com.spring.data.models.Conversa;
+import com.spring.data.repository.ConversaRepository;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@CrossOrigin(origins = "*")
+@RestController
+@RequestMapping("/conversa")
+public class ConversaController {
+    @Autowired
+	ConversaRepository conversaRepository;
+
+    @GetMapping("/all/{id}")
+	public ResponseEntity<List<Conversa>> getAllUsers(@PathVariable("id") long id/*@RequestParam(required = false) String username*/) {
+		try {
+			List<Conversa> reportes = new ArrayList<Conversa>();
+
+			//if (username == null)
+				conversaRepository.findUserConverses(id).forEach(reportes::add);
+			//else
+			//	userRepository.findByStringContaining(username).forEach(users::add);
+
+			if (reportes.isEmpty()) {
+				return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+			}
+
+			return new ResponseEntity<>(reportes, HttpStatus.OK);
+		} catch (Exception e) {
+			return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+    @GetMapping("/{id}")
+	public ResponseEntity<Conversa> getUserById(@PathVariable("id") long id) {
+		Optional<Conversa> userData = conversaRepository.findById(id);
+
+		if (userData.isPresent()) {
+			return new ResponseEntity<>(userData.get(), HttpStatus.OK);
+		} else {
+			return new ResponseEntity<>(HttpStatus.NOT_FOUND);
+		}
+	}
+
+    /*@PostMapping("/newconversa/{user_id_1}/{user_id_2}")
+    public ResponseEntity<Conversa> novaConversa(@PathVariable("user_id_1") long user_id_1, @PathVariable("user_id_2") long user_id_2, @PathVariable("time_started") String time_started@RequestBody Conversa conversa) { 
+	try {
+		Conversa _conversa = conversaRepository.save(new Conversa(conversa.getUser_Id_creador(), conversa.getUser_Id_segon(), conversa.getTimeStarted()));
+		return new ResponseEntity<>(_conversa, HttpStatus.CREATED);
+	} catch (Exception e) {
+		return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
+	}
+}*/
+
+@PostMapping("/newconversa/{user_id_1}/{user_id_2}")
+public ResponseEntity<Conversa> novaConversa(@PathVariable("user_id_1") long user_id_1, @PathVariable("user_id_2") long user_id_2 /* @PathVariable("time_started") String time_started@RequestBody Conversa conversa*/) { 
+try {
+	Conversa _conversa = conversaRepository.save(new Conversa(user_id_1, user_id_2/*, conversa.getTimeStarted())*/));
+	return new ResponseEntity<>(_conversa, HttpStatus.CREATED);
+} catch (Exception e) {
+	return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
+}
+}
+
+@DeleteMapping("/delete/{id}/{id2}")
+	public ResponseEntity<HttpStatus> delete(@PathVariable("id") long id, @PathVariable("id2") long id2) {
+		try {
+			conversaRepository.deleteById(id);
+			return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+		} catch (Exception e) {
+			return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+
+}
diff --git a/src/main/java/com/spring/data/controllers/MatchesController.java b/src/main/java/com/spring/data/controllers/MatchesController.java
new file mode 100644
index 0000000..b15c3d2
--- /dev/null
+++ b/src/main/java/com/spring/data/controllers/MatchesController.java
@@ -0,0 +1,359 @@
+package com.spring.data.controllers;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+import com.fasterxml.jackson.databind.deser.DataFormatReaders.Match;
+import com.spring.data.models.Matches;
+import com.spring.data.models.Message;
+import com.spring.data.repository.*;
+import com.spring.data.controllers.ConversaController;
+
+import com.spring.data.models.Conversa;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+//import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+@CrossOrigin(origins = "*")
+@RestController
+@RequestMapping("/matches")
+public class MatchesController {
+
+    @Autowired
+	MatchesRepository matchesRepository;
+
+	@Autowired
+	ConversaRepository conversaRepository;
+
+	@Autowired
+	MessageRepository messageRepository;
+
+
+			
+	@GetMapping("/all")
+	public ResponseEntity<List<Matches>> getAllUsers() {
+		try {
+			List<Matches> matches = new ArrayList<Matches>();
+
+			matchesRepository.findAllMatches().forEach(matches::add);
+
+			if (matches.isEmpty()) {
+				return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+			}
+			return new ResponseEntity<>(matches, HttpStatus.OK);
+		} catch (Exception e) {
+			return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
+		}
+	}
+		
+	
+			/*else
+				matchesRepository.findByStringContaining(nom).forEach(users::add);
+
+			if (matches.isEmpty()) {
+				return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+			}
+
+			return new ResponseEntity<>(matches, HttpStatus.OK);
+		} catch (Exception e) {
+			return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
+		}
+	}*/
+
+
+	//Falta fer una query per crear una nova entrada a la taula amb el like
+	
+	//Mirar si fa match ---> Implementat de moment amb un request body // Error: No converter found capable of converting from type [java.lang.Integer] to type [java.lang.Boolean]
+	
+
+
+	//@PutMapping("/{user_id_1}/{user_id_2}/{liked_2}")
+    public Boolean isMatch(@PathVariable("user_id_1") long user_id_1, @PathVariable("user_id_2") long user_id_2, @PathVariable("liked_2") boolean liked_2) {
+        Optional<Matches> matchData = matchesRepository.findTableByUsers(user_id_1, user_id_2);
+        if (matchData.isPresent()) {
+            Matches _matches = matchData.get();
+			boolean isliked = matchesRepository.alreadyLiked(user_id_1, user_id_2) > 0;
+            if (isliked && liked_2 == true) {
+                //Matches _matches = matchData.get();
+                _matches.setLiked_2(liked_2);
+                _matches.setIs_Match(true);
+               // matchesRepository.save(matchData);
+                return true;
+            }
+            else {
+                //_matches.setLiked_2(false);
+                return false;
+        }
+        
+    }
+    else return false; 
+}
+
+
+
+
+
+/*
+@PutMapping("/{user_id_1}/{user_id_2}/{liked_2}")
+	public ResponseEntity<Matches> isMatch2(@PathVariable("user_id_1") long user_id_1, @PathVariable("user_id_2") long user_id_2, @PathVariable("liked_2") boolean liked_2) {
+		Optional<Matches> matchData = matchesRepository.findTableByUsers(user_id_1, user_id_2);
+		if (matchData.isPresent()) {
+			Matches _matches = matchData.get();
+			boolean isliked = matchesRepository.alreadyLiked(user_id_1, user_id_2) > 0;
+			if (isliked && liked_2 == true) {
+
+				//Matches _matches = matchData.get();
+				_matches.setLiked_2(liked_2);
+				_matches.setIs_Match(true);
+				//matchesRepository.save(matchData);
+				return new ResponseEntity<>(matchesRepository.save(_matches), HttpStatus.OK);
+			}
+			else if (liked_2 == true) {
+				@PostMapping("/addShoe")
+				public Shoe addShoe(@RequestBody Shoe shoe) {
+					return shoeRepository.save(shoe);
+				}
+			}
+			else {
+
+				//_matches.setLiked_2(false);
+				return new ResponseEntity<>(HttpStatus.NOT_FOUND);
+		}
+		
+	}
+	return new ResponseEntity<>(HttpStatus.NOT_FOUND);
+}*/
+
+/*@PostMapping("/newlike/{user_id_1}/{user_id_2}")
+public ResponseEntity<Matches> liked(@PathVariable("user_id_1") Long user_id_1, @PathVariable("user_id_2") Long user_id_2) { 
+	try {
+		Matches _matches = matchesRepository.save(new Matches((long)1, (long)5, true, false, false));
+		return new ResponseEntity<>(_matches, HttpStatus.CREATED);
+	} catch (Exception e) {
+		return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
+	}
+}*/
+
+@PostMapping("/newlike")
+public ResponseEntity<Matches> liked(@RequestBody Matches matches) { 
+	try {
+		Matches _matches = matchesRepository.save(new Matches(matches.getUser_Id_1(), matches.getUser_Id_2(), true, false, false));
+		return new ResponseEntity<>(_matches, HttpStatus.CREATED);
+	} catch (Exception e) {
+		return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
+	}
+}
+
+@PostMapping("/newconversa/{user_id_1}/{user_id_2}")
+public ResponseEntity<Conversa> novaConversa(@PathVariable("user_id_1") long user_id_1, @PathVariable("user_id_2") long user_id_2 /* @PathVariable("time_started") String time_started@RequestBody Conversa conversa*/) { 
+try {
+	Conversa _conversa = conversaRepository.save(new Conversa(user_id_1, user_id_2));/*, conversa.getTimeStarted())*/
+	return new ResponseEntity<>(_conversa, HttpStatus.CREATED);
+} catch (Exception e) {
+	return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
+}
+}
+
+@PostMapping("/{user_id_1}/{user_id_2}/{user_liked}")
+	public ResponseEntity<Matches> isMatch2(@PathVariable("user_id_1") long user_id_1, @PathVariable("user_id_2") long user_id_2, @PathVariable("user_liked") Boolean user_liked, @RequestBody (required=false) Matches matches /*@RequestBody (required=false) Conversa conversa*/) {
+		Optional<Matches> matchData = matchesRepository.findTableByUsers(user_id_1, user_id_2);
+		if (matchData.isPresent()) {
+			Matches _matches = matchData.get();
+			boolean isliked = matchesRepository.alreadyLiked(user_id_1, user_id_2) > 0;
+			if (isliked && user_liked == true) {
+
+				//Matches _matches = matchData.get();
+				_matches.setLiked_2(user_liked);
+				_matches.setIs_Match(true);
+				//matchesRepository.save(matchData);
+				novaConversa(user_id_1, user_id_2);
+				return new ResponseEntity<>(matchesRepository.save(_matches), HttpStatus.OK);
+			}
+		}
+		else if (user_liked == true) {
+			liked(matches);
+		}
+		return new ResponseEntity<>(HttpStatus.NOT_FOUND);
+	}
+
+/*7@PostMapping("/{user_id_1}/{user_id_2}/{user_liked}")
+	public ResponseEntity<Matches> isMatch2(@PathVariable("user_id_1") long user_id_1, @PathVariable("user_id_2") long user_id_2, @PathVariable("user_liked") Boolean user_liked, @RequestBody (required=false) Matches matches) {
+		Optional<Matches> matchData = matchesRepository.findTableByUsers(user_id_1, user_id_2);
+		if (matchData.isPresent()) {
+			Matches _matches = matchData.get();
+			boolean isliked = matchesRepository.alreadyLiked(user_id_1, user_id_2) > 0;
+			if (isliked && user_liked == true) {
+
+				//Matches _matches = matchData.get();
+				_matches.setLiked_2(user_liked);
+				_matches.setIs_Match(true);
+				//matchesRepository.save(matchData);
+				return new ResponseEntity<>(matchesRepository.save(_matches), HttpStatus.OK);
+			}
+		}
+		else if (user_liked == true) {
+			Matches _matches = matchesRepository.save(new Matches(matches.getUser_Id_1(), matches.getUser_Id_2(), matches.getLiked_1(), false, false));
+			return new ResponseEntity<>(_matches, HttpStatus.CREATED);
+		}
+		return new ResponseEntity<>(HttpStatus.NOT_FOUND);
+	}*/
+			
+		
+
+/*
+
+@PutMapping("/update/preferences/{id}")
+	public ResponseEntity<User> updateModo(@PathVariable("id") long id, @RequestBody User user) {
+		Optional<User> userData = userRepository.findById(id);
+
+		if (userData.isPresent()) {
+			User _user = userData.get();
+			_user.setFlex(user.getFlex());
+			_user.setDuo(user.getDuo());
+			_user.setClash(user.getClash());
+			_user.setOtro(user.getOtro());
+			_user.setforfun(user.getForFun());
+			_user.setChamps(user.getChamps());
+			_user.setOtps(user.getOtps());
+			_user.setTryHard(user.getTryHard());
+			_user.setBot(user.getBot());
+			_user.setFill(user.getFill());
+			_user.setJungle(user.getJungle());
+			_user.setMid(user.getMid());
+			_user.setSupp(user.getSupp());
+			_user.setTop(user.getTop());
+			return new ResponseEntity<>(userRepository.save(_user), HttpStatus.OK);
+		} else {
+			return new ResponseEntity<>(HttpStatus.NOT_FOUND);
+		}
+	}
+*/
+	
+		
+	//Retorna Id de la taula (en teoria no s'ha d'utilitzar)
+	@GetMapping("/getTableId/{user_id_1}/{user_id_2}")
+	public Long getTableId(@PathVariable("user_id_1") long user_id_1, @PathVariable("user_id_2") long user_id_2) {
+		return matchesRepository.findIdByUsers(user_id_1, user_id_2);
+	}
+
+	@GetMapping("/getTable/{user_id_1}/{user_id_2}") //Funcio auxiliar per fer proves amb postman 
+	public ResponseEntity<Matches> getTable(@PathVariable("user_id_1") long user_id_1, @PathVariable("user_id_2") long user_id_2) {
+		Optional<Matches> matchData = matchesRepository.findTableByUsers(user_id_1, user_id_2);
+		if (matchData.isPresent()) {
+			Matches _matches = matchData.get();
+			return new ResponseEntity<>(matchesRepository.save(_matches), HttpStatus.OK);
+		} else {
+			return new ResponseEntity<>(HttpStatus.NOT_FOUND);
+		}
+	}	
+	
+
+	//Retorna taula matches del user id_1, id_2 --> No cal utilitzar-la 
+	//@GetMapping("/getTable/{user_id_1}/{user_id_2}")
+	public ResponseEntity<Matches> getMatch(@PathVariable("user_id_1") long user_id_1, @PathVariable("user_id_2") long user_id_2) {
+		Optional<Matches> matchData = matchesRepository.findByMatches(user_id_1, user_id_2);
+
+		if (matchData.isPresent()) {
+			Matches _matches = matchData.get();
+			return new ResponseEntity<>(matchesRepository.save(_matches), HttpStatus.OK);
+		} else {
+			return new ResponseEntity<>(HttpStatus.NOT_FOUND);
+		}
+	}	
+
+	@PutMapping("/like/{user_id_1}/{user_id_}")
+	public ResponseEntity<Matches> updateMatch(@PathVariable("user_id_1") long user_id_1, @PathVariable("user_id_1") long user_id_2, @RequestBody Matches matches) {
+		Optional<Matches> matchData = matchesRepository.findByMatches(user_id_1, user_id_2);
+
+		if (matchData.isPresent()) {
+			Matches _matches = matchData.get();
+			_matches.setLiked_2(matches.getLiked_2());
+			return new ResponseEntity<>(matchesRepository.save(_matches), HttpStatus.OK);
+		} else {
+			return new ResponseEntity<>(HttpStatus.NOT_FOUND);
+		}
+	}
+	
+
+
+    @GetMapping("/{id}")
+	public ResponseEntity<Matches> getMatchById(@PathVariable("id") long id) {
+		Optional<Matches> matchData = matchesRepository.findById(id);
+
+		if (matchData.isPresent()) {
+			return new ResponseEntity<>(matchData.get(), HttpStatus.OK);
+		} else {
+			return new ResponseEntity<>(HttpStatus.NOT_FOUND);
+		}
+	}
+
+	//No cal utilitzar-la
+    @GetMapping("/{user_id_1}/{user_id_2}")
+	public Boolean isMatch(@PathVariable("user_id_1") long user_id_1, @PathVariable("user_id_2") Long user_id_2) {
+		return matchesRepository.findIsMatch(user_id_1, user_id_2);
+	}
+
+	//Matches del usuari user_id_1
+    @GetMapping("/user/{user_id_1}")
+	public List<Matches> getUserMatches(@PathVariable("user_id_1") long user_id_1) {
+		
+		return matchesRepository.findUserMatches(user_id_1);
+	}
+
+
+	//S'esborren els missatges amb conversa_id id 
+	@DeleteMapping("/delete/{id}")
+	public ResponseEntity<HttpStatus> deleteAllMessages(@PathVariable("id") long id) {
+		try {
+				List<Message> messages = messageRepository.findMessages(id);
+				messageRepository.deleteAll(messages);
+				return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+			} catch (Exception e) {
+				return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+			}
+		}
+
+
+		
+	//@DeleteMapping("/delete/{id}/{id2}")
+	//S'esborra la conversa dels usuaris id i id2
+	public ResponseEntity<HttpStatus> deleteConversa(@PathVariable("id") long id, @PathVariable("id2") long id2) {
+	try {
+			long idtaula = conversaRepository.findId(id, id2);
+			deleteAllMessages(idtaula);
+			conversaRepository.deleteById(idtaula);
+			return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+		} catch (Exception e) {
+			return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+	//S'esborra el match, la conversa i els missatges de la conversa
+	@DeleteMapping("/delete/{id}/{id2}")
+	public ResponseEntity<HttpStatus> deleteMatch(@PathVariable("id") long id, @PathVariable("id2") long id2) {
+		try {
+			long idtaula = matchesRepository.findId(id, id2);
+			matchesRepository.deleteById(idtaula);
+			deleteConversa(id, id2);
+			return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+		} catch (Exception e) {
+			return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+
+    
+}
+
diff --git a/src/main/java/com/spring/data/controllers/MessageController.java b/src/main/java/com/spring/data/controllers/MessageController.java
new file mode 100644
index 0000000..c5af46f
--- /dev/null
+++ b/src/main/java/com/spring/data/controllers/MessageController.java
@@ -0,0 +1,57 @@
+package com.spring.data.controllers;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.spring.data.repository.MessageRepository;
+
+import com.spring.data.models.Message;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+@CrossOrigin(origins = "*")
+@RestController
+@RequestMapping("/message")
+public class MessageController {
+
+    @Autowired
+	MessageRepository messageRepository;
+
+
+    @GetMapping("/all/{id}")
+	public ResponseEntity<List<Message>> getAllUsers(@PathVariable("id") long id) {
+		try {
+			List<Message> matches = new ArrayList<Message>();
+
+			messageRepository.findMessages(id).forEach(matches::add);
+
+			if (matches.isEmpty()) {
+				return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+			}
+			return new ResponseEntity<>(matches, HttpStatus.OK);
+		} catch (Exception e) {
+			return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+    @PostMapping("/create")
+    public ResponseEntity<Message> createReport(@RequestBody Message message) { 
+        try {
+            Message _message = messageRepository.save(new Message(message.getconversaId(), message.getUseridemisor(), message.getUseridreceptor(), message.getmessage(), message.getTimestamp()));
+            return new ResponseEntity<>(_message, HttpStatus.CREATED);
+        } catch (Exception e) {
+            return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+    
+}
diff --git a/src/main/java/com/spring/data/controllers/NotificationDispatcher.java b/src/main/java/com/spring/data/controllers/NotificationDispatcher.java
new file mode 100644
index 0000000..a91c38a
--- /dev/null
+++ b/src/main/java/com/spring/data/controllers/NotificationDispatcher.java
@@ -0,0 +1,63 @@
+package com.spring.data.controllers;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.event.EventListener;
+import org.springframework.messaging.simp.SimpMessageHeaderAccessor;
+import org.springframework.messaging.simp.SimpMessageType;
+import org.springframework.messaging.simp.SimpMessagingTemplate;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+import org.springframework.web.socket.messaging.SessionDisconnectEvent;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import com.spring.data.models.Notification;
+
+@Service
+public class NotificationDispatcher {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(NotificationDispatcher.class);
+
+    private final SimpMessagingTemplate template;
+
+    private Set<String> listeners = new HashSet<>();
+
+    public NotificationDispatcher(SimpMessagingTemplate template) {
+        this.template = template;
+    }
+
+    public void add(String sessionId) {
+        listeners.add(sessionId);
+    }
+
+    public void remove(String sessionId) {
+        listeners.remove(sessionId);
+    }
+
+    @Scheduled(fixedDelay = 2000)
+    public void dispatch() {
+        for (String listener : listeners) {
+            LOGGER.info("Sending notification to " + listener);
+
+            SimpMessageHeaderAccessor headerAccessor = SimpMessageHeaderAccessor.create(SimpMessageType.MESSAGE);
+            headerAccessor.setSessionId(listener);
+            headerAccessor.setLeaveMutable(true);
+
+            int value = (int) Math.round(Math.random() * 100d);
+            template.convertAndSendToUser(
+                    listener,
+                    "/notification/item",
+                    new Notification(Integer.toString(value)),
+                    headerAccessor.getMessageHeaders());
+        }
+    }
+
+    @EventListener
+    public void sessionDisconnectionHandler(SessionDisconnectEvent event) {
+        String sessionId = event.getSessionId();
+        LOGGER.info("Disconnecting " + sessionId + "!");
+        remove(sessionId);
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/spring/data/controllers/NotificationsController.java b/src/main/java/com/spring/data/controllers/NotificationsController.java
new file mode 100644
index 0000000..fca3072
--- /dev/null
+++ b/src/main/java/com/spring/data/controllers/NotificationsController.java
@@ -0,0 +1,23 @@
+package com.spring.data.controllers;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.messaging.handler.annotation.MessageMapping;
+import org.springframework.messaging.simp.stomp.StompHeaderAccessor;
+import org.springframework.stereotype.Controller;
+
+@Controller
+public class NotificationsController {
+    private final NotificationDispatcher dispatcher;
+    @Autowired
+    public NotificationsController(NotificationDispatcher dispatcher) {
+        this.dispatcher = dispatcher;
+    }
+    @MessageMapping("/start")
+    public void start(StompHeaderAccessor stompHeaderAccessor) {
+        dispatcher.add(stompHeaderAccessor.getSessionId());
+    }
+    @MessageMapping("/stop")
+    public void stop(StompHeaderAccessor stompHeaderAccessor) {
+        dispatcher.remove(stompHeaderAccessor.getSessionId());
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/spring/data/controllers/ReportesController.java b/src/main/java/com/spring/data/controllers/ReportesController.java
new file mode 100644
index 0000000..0bf680e
--- /dev/null
+++ b/src/main/java/com/spring/data/controllers/ReportesController.java
@@ -0,0 +1,88 @@
+package com.spring.data.controllers;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+import com.spring.data.models.Reportes;
+import com.spring.data.repository.ReportesRepository;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+
+
+@CrossOrigin(origins = "*")
+@RestController
+@RequestMapping("/reportes")
+public class ReportesController {
+    @Autowired
+	ReportesRepository reportesRepository;
+
+	@GetMapping("/all")
+	public ResponseEntity<List<Reportes>> getAllUsers(/*@RequestParam(required = false) String username*/) {
+		try {
+			List<Reportes> reportes = new ArrayList<Reportes>();
+
+			//if (username == null)
+				reportesRepository.findAll().forEach(reportes::add);
+			//else
+			//	userRepository.findByStringContaining(username).forEach(users::add);
+
+			if (reportes.isEmpty()) {
+				return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+			}
+
+			return new ResponseEntity<>(reportes, HttpStatus.OK);
+		} catch (Exception e) {
+			return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+	@GetMapping("/{id}")
+	public ResponseEntity<Reportes> getUserById(@PathVariable("id") long id) {
+		Optional<Reportes> reportesData = reportesRepository.findById(id);
+
+		if (reportesData.isPresent()) {
+			return new ResponseEntity<>(reportesData.get(), HttpStatus.OK);
+		} else {
+			return new ResponseEntity<>(HttpStatus.NOT_FOUND);
+		}
+	}
+
+    @PostMapping("/create/{user_id}/{user_id_reported}")
+    public ResponseEntity<Reportes> createReport(@RequestBody Reportes reportes) { 
+        try {
+            Reportes _reportes = reportesRepository.save(new Reportes(reportes.getUserId(), reportes.getUserId_reported(), reportes.getMotiu(), reportes.getComentari(), reportes.getProva(), reportes.getSolucionado()));
+            return new ResponseEntity<>(_reportes, HttpStatus.CREATED);
+        } catch (Exception e) {
+            return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    @PutMapping("/update/{id}")
+	public ResponseEntity<Reportes> updateModo(@PathVariable("id") long id, @RequestBody Reportes reportes) {
+		Optional<Reportes> reportesData = reportesRepository.findById(id);
+
+		if (reportesData.isPresent()) {
+			Reportes _reportes = reportesData.get();
+			_reportes.setSolucionado(reportes.getSolucionado());
+			return new ResponseEntity<>(reportesRepository.save(_reportes), HttpStatus.OK);
+		} else {
+			return new ResponseEntity<>(HttpStatus.NOT_FOUND);
+		}
+	}
+
+
+
+}
diff --git a/src/main/java/com/bezkoder/springjwt/controllers/TestController.java b/src/main/java/com/spring/data/controllers/TestController.java
similarity index 95%
rename from src/main/java/com/bezkoder/springjwt/controllers/TestController.java
rename to src/main/java/com/spring/data/controllers/TestController.java
index 298a7ea..014363e 100644
--- a/src/main/java/com/bezkoder/springjwt/controllers/TestController.java
+++ b/src/main/java/com/spring/data/controllers/TestController.java
@@ -1,4 +1,4 @@
-package com.bezkoder.springjwt.controllers;
+package com.spring.data.controllers;
 
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.CrossOrigin;
diff --git a/src/main/java/com/spring/data/controllers/UserController.java b/src/main/java/com/spring/data/controllers/UserController.java
new file mode 100644
index 0000000..db3c09e
--- /dev/null
+++ b/src/main/java/com/spring/data/controllers/UserController.java
@@ -0,0 +1,195 @@
+package com.spring.data.controllers;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+import com.spring.data.models.User;
+import com.spring.data.repository.UserRepository;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+//import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+
+@CrossOrigin(origins = "*")
+@RestController
+@RequestMapping("/user")
+public class UserController {
+
+	@Autowired
+	UserRepository userRepository;
+
+	@GetMapping("/all")
+	public ResponseEntity<List<User>> getAllUsers(@RequestParam(required = false) String username) {
+		try {
+			List<User> users = new ArrayList<User>();
+
+			//if (username == null)
+				userRepository.findAll().forEach(users::add);
+			//else
+			//	userRepository.findByStringContaining(username).forEach(users::add);
+
+			if (users.isEmpty()) {
+				return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+			}
+
+			return new ResponseEntity<>(users, HttpStatus.OK);
+		} catch (Exception e) {
+			return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+// Metode per filtrar usuaris + matches --> No acabat
+	/*
+@GetMapping("/all/{id}")
+	public ResponseEntity<List<User>> getAllUsers(@PathVariable("id") long id, @RequestParam(required = false) String username) {
+		try {
+			List<User> users = new ArrayList<User>();
+			userRepository.findAll().forEach(users::add);
+			int n = users.size();
+			for (long i = 1; i <= n; ++i) {
+				boolean isliked = matchesRepository.alreadyLiked(id, i) > 0;
+				if (isliked) {
+					users.remove(matchesRepository.)
+				}
+			}
+			
+			
+				
+			//else
+			//	userRepository.findByStringContaining(username).forEach(users::add);
+
+			if (users.isEmpty()) {
+				return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+			}
+
+			return new ResponseEntity<>(users, HttpStatus.OK);
+		} catch (Exception e) {
+			return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+*/
+
+
+	@GetMapping("/{id}")
+	public ResponseEntity<User> getUserById(@PathVariable("id") long id) {
+		Optional<User> userData = userRepository.findById(id);
+
+		if (userData.isPresent()) {
+			return new ResponseEntity<>(userData.get(), HttpStatus.OK);
+		} else {
+			return new ResponseEntity<>(HttpStatus.NOT_FOUND);
+		}
+	}
+
+	@GetMapping("/modo/{id}/{modo}") //Query noems feta ambb modo_duo
+	public User getUserByIdandModo(@PathVariable("id") long id, @PathVariable("modo") Boolean modo) {
+		return userRepository.findUserByIdAndModo(id, modo);
+	}
+
+	/*@PostMapping("/users")
+	public ResponseEntity<User> createUser(@RequestBody User user) {
+		try {
+			User _user = userRepository
+					.save(new User(user.getTitle(), user.getDescription(), false));
+			return new ResponseEntity<>(_user, HttpStatus.CREATED);
+		} catch (Exception e) {
+			return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
+		}
+	}*/
+
+	//Seria millor implementar un DTO
+	@PutMapping("/update/preferences/{id}")
+	public ResponseEntity<User> updateModo(@PathVariable("id") long id, @RequestBody User user) {
+		Optional<User> userData = userRepository.findById(id);
+
+		if (userData.isPresent()) {
+			User _user = userData.get();
+			_user.setFlex(user.getFlex());
+			_user.setDuo(user.getDuo());
+			_user.setClash(user.getClash());
+			_user.setOtro(user.getOtro());
+			_user.setforfun(user.getForFun());
+			_user.setChamps(user.getChamps());
+			_user.setOtps(user.getOtps());
+			_user.setTryHard(user.getTryHard());
+			_user.setBot(user.getBot());
+			_user.setFill(user.getFill());
+			_user.setJungle(user.getJungle());
+			_user.setMid(user.getMid());
+			_user.setSupp(user.getSupp());
+			_user.setTop(user.getTop());
+			return new ResponseEntity<>(userRepository.save(_user), HttpStatus.OK);
+		} else {
+			return new ResponseEntity<>(HttpStatus.NOT_FOUND);
+		}
+	}
+
+
+	@PutMapping("/update/{id}")
+	public ResponseEntity<User> updateUser(@PathVariable("id") long id, @RequestBody User user) {
+		Optional<User> userData = userRepository.findById(id);
+
+		if (userData.isPresent()) {
+			User _user = userData.get();
+			_user.setNom(user.getNom());
+			_user.setUsername(user.getUsername());
+			_user.setServer(user.getServer());
+			_user.setRolPred(user.getRolPred());
+			_user.setDetails(user.getDetails());
+			_user.setImg(user.getImg());
+			_user.setPassword(user.getPassword());
+			return new ResponseEntity<>(userRepository.save(_user), HttpStatus.OK);
+		} else {
+			return new ResponseEntity<>(HttpStatus.NOT_FOUND);
+		}
+	}
+
+	@DeleteMapping("/delete/{id}")
+	public ResponseEntity<HttpStatus> deleteUser(@PathVariable("id") long id) {
+		try {
+			userRepository.deleteById(id);
+			return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+		} catch (Exception e) {
+			return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+	@DeleteMapping("/deleteAll")
+	public ResponseEntity<HttpStatus> deleteAllUsers() {
+		try {
+			userRepository.deleteAll();
+			return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+		} catch (Exception e) {
+			return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+		}
+
+	}
+
+	/*@GetMapping("/tutorials/published")
+	public ResponseEntity<List<User>> findByPublished() {
+		try {
+			List<User> tutorials = userRepository.findByPublished(true);
+
+			if (tutorials.isEmpty()) {
+				return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+			}
+			return new ResponseEntity<>(tutorials, HttpStatus.OK);
+		} catch (Exception e) {
+			return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+		}
+	}*/
+
+}
diff --git a/src/main/java/com/spring/data/controllers/WebSocketConfig.java b/src/main/java/com/spring/data/controllers/WebSocketConfig.java
new file mode 100644
index 0000000..8a62ee6
--- /dev/null
+++ b/src/main/java/com/spring/data/controllers/WebSocketConfig.java
@@ -0,0 +1,30 @@
+package com.spring.data.controllers;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.messaging.simp.config.MessageBrokerRegistry;
+import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
+import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
+import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
+
+@Configuration
+@EnableWebSocketMessageBroker
+public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
+
+	@Override
+	public void configureMessageBroker(MessageBrokerRegistry config) {
+		config.enableSimpleBroker("/topic");
+		config.setApplicationDestinationPrefixes("/app");
+		config.enableSimpleBroker("/notification");
+        config.setApplicationDestinationPrefixes("/swns");
+	}
+
+	@Override
+	public void registerStompEndpoints(StompEndpointRegistry registry) {
+		// with sockjs
+		registry.addEndpoint("/ws-message").setAllowedOrigins("*").withSockJS();
+		registry.addEndpoint("/notifications").setAllowedOrigins("*").withSockJS();
+		// without sockjs
+		//registry.addEndpoint("/ws-message").setAllowedOriginPatterns("*");
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/spring/data/controllers/WebSocketEventListener.java b/src/main/java/com/spring/data/controllers/WebSocketEventListener.java
new file mode 100644
index 0000000..e67d2ea
--- /dev/null
+++ b/src/main/java/com/spring/data/controllers/WebSocketEventListener.java
@@ -0,0 +1,44 @@
+package com.spring.data.controllers;
+
+import org.slf4j.LoggerFactory;
+
+import com.spring.data.models.ChatMessage;
+import com.spring.data.models.MessageType;
+
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.event.EventListener;
+import org.springframework.messaging.simp.SimpMessageSendingOperations;
+import org.springframework.messaging.simp.stomp.StompHeaderAccessor;
+import org.springframework.stereotype.Component;
+import org.springframework.web.socket.messaging.SessionConnectedEvent;
+import org.springframework.web.socket.messaging.SessionDisconnectEvent;
+
+
+@Component
+public class WebSocketEventListener {
+    
+    private static final Logger LOGGER = LoggerFactory.getLogger(WebSocketEventListener.class);
+
+    @Autowired
+    private SimpMessageSendingOperations sendingOperations;
+
+    @EventListener
+    public void handleWebSocketConnectListener(final SessionConnectedEvent event) {
+        LOGGER.info("New connection bro!");
+    }
+
+    @EventListener
+    public void handleWebSocketDisconnectListener(final SessionDisconnectEvent event) {
+        
+        final StompHeaderAccessor headerAccessor = StompHeaderAccessor.wrap(event.getMessage());
+
+        final String username = (String) headerAccessor.getSessionAttributes().get("username");
+
+        final ChatMessage chatMessage = ChatMessage.builder().type(MessageType.DISCONNECTED).sender(username).build();
+
+        sendingOperations.convertAndSend("/topic/public", chatMessage);
+
+    }
+
+}
diff --git a/src/main/java/com/spring/data/controllers/WebSocketTextController.java b/src/main/java/com/spring/data/controllers/WebSocketTextController.java
new file mode 100644
index 0000000..775d72f
--- /dev/null
+++ b/src/main/java/com/spring/data/controllers/WebSocketTextController.java
@@ -0,0 +1,38 @@
+package com.spring.data.controllers;
+
+import com.spring.data.models.TextMessageDTO;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.messaging.handler.annotation.MessageMapping;
+import org.springframework.messaging.handler.annotation.Payload;
+import org.springframework.messaging.handler.annotation.SendTo;
+import org.springframework.messaging.simp.SimpMessagingTemplate;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class WebSocketTextController {
+	
+	@Autowired
+    SimpMessagingTemplate template;
+	
+	@PostMapping("/send")
+	public ResponseEntity<Void> sendMessage(@RequestBody TextMessageDTO textMessageDTO) {
+		template.convertAndSend("/topic/message", textMessageDTO);
+		return new ResponseEntity<>(HttpStatus.OK);
+	}
+
+	@MessageMapping("/sendMessage")
+	public void receiveMessage(@Payload TextMessageDTO textMessageDTO) {
+		// receive message from client
+	}
+	
+	
+	@SendTo("/topic/message")
+	public TextMessageDTO broadcastMessage(@Payload TextMessageDTO textMessageDTO) {
+		return textMessageDTO;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/spring/data/models/ChatMessage.java b/src/main/java/com/spring/data/models/ChatMessage.java
new file mode 100644
index 0000000..79c85b3
--- /dev/null
+++ b/src/main/java/com/spring/data/models/ChatMessage.java
@@ -0,0 +1,46 @@
+package com.spring.data.models;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+import lombok.Builder;
+import lombok.Getter;
+
+//@Entity
+@Builder
+//@Table(name ="conversa")
+public class ChatMessage {
+    
+    @Getter
+    private MessageType type;
+
+    @Getter
+    private String content;
+
+
+    @Column(name = "user_id_emisor")
+    //@Getter No funciona
+    private String sender;
+    
+    @Column(name = "ts")
+    @Getter
+    private String time;
+
+    @Column(name = "conversa_id")
+    private Long conversa_id;
+
+    public String getSender() {
+        return sender;
+    }
+
+    public Long getConversaId() {
+        return conversa_id;
+    }
+
+    public void setConversaId(Long conversa_id) {
+        this.conversa_id = conversa_id;
+    }
+
+
+}
diff --git a/src/main/java/com/spring/data/models/Conversa.java b/src/main/java/com/spring/data/models/Conversa.java
new file mode 100644
index 0000000..82cfb1c
--- /dev/null
+++ b/src/main/java/com/spring/data/models/Conversa.java
@@ -0,0 +1,68 @@
+package com.spring.data.models;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import lombok.Builder;
+import lombok.Getter;
+
+//@Builder
+@Entity
+@Table(name = "conversa")
+public class Conversa {
+    
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+
+    private Long user_id_creador;
+
+    private Long user_id_segon;
+
+    private String time_started;
+
+    public Conversa() {}
+ 
+    public Conversa(Long user_id_creador, Long user_id_segon/*, String time_started)*/) {
+		this.user_id_creador = user_id_creador;
+		this.user_id_segon = user_id_segon;
+		//this.time_started = time_started;
+	}
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getUser_Id_creador() {
+        return user_id_creador;
+    }
+
+    public void setUser_Id_creador(Long id_creador) {
+        this.user_id_creador = id_creador;
+    }
+
+    public Long getUser_Id_segon() {
+        return user_id_segon;
+    }
+
+    public void setUser_Id_segon(Long id_segon) {
+        this.user_id_segon = id_segon;
+    }
+
+    public String getTimeStarted() {
+        return time_started;
+    }
+
+    public void setTimeStarted(String time_started) {
+        this.time_started = time_started;
+    }
+
+}
diff --git a/src/main/java/com/bezkoder/springjwt/models/ERole.java b/src/main/java/com/spring/data/models/ERole.java
similarity index 64%
rename from src/main/java/com/bezkoder/springjwt/models/ERole.java
rename to src/main/java/com/spring/data/models/ERole.java
index 9acf4a4..a3dc37e 100644
--- a/src/main/java/com/bezkoder/springjwt/models/ERole.java
+++ b/src/main/java/com/spring/data/models/ERole.java
@@ -1,4 +1,4 @@
-package com.bezkoder.springjwt.models;
+package com.spring.data.models;
 
 public enum ERole {
 	ROLE_USER,
diff --git a/src/main/java/com/spring/data/models/Matches.java b/src/main/java/com/spring/data/models/Matches.java
new file mode 100644
index 0000000..51ff472
--- /dev/null
+++ b/src/main/java/com/spring/data/models/Matches.java
@@ -0,0 +1,103 @@
+package com.spring.data.models;
+
+import javax.persistence.*;
+//import com.codesplai.spring.demo.repositories.MatchesRepository;
+
+
+@Entity
+@Table(name ="matches")
+public class Matches {
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    //@Column(name = "user_id_1")
+    //@OneToOne(cascade = CascadeType.ALL)
+    //@JoinColumn(name = "user_id_1", referencedColumnName = "id")
+    @Column(name = "user_id_1")
+    private int user_id_1;
+
+   //@OneToOne(cascade = CascadeType.ALL)
+   //@JoinColumn(name = "user_id_2", referencedColumnName = "id")
+    @Column(name = "user_id_2")
+    private int user_id_2;
+
+    @Column(name = "is_match", columnDefinition = "boolean default false")
+    private Boolean is_match = false;
+
+    //@Column(name = "liked_1", columnDefinition = "boolean default true")
+    private Boolean liked_1;
+
+    @Column(name = "liked_2", columnDefinition = "boolean default false")
+    private Boolean liked_2 = false;
+
+    public Matches() {}
+
+    /*public Matches(Long user_id_1, Long user_id_2) {
+        this.user_id_1 = user_id_1;
+        this.user_id_2 = user_id_2;
+    }*/
+
+    public Matches(int user_id_1, int user_id_2, Boolean liked_1, boolean liked_2, boolean is_match) {
+        this.user_id_1 = user_id_1;
+        this.user_id_2 = user_id_2;
+        this.liked_1 = liked_1;
+        this.liked_2 = liked_2;
+        this.is_match = is_match;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public int getUser_Id_1() {
+        return user_id_1;
+    }
+
+    public void setUser_Id_1(int id_user) {
+        this.user_id_1 = id_user;
+    }
+
+    public int getUser_Id_2() {
+        return user_id_2;
+    }
+
+    public void setUser_Id_2(int id_user) {
+        this.user_id_2 = id_user;
+    }
+
+    public Boolean getIs_Match() {
+        return is_match;
+    }
+
+    public Boolean setIs_Match(Boolean is_match) {
+        return this.is_match = is_match;
+    }
+
+    public Boolean getLiked_1() {
+        return liked_1;
+    }
+
+    public Boolean setIs_Liked_1(Boolean liked_1) {
+        return this.liked_1 = liked_1;
+    }
+
+    public Boolean getLiked_2() {
+        return liked_2;
+    }
+
+    public Boolean setLiked_2(Boolean liked_2) {
+        return this.liked_2 = liked_2;
+    }
+
+    @Override
+    public String toString() {
+        return "Match{" + "id=" + id + ", name2=" + user_id_1 + ", name=" + user_id_2 + /*",is match=" + is_match +*/'}';
+    }
+
+
+}
diff --git a/src/main/java/com/spring/data/models/Message.java b/src/main/java/com/spring/data/models/Message.java
new file mode 100644
index 0000000..dd1e23c
--- /dev/null
+++ b/src/main/java/com/spring/data/models/Message.java
@@ -0,0 +1,79 @@
+package com.spring.data.models;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name ="message")
+public class Message {
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    private Long conversa_id;
+
+    private Long user_id_emisor;
+
+    private Long user_id_receptor;
+
+    private String message_txt;
+
+    private String ts;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getconversaId() {
+        return conversa_id;
+    }
+
+    public void setconversaId(Long id) {
+        this.conversa_id = id;
+    }
+
+    public Long getUseridemisor() {
+        return user_id_emisor;
+    }
+
+    public void setUseridemisor(Long user_id_emisor) {
+        this.user_id_emisor = user_id_emisor;
+    }
+
+    public Long getUseridreceptor() {
+        return user_id_receptor;
+    }
+
+    public void setUseridreceptor(Long user_id_receptor) {
+        this.user_id_receptor = user_id_receptor;
+    }
+
+    public String getmessage() {
+        return message_txt;
+    }
+
+    public void setmessage(String message_txt) {
+        this.message_txt = message_txt;
+    }
+
+    public String getTimestamp() {
+        return ts;
+    }
+
+    public void setTimestamp(String ts) {
+        this.ts = ts;
+    }
+
+    public Message() {}
+
+    public Message(Long conversa_id, Long user_id_emisor, Long user_id_receptor, String message_txt, String ts) {
+        this.conversa_id = conversa_id;
+        this.user_id_emisor = user_id_emisor;
+        this.user_id_receptor = user_id_receptor;
+        this.message_txt = message_txt;
+        this.ts = ts;
+    }
+}
diff --git a/src/main/java/com/spring/data/models/MessageType.java b/src/main/java/com/spring/data/models/MessageType.java
new file mode 100644
index 0000000..62a9042
--- /dev/null
+++ b/src/main/java/com/spring/data/models/MessageType.java
@@ -0,0 +1,7 @@
+package com.spring.data.models;
+
+public enum MessageType {
+    CHAT,
+    CONNECT,
+    DISCONNECTED
+}
diff --git a/src/main/java/com/spring/data/models/Notification.java b/src/main/java/com/spring/data/models/Notification.java
new file mode 100644
index 0000000..f0da6be
--- /dev/null
+++ b/src/main/java/com/spring/data/models/Notification.java
@@ -0,0 +1,13 @@
+package com.spring.data.models;
+
+public class Notification {
+
+    public String text;
+
+    public Notification() {
+    }
+
+    public Notification(String text) {
+        this.text = text;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/spring/data/models/Reportes.java b/src/main/java/com/spring/data/models/Reportes.java
new file mode 100644
index 0000000..7857052
--- /dev/null
+++ b/src/main/java/com/spring/data/models/Reportes.java
@@ -0,0 +1,102 @@
+package com.spring.data.models;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "reportes")
+public class Reportes {
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    private Long id;
+
+    private Long user_id;
+    
+    private Long user_id_reported;
+
+    private String motiu;
+
+    private String comentari;
+
+    private String prova;
+
+    private Boolean solucionado = false;
+
+    public Reportes() {}
+
+    public Reportes(Long user_id, Long user_id_reported, String motiu, String comentari, String prova, Boolean solucionado) {
+		this.user_id = user_id;
+		this.user_id_reported = user_id_reported;
+		this.motiu = motiu;
+        this.comentari = comentari;
+        this.prova = prova;
+        this.solucionado = solucionado;
+	}
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getUserId() {
+        return user_id;
+    } 
+
+    public void setUserId(Long user_id) {
+        this.user_id = user_id;
+    }
+
+    public Long getUserId_reported() {
+        return user_id_reported;
+    } 
+
+    public void setUserId_reported(Long user_id_reported) {
+        this.user_id_reported = user_id_reported;
+    }
+
+    public String getMotiu() {
+        return motiu;
+    } 
+
+    public void setMotiu(String motiu) {
+        this.motiu = motiu;
+    }
+
+    public String getComentari() {
+        return comentari;
+    } 
+
+    public void setComentari(String comentari) {
+        this.comentari = comentari;
+    }
+
+    public String getProva() {
+        return prova;
+    } 
+
+    public void setProva(String prova) {
+        this.prova = prova;
+    }
+
+    public Boolean getSolucionado() {
+        return solucionado;
+    } 
+
+    public void setSolucionado(Boolean solucionado) {
+        this.solucionado = solucionado;
+    }
+
+    @Override
+    public String toString() {
+        return "Reporte{" + "id=" + id + ", usuari=" + user_id + ", usuari_reportat=" + user_id_reported + ", motiu=" + motiu + ", comentari=" + comentari + '}';
+    }
+}
+
+
+
diff --git a/src/main/java/com/bezkoder/springjwt/models/Role.java b/src/main/java/com/spring/data/models/Role.java
similarity index 92%
rename from src/main/java/com/bezkoder/springjwt/models/Role.java
rename to src/main/java/com/spring/data/models/Role.java
index 44b82ad..662f9b8 100644
--- a/src/main/java/com/bezkoder/springjwt/models/Role.java
+++ b/src/main/java/com/spring/data/models/Role.java
@@ -1,4 +1,4 @@
-package com.bezkoder.springjwt.models;
+package com.spring.data.models;
 
 import javax.persistence.*;
 
diff --git a/src/main/java/com/spring/data/models/TextMessageDTO.java b/src/main/java/com/spring/data/models/TextMessageDTO.java
new file mode 100644
index 0000000..bc25d68
--- /dev/null
+++ b/src/main/java/com/spring/data/models/TextMessageDTO.java
@@ -0,0 +1,15 @@
+package com.spring.data.models;
+
+public class TextMessageDTO {
+
+	private String message;
+
+	public String getMessage() {
+		return message;
+	}
+
+	public void setMessage(String message) {
+		this.message = message;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/spring/data/models/User.java b/src/main/java/com/spring/data/models/User.java
new file mode 100644
index 0000000..05fa944
--- /dev/null
+++ b/src/main/java/com/spring/data/models/User.java
@@ -0,0 +1,304 @@
+package com.spring.data.models;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.persistence.*;
+import javax.validation.constraints.Email;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+
+@Entity
+@Table(name = "user")
+public class User {
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    private Long id;
+
+    @Column(name = "username")
+    private String username;
+    
+    @Column(name = "nom")
+    private String nom;
+
+    private String nickname;
+
+    private String server;
+
+    private String rol_pred;
+
+    private String img;
+
+    private String details;
+
+    //Modos ---> Fer una taula que tingui id i el modo (1-4) que vol jugar
+    private Boolean modo_flex;
+
+    private Boolean modo_duo;
+
+    private Boolean modo_clash;
+
+    private Boolean modo_otro;
+
+    //Tipos ---> Fer una taula que tingui id i el modo (1-5) que vol jugar
+    private Boolean tipo_ForFun;
+    
+    private Boolean tipo_tryhard;
+
+    private Boolean tipo_champs;
+
+    private Boolean tipo_otps;
+
+    private Boolean rol_jungle;
+
+    //Rols ---> Fer una taula que tingui id i el modo (1-5) que vol jugar
+    private Boolean rol_top;
+
+    private Boolean rol_mid;
+
+    private Boolean rol_bot;
+
+    private Boolean rol_supp;
+
+    private Boolean rol_fill;
+
+   // Suposo que faltaria una pels personatges
+
+   @Column(name = "password")
+    private String password;
+
+
+
+    @Transient
+    private String passwordConfirm;
+
+
+    public User() {}
+ 
+
+    public User(String nom, String username, String password) {
+		this.nom = nom;
+		this.username = username;
+		this.password = password;
+	}
+
+    public User(Boolean modo_flex, Boolean modo_duo, Boolean modo_clash, Boolean modo_otro) {
+        this.modo_flex = modo_flex;
+        this.modo_duo = modo_duo;
+        this.modo_clash = modo_clash;
+        this.modo_otro = modo_otro;
+    }
+
+    @ManyToMany
+    private Set<Role> roles;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getNom() {
+        return nom;
+    }
+
+    public void setNom(String nom) {
+        this.nom = nom;
+    }
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getNickname() {
+        return nickname;
+    }
+
+    public void setNickname(String nickname) {
+        this.nickname = nickname;
+    }
+
+    public String getServer() {
+        return server;
+    }
+
+    public void setServer(String server) {
+        this.server = server;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public String getPasswordConfirm() {
+        return passwordConfirm;
+    }
+
+    public void setPasswordConfirm(String passwordConfirm) {
+        this.passwordConfirm = passwordConfirm;
+    }
+
+    public String getRolPred() {
+        return rol_pred;
+    }
+    
+    public void setRolPred(String rol_pred) {
+        this.rol_pred = rol_pred;
+    }
+
+    public String getImg() {
+        return img;
+    }
+
+    public void setImg(String img) {
+        this.img = img;
+    }
+
+    public String getDetails() {
+        return details;
+    }
+
+    public void setDetails(String details) {
+        this.details = details;
+    }
+
+
+
+    //  --->     MODOS
+    public Boolean getFlex() {
+        return modo_flex;
+    }
+
+    public void setFlex(Boolean modo_flex) {
+        this.modo_flex = modo_flex;
+    }
+
+    public Boolean getClash() {
+        return modo_clash;
+    }
+
+    public void setClash(Boolean modo_clash) {
+        this.modo_clash = modo_clash;
+    }
+
+    public Boolean getDuo() {
+        return modo_duo;
+    }
+
+    public void setDuo(Boolean modo_duo) {
+        this.modo_duo = modo_duo;
+    }
+
+    public Boolean getOtro() {
+        return modo_otro;
+    }
+
+    public void setOtro(Boolean modo_otro) {
+        this.modo_otro = modo_otro;
+    }
+
+    //  --->    TIPOS
+    public Boolean getForFun() {
+        return tipo_ForFun;
+    }
+    
+    public void setforfun(Boolean tipo_ForFun) {
+        this.tipo_ForFun = tipo_ForFun;
+    }
+
+    public Boolean getChamps() {
+        return tipo_champs;
+    }
+    
+    public void setChamps(Boolean tipo_champs) {
+        this.tipo_champs = tipo_champs;
+    }
+
+    public Boolean getOtps() {
+        return tipo_otps;
+    }
+    
+    public void setOtps(Boolean tipo_otps) {
+        this.tipo_otps = tipo_otps;
+    }
+
+    public Boolean getTryHard() {
+        return tipo_tryhard;
+    }
+    
+    public void setTryHard(Boolean tipo_tryhard) {
+        this.tipo_tryhard = tipo_tryhard;
+    }
+
+    //  --->    ROLS
+
+    public Boolean getBot() {
+        return rol_bot;
+    }
+    
+    public void setBot(Boolean rol_bot) {
+        this.rol_bot = rol_bot;
+    }
+
+    public Boolean getFill() {
+        return rol_fill;
+    }
+    
+    public void setFill(Boolean rol_fill) {
+        this.rol_fill = rol_fill;
+    }
+        
+    public Boolean getJungle() {
+        return rol_jungle;
+    }
+    
+    public void setJungle(Boolean rol_jungle) {
+        this.rol_jungle = rol_jungle;
+    }
+
+    public Boolean getMid() {
+        return rol_mid;
+    }
+    
+    public void setMid(Boolean rol_mid) {
+        this.rol_mid = rol_mid;
+    }
+
+    public Boolean getSupp() {
+        return rol_supp;
+    }
+    
+    public void setSupp(Boolean rol_supp) {
+        this.rol_supp = rol_supp;
+    }
+
+    public Boolean getTop() {
+        return rol_top;
+    }
+    
+    public void setTop(Boolean rol_top) {
+        this.rol_top = rol_top;
+    }
+
+
+    public Set<Role> getRoles() {
+        return roles;
+    }
+
+    public void setRoles(Set<Role> roles) {
+        this.roles = roles;
+    }
+    @Override
+    public String toString() {
+        return "User{" + "id=" + id + ", name=" + nom + ", email=" + username + ", server=" + server + ", nickname=" + nickname + '}';
+    }
+}
diff --git a/src/main/java/com/spring/data/payload/.DS_Store b/src/main/java/com/spring/data/payload/.DS_Store
new file mode 100644
index 0000000..6f3ebb9
Binary files /dev/null and b/src/main/java/com/spring/data/payload/.DS_Store differ
diff --git a/src/main/java/com/bezkoder/springjwt/payload/request/LoginRequest.java b/src/main/java/com/spring/data/payload/request/LoginRequest.java
similarity index 89%
rename from src/main/java/com/bezkoder/springjwt/payload/request/LoginRequest.java
rename to src/main/java/com/spring/data/payload/request/LoginRequest.java
index e0e7f9f..30530d3 100644
--- a/src/main/java/com/bezkoder/springjwt/payload/request/LoginRequest.java
+++ b/src/main/java/com/spring/data/payload/request/LoginRequest.java
@@ -1,4 +1,4 @@
-package com.bezkoder.springjwt.payload.request;
+package com.spring.data.payload.request;
 
 import javax.validation.constraints.NotBlank;
 
diff --git a/src/main/java/com/bezkoder/springjwt/payload/request/SignupRequest.java b/src/main/java/com/spring/data/payload/request/SignupRequest.java
similarity index 80%
rename from src/main/java/com/bezkoder/springjwt/payload/request/SignupRequest.java
rename to src/main/java/com/spring/data/payload/request/SignupRequest.java
index 515e0a5..15ea975 100644
--- a/src/main/java/com/bezkoder/springjwt/payload/request/SignupRequest.java
+++ b/src/main/java/com/spring/data/payload/request/SignupRequest.java
@@ -1,4 +1,4 @@
-package com.bezkoder.springjwt.payload.request;
+package com.spring.data.payload.request;
 
 import java.util.Set;
 
@@ -7,12 +7,12 @@
 public class SignupRequest {
     @NotBlank
     @Size(min = 3, max = 20)
-    private String username;
+    private String nom;
  
     @NotBlank
     @Size(max = 50)
     @Email
-    private String email;
+    private String username;
     
     private Set<String> role;
     
@@ -20,20 +20,20 @@ public class SignupRequest {
     @Size(min = 6, max = 40)
     private String password;
   
-    public String getUsername() {
-        return username;
+    public String getNom() {
+        return nom;
     }
  
-    public void setUsername(String username) {
-        this.username = username;
+    public void setNom(String nom) {
+        this.nom = nom;
     }
  
-    public String getEmail() {
-        return email;
+    public String getUsername() {
+        return username;
     }
  
-    public void setEmail(String email) {
-        this.email = email;
+    public void setUsername(String username) {
+        this.username = username;
     }
  
     public String getPassword() {
diff --git a/src/main/java/com/bezkoder/springjwt/payload/response/JwtResponse.java b/src/main/java/com/spring/data/payload/response/JwtResponse.java
similarity index 73%
rename from src/main/java/com/bezkoder/springjwt/payload/response/JwtResponse.java
rename to src/main/java/com/spring/data/payload/response/JwtResponse.java
index 35ae5a4..6c7d957 100644
--- a/src/main/java/com/bezkoder/springjwt/payload/response/JwtResponse.java
+++ b/src/main/java/com/spring/data/payload/response/JwtResponse.java
@@ -1,4 +1,4 @@
-package com.bezkoder.springjwt.payload.response;
+package com.spring.data.payload.response;
 
 import java.util.List;
 
@@ -7,14 +7,14 @@ public class JwtResponse {
 	private String type = "Bearer";
 	private Long id;
 	private String username;
-	private String email;
+	private String nom;
 	private List<String> roles;
 
-	public JwtResponse(String accessToken, Long id, String username, String email, List<String> roles) {
+	public JwtResponse(String accessToken, Long id, String nom, String username, List<String> roles) {
 		this.token = accessToken;
 		this.id = id;
 		this.username = username;
-		this.email = email;
+		this.nom = nom;
 		this.roles = roles;
 	}
 
@@ -42,12 +42,12 @@ public void setId(Long id) {
 		this.id = id;
 	}
 
-	public String getEmail() {
-		return email;
+	public String getNom() {
+		return nom;
 	}
 
-	public void setEmail(String email) {
-		this.email = email;
+	public void setNom(String nom) {
+		this.nom = nom;
 	}
 
 	public String getUsername() {
diff --git a/src/main/java/com/bezkoder/springjwt/payload/response/MessageResponse.java b/src/main/java/com/spring/data/payload/response/MessageResponse.java
similarity index 84%
rename from src/main/java/com/bezkoder/springjwt/payload/response/MessageResponse.java
rename to src/main/java/com/spring/data/payload/response/MessageResponse.java
index 4a3a59f..1ecfea7 100644
--- a/src/main/java/com/bezkoder/springjwt/payload/response/MessageResponse.java
+++ b/src/main/java/com/spring/data/payload/response/MessageResponse.java
@@ -1,4 +1,4 @@
-package com.bezkoder.springjwt.payload.response;
+package com.spring.data.payload.response;
 
 public class MessageResponse {
 	private String message;
diff --git a/src/main/java/com/spring/data/repository/ConversaRepository.java b/src/main/java/com/spring/data/repository/ConversaRepository.java
new file mode 100644
index 0000000..82023d1
--- /dev/null
+++ b/src/main/java/com/spring/data/repository/ConversaRepository.java
@@ -0,0 +1,16 @@
+package com.spring.data.repository;
+
+import java.util.List;
+
+import com.spring.data.models.Conversa;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+
+public interface ConversaRepository extends JpaRepository<Conversa, Long>{
+    @Query(value = "SELECT * FROM Conversa m WHERE m.user_Id_creador= ?1 OR m.user_Id_segon = ?1", nativeQuery = true)
+	List<Conversa> findUserConverses(Long user_id_1);
+
+    @Query(value = "SELECT id FROM Conversa m WHERE m.user_id_creador = ?1 AND m.user_id_segon = ?2 OR m.user_id_creador = ?2 AND m.user_id_segon = ?1", nativeQuery = true)
+    Long findId(Long user_id_1, Long user_id_2);
+}
diff --git a/src/main/java/com/spring/data/repository/MatchesRepository.java b/src/main/java/com/spring/data/repository/MatchesRepository.java
new file mode 100644
index 0000000..e159b30
--- /dev/null
+++ b/src/main/java/com/spring/data/repository/MatchesRepository.java
@@ -0,0 +1,66 @@
+package com.spring.data.repository;
+
+
+import java.util.List;
+import java.util.Optional;
+
+import com.spring.data.models.Matches;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface MatchesRepository extends JpaRepository<Matches, Long> {
+    
+    @Query(value = "SELECT * FROM Matches m WHERE m.user_id_1 = ?1 AND m.user_id_2 = ?2", nativeQuery = true)
+	Boolean findIsMatch(Long user_id_1, Long user_id_2);
+
+    //S'ha de posar que nomes surtin el id_user
+    // SELECT u FROM User u WHERE u.status = ?1 and u.name = ?2"
+    @Query(value = "SELECT * FROM Matches m WHERE m.is_match = 1 AND m.user_id_1 = ?1 OR m.user_id_2 = ?1", nativeQuery = true)
+	List<Matches> findUserMatches(Long user_id_1);
+
+    @Query(value = "SELECT * FROM Matches m WHERE m.user_id_1 = ?1 OR m.user_id_2 = ?1 AND m.is_match = 0", nativeQuery = true)
+	List<Matches> findUserNotMatches(Long user_id_1);
+    
+    @Query(value = "SELECT count(*) FROM Matches m WHERE m.user_id_1 = ?1 AND m.user_id_2 = ?2 OR m.user_id_1 = ?2 AND m.user_id_2 = ?1 AND m.liked_1 = 1", nativeQuery = true)
+    int alreadyLiked(Long user_id_1, Long user_id_2);
+
+    @Query(value = "SELECT * FROM Matches m WHERE m.liked_1 = 1 AND m.user_id_1 = ?1 AND m.user_id_2 = ?2", nativeQuery = true)
+    Boolean user1_liked(Long user_id_1, Long user_id_2);
+
+    //Potser sense optional
+    @Query(value = "SELECT * FROM Matches m WHERE m.user_id_1 = ?1 AND m.user_id_2 = ?2", nativeQuery = true)
+    Optional<Matches> findByMatches(Long user_id_1, Long user_id_2);
+
+    @Query(value = "SELECT * FROM Matches m WHERE m.user_id_1 = ?1 AND m.user_id_2 = ?2 OR m.user_id_1 = ?2 AND m.user_id_2 = ?1", nativeQuery = true)
+    Long findIdByUsers(Long user_id_1, Long user_id_2);
+
+    @Query(value = "SELECT * FROM Matches m WHERE m.is_match = 0", nativeQuery = true)
+    List<Matches> findAllMatches();
+    
+    @Query(value = "SELECT * FROM Matches m WHERE m.user_id_1 = ?1 AND m.user_id_2 = ?2 OR m.user_id_1 = ?2 AND m.user_id_2 = ?1", nativeQuery = true)
+    Optional<Matches> findTableByUsers(Long user_id_1, Long user_id_2);
+
+    @Query(value = "SELECT id FROM Matches m WHERE m.user_id_1 = ?1 AND m.user_id_2 = ?2 OR m.user_id_1 = ?2 AND m.user_id_2 = ?1", nativeQuery = true)
+    Long findId(Long user_id_1, Long user_id_2);
+
+
+
+    //void save(Optional<Matches> matchData);
+
+    /*@Modifying
+    @Query(value = "INSERT INTO MATCHES (user_id_1, user_id_2, is_match, liked_1, liked_2) values (:user_id_1, :user_id_2, :is_match, :status)", nativeQuery = true)
+    void insertUser(@Param("user_id_1") Long user_id_1, @Param("user_id_2") Long user_id_2, @Param("is_match") Integer status, @Param("email") String email);*/
+
+}
+    
+
+
+
+/*
+getReportes 
+*/
\ No newline at end of file
diff --git a/src/main/java/com/spring/data/repository/MessageRepository.java b/src/main/java/com/spring/data/repository/MessageRepository.java
new file mode 100644
index 0000000..988b705
--- /dev/null
+++ b/src/main/java/com/spring/data/repository/MessageRepository.java
@@ -0,0 +1,14 @@
+package com.spring.data.repository;
+
+import java.util.List;
+
+import com.spring.data.models.Message;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+
+public interface MessageRepository extends JpaRepository<Message, Long>{
+
+    @Query(value = "SELECT * FROM Message m WHERE m.conversa_id= ?1", nativeQuery = true)
+	List<Message> findMessages(Long id);
+}
diff --git a/src/main/java/com/spring/data/repository/ReportesRepository.java b/src/main/java/com/spring/data/repository/ReportesRepository.java
new file mode 100644
index 0000000..8a006b6
--- /dev/null
+++ b/src/main/java/com/spring/data/repository/ReportesRepository.java
@@ -0,0 +1,11 @@
+package com.spring.data.repository;
+
+import com.spring.data.models.Reportes;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ReportesRepository extends JpaRepository<Reportes, Long> {
+    
+}
diff --git a/src/main/java/com/bezkoder/springjwt/repository/RoleRepository.java b/src/main/java/com/spring/data/repository/RoleRepository.java
similarity index 67%
rename from src/main/java/com/bezkoder/springjwt/repository/RoleRepository.java
rename to src/main/java/com/spring/data/repository/RoleRepository.java
index 06aa459..c7e3086 100644
--- a/src/main/java/com/bezkoder/springjwt/repository/RoleRepository.java
+++ b/src/main/java/com/spring/data/repository/RoleRepository.java
@@ -1,13 +1,13 @@
-package com.bezkoder.springjwt.repository;
+package com.spring.data.repository;
 
 import java.util.Optional;
 
+import com.spring.data.models.ERole;
+import com.spring.data.models.Role;
+
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
-import com.bezkoder.springjwt.models.ERole;
-import com.bezkoder.springjwt.models.Role;
-
 @Repository
 public interface RoleRepository extends JpaRepository<Role, Long> {
 	Optional<Role> findByName(ERole name);
diff --git a/src/main/java/com/bezkoder/springjwt/repository/UserRepository.java b/src/main/java/com/spring/data/repository/UserRepository.java
similarity index 50%
rename from src/main/java/com/bezkoder/springjwt/repository/UserRepository.java
rename to src/main/java/com/spring/data/repository/UserRepository.java
index 74f2df9..7b926f3 100644
--- a/src/main/java/com/bezkoder/springjwt/repository/UserRepository.java
+++ b/src/main/java/com/spring/data/repository/UserRepository.java
@@ -1,17 +1,21 @@
-package com.bezkoder.springjwt.repository;
+package com.spring.data.repository;
 
 import java.util.Optional;
 
+import com.spring.data.models.User;
+
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
-import com.bezkoder.springjwt.models.User;
-
 @Repository
 public interface UserRepository extends JpaRepository<User, Long> {
 	Optional<User> findByUsername(String username);
 
+	Boolean existsByNom(String username);
+
 	Boolean existsByUsername(String username);
 
-	Boolean existsByEmail(String email);
+	@Query(value = "SELECT * FROM User u WHERE u.id = ?1 AND u.modo_duo = ?2", nativeQuery = true)
+	User findUserByIdAndModo(Long id, Boolean modo_duo);
 }
diff --git a/src/main/java/com/spring/data/security/.DS_Store b/src/main/java/com/spring/data/security/.DS_Store
new file mode 100644
index 0000000..22b7434
Binary files /dev/null and b/src/main/java/com/spring/data/security/.DS_Store differ
diff --git a/src/main/java/com/bezkoder/springjwt/security/WebSecurityConfig.java b/src/main/java/com/spring/data/security/WebSecurityConfig.java
similarity index 83%
rename from src/main/java/com/bezkoder/springjwt/security/WebSecurityConfig.java
rename to src/main/java/com/spring/data/security/WebSecurityConfig.java
index 405cf6b..0e90431 100644
--- a/src/main/java/com/bezkoder/springjwt/security/WebSecurityConfig.java
+++ b/src/main/java/com/spring/data/security/WebSecurityConfig.java
@@ -1,8 +1,13 @@
-package com.bezkoder.springjwt.security;
+package com.spring.data.security;
+
+import com.spring.data.security.jwt.AuthEntryPointJwt;
+import com.spring.data.security.jwt.AuthTokenFilter;
+import com.spring.data.security.services.UserDetailsServiceImpl;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.http.HttpMethod;
 import org.springframework.security.authentication.AuthenticationManager;
 import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
 import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
@@ -14,10 +19,6 @@
 import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
 
-import com.bezkoder.springjwt.security.jwt.AuthEntryPointJwt;
-import com.bezkoder.springjwt.security.jwt.AuthTokenFilter;
-import com.bezkoder.springjwt.security.services.UserDetailsServiceImpl;
-
 @Configuration
 @EnableWebSecurity
 @EnableGlobalMethodSecurity(
@@ -51,16 +52,23 @@ public AuthenticationManager authenticationManagerBean() throws Exception {
 	public PasswordEncoder passwordEncoder() {
 		return new BCryptPasswordEncoder();
 	}
-
+	
 	@Override
 	protected void configure(HttpSecurity http) throws Exception {
 		http.cors().and().csrf().disable()
 			.exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
 			.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
 			.authorizeRequests().antMatchers("/api/auth/**").permitAll()
+			.antMatchers("/**").permitAll()
+			/*.antMatchers("/user/delete/**").hasAnyAuthority("ADMIN")
+			//.antMatchers("/reportes/**").hasAnyAuthority("ADMIN")
+			.antMatchers("/user/deleteAll/**").hasAuthority("ADMIN")*/
 			.antMatchers("/api/test/**").permitAll()
 			.anyRequest().authenticated();
 
 		http.addFilterBefore(authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class);
+		
+
+		
 	}
 }
diff --git a/src/main/java/com/bezkoder/springjwt/security/jwt/AuthEntryPointJwt.java b/src/main/java/com/spring/data/security/jwt/AuthEntryPointJwt.java
similarity index 95%
rename from src/main/java/com/bezkoder/springjwt/security/jwt/AuthEntryPointJwt.java
rename to src/main/java/com/spring/data/security/jwt/AuthEntryPointJwt.java
index b7e2647..11f1db7 100644
--- a/src/main/java/com/bezkoder/springjwt/security/jwt/AuthEntryPointJwt.java
+++ b/src/main/java/com/spring/data/security/jwt/AuthEntryPointJwt.java
@@ -1,4 +1,4 @@
-package com.bezkoder.springjwt.security.jwt;
+package com.spring.data.security.jwt;
 
 import java.io.IOException;
 
diff --git a/src/main/java/com/bezkoder/springjwt/security/jwt/AuthTokenFilter.java b/src/main/java/com/spring/data/security/jwt/AuthTokenFilter.java
similarity index 94%
rename from src/main/java/com/bezkoder/springjwt/security/jwt/AuthTokenFilter.java
rename to src/main/java/com/spring/data/security/jwt/AuthTokenFilter.java
index 4a906a8..0f07a3a 100644
--- a/src/main/java/com/bezkoder/springjwt/security/jwt/AuthTokenFilter.java
+++ b/src/main/java/com/spring/data/security/jwt/AuthTokenFilter.java
@@ -1,4 +1,4 @@
-package com.bezkoder.springjwt.security.jwt;
+package com.spring.data.security.jwt;
 
 import java.io.IOException;
 
@@ -7,6 +7,8 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import com.spring.data.security.services.UserDetailsServiceImpl;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -17,8 +19,6 @@
 import org.springframework.util.StringUtils;
 import org.springframework.web.filter.OncePerRequestFilter;
 
-import com.bezkoder.springjwt.security.services.UserDetailsServiceImpl;
-
 public class AuthTokenFilter extends OncePerRequestFilter {
 	@Autowired
 	private JwtUtils jwtUtils;
diff --git a/src/main/java/com/bezkoder/springjwt/security/jwt/JwtUtils.java b/src/main/java/com/spring/data/security/jwt/JwtUtils.java
similarity index 94%
rename from src/main/java/com/bezkoder/springjwt/security/jwt/JwtUtils.java
rename to src/main/java/com/spring/data/security/jwt/JwtUtils.java
index 400b563..2c67e94 100644
--- a/src/main/java/com/bezkoder/springjwt/security/jwt/JwtUtils.java
+++ b/src/main/java/com/spring/data/security/jwt/JwtUtils.java
@@ -1,14 +1,15 @@
-package com.bezkoder.springjwt.security.jwt;
+package com.spring.data.security.jwt;
 
 import java.util.Date;
 
+import com.spring.data.security.services.UserDetailsImpl;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.security.core.Authentication;
 import org.springframework.stereotype.Component;
 
-import com.bezkoder.springjwt.security.services.UserDetailsImpl;
 import io.jsonwebtoken.*;
 
 @Component
diff --git a/src/main/java/com/bezkoder/springjwt/security/services/UserDetailsImpl.java b/src/main/java/com/spring/data/security/services/UserDetailsImpl.java
similarity index 90%
rename from src/main/java/com/bezkoder/springjwt/security/services/UserDetailsImpl.java
rename to src/main/java/com/spring/data/security/services/UserDetailsImpl.java
index fafc5a9..4e4d157 100644
--- a/src/main/java/com/bezkoder/springjwt/security/services/UserDetailsImpl.java
+++ b/src/main/java/com/spring/data/security/services/UserDetailsImpl.java
@@ -1,4 +1,4 @@
-package com.bezkoder.springjwt.security.services;
+package com.spring.data.security.services;
 
 import java.util.Collection;
 import java.util.List;
@@ -9,8 +9,8 @@
 import org.springframework.security.core.authority.SimpleGrantedAuthority;
 import org.springframework.security.core.userdetails.UserDetails;
 
-import com.bezkoder.springjwt.models.User;
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.spring.data.models.User;
 
 public class UserDetailsImpl implements UserDetails {
 	private static final long serialVersionUID = 1L;
@@ -26,11 +26,10 @@ public class UserDetailsImpl implements UserDetails {
 
 	private Collection<? extends GrantedAuthority> authorities;
 
-	public UserDetailsImpl(Long id, String username, String email, String password,
+	public UserDetailsImpl(Long id, String username, String password,
 			Collection<? extends GrantedAuthority> authorities) {
 		this.id = id;
 		this.username = username;
-		this.email = email;
 		this.password = password;
 		this.authorities = authorities;
 	}
@@ -43,7 +42,6 @@ public static UserDetailsImpl build(User user) {
 		return new UserDetailsImpl(
 				user.getId(), 
 				user.getUsername(), 
-				user.getEmail(),
 				user.getPassword(), 
 				authorities);
 	}
diff --git a/src/main/java/com/bezkoder/springjwt/security/services/UserDetailsServiceImpl.java b/src/main/java/com/spring/data/security/services/UserDetailsServiceImpl.java
similarity index 66%
rename from src/main/java/com/bezkoder/springjwt/security/services/UserDetailsServiceImpl.java
rename to src/main/java/com/spring/data/security/services/UserDetailsServiceImpl.java
index 9a3ed41..61ca816 100644
--- a/src/main/java/com/bezkoder/springjwt/security/services/UserDetailsServiceImpl.java
+++ b/src/main/java/com/spring/data/security/services/UserDetailsServiceImpl.java
@@ -1,4 +1,7 @@
-package com.bezkoder.springjwt.security.services;
+package com.spring.data.security.services;
+
+import com.spring.data.models.User;
+import com.spring.data.repository.UserRepository;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.userdetails.UserDetails;
@@ -7,9 +10,6 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import com.bezkoder.springjwt.models.User;
-import com.bezkoder.springjwt.repository.UserRepository;
-
 @Service
 public class UserDetailsServiceImpl implements UserDetailsService {
 	@Autowired
@@ -17,9 +17,9 @@ public class UserDetailsServiceImpl implements UserDetailsService {
 
 	@Override
 	@Transactional
-	public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
-		User user = userRepository.findByUsername(username)
-				.orElseThrow(() -> new UsernameNotFoundException("User Not Found with username: " + username));
+	public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
+		User user = userRepository.findByUsername(email)
+				.orElseThrow(() -> new UsernameNotFoundException("User Not Found with username: " + email));
 
 		return UserDetailsImpl.build(user);
 	}
diff --git a/src/main/java/com/spring/data/web/WebSocketMessageConfig.java b/src/main/java/com/spring/data/web/WebSocketMessageConfig.java
new file mode 100644
index 0000000..afdac28
--- /dev/null
+++ b/src/main/java/com/spring/data/web/WebSocketMessageConfig.java
@@ -0,0 +1,23 @@
+package com.spring.data.web;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.messaging.simp.config.MessageBrokerRegistry;
+import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
+import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
+import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
+
+@Configuration
+@EnableWebSocketMessageBroker
+public class WebSocketMessageConfig implements WebSocketMessageBrokerConfigurer {
+    
+    @Override
+    public void registerStompEndpoints(final StompEndpointRegistry registry) {
+        registry.addEndpoint("/chat-example").withSockJS();
+    }
+
+    @Override
+    public void configureMessageBroker(final MessageBrokerRegistry registry) {
+        registry.setApplicationDestinationPrefixes("/app");
+        registry.enableSimpleBroker("/topic");
+    }
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index d02fe7a..7f3daeb 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1,6 +1,6 @@
-spring.datasource.url= jdbc:mysql://localhost:3306/testdb?useSSL=false
+spring.datasource.url= jdbc:mysql://localhost:3306/Matcher?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
 spring.datasource.username= root
-spring.datasource.password= 123456
+spring.datasource.password= dj1932001
 
 spring.jpa.properties.hibernate.dialect= org.hibernate.dialect.MySQL5InnoDBDialect
 spring.jpa.hibernate.ddl-auto= update
diff --git a/src/main/resources/static/css/styles.css b/src/main/resources/static/css/styles.css
new file mode 100644
index 0000000..d67a9ea
--- /dev/null
+++ b/src/main/resources/static/css/styles.css
@@ -0,0 +1,116 @@
+body,html {
+    margin: 0;
+    background-color: rgba(40, 42, 54, 1) !important;
+}
+
+.card {
+    height: 500px;
+    border-radius: 15px !important;
+    background-color: rgba(0,0,0,0.4) !important;
+}
+
+.card-body {
+    overflow-y: auto;
+}
+
+.card-header {
+    border-radius: 15px 15px 0 0 !important;
+    border-bottom: 0 !important;
+}
+
+.card-footer {
+    border-radius: 0 0 15px 15px !important;
+    border-top: 0 !important;
+}
+
+.user_img {
+    height: 70px;
+    width: 70px;
+    border:1.5px solid #f5f6fa;
+}
+
+
+.img_cont_msg {
+    height: 40px;
+    width: 40px;
+}
+
+.chat-summary {
+    margin-top: auto;
+    margin-bottom: auto;
+    margin-left: 15px;
+}
+
+.chat-summary span {
+    font-size: 20px;
+    color: white;
+}
+
+.chat-summary p {
+    font-size: 10px;
+    color: rgba(255,255,255,0.6);
+}
+
+.msg_container_send {
+    margin-top: auto;
+    margin-bottom: auto;
+    margin-right: 10px;
+    border-radius: 25px;
+    padding: 10px;
+    position: relative;
+    color:white;
+}
+
+.msg_time_send {
+    position: absolute;
+    right:0;
+    bottom: -20px;
+    color: rgba(255,255,255,0.5);
+    font-size: 10px;
+    width: max-content;
+}
+
+.all-input {
+    background-color: rgba(0,0,0,0.3) !important;
+    border:0 !important;
+    color:white !important;
+    height: 60px !important;
+    overflow-y: auto;
+}
+
+
+.all-input:focus {
+   box-shadow:none !important;
+   outline:0px !important;
+}
+
+button {
+    background-color: rgba(0,0,0,0.3) !important;
+    border:0 !important;
+    color:white !important;
+    border-radius: 0 5px 5px 0 !important;
+}
+
+.hide {
+    display:none;
+}
+
+.login {
+    padding: 10px;
+}
+
+.main {
+    margin: 30px auto;
+}
+
+.circle {
+  width: 40px;
+  height: 40px;
+  border-radius: 50%;
+  color: white;
+  text-align: center;
+  font-size: 1.5em;
+  vertical-align: middle;
+  margin:3px;
+  border:1.5px solid #f5f6fa;
+}
diff --git a/src/main/resources/static/img/favicon-16x16.png b/src/main/resources/static/img/favicon-16x16.png
new file mode 100644
index 0000000..be9357c
Binary files /dev/null and b/src/main/resources/static/img/favicon-16x16.png differ
diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html
new file mode 100644
index 0000000..6393225
--- /dev/null
+++ b/src/main/resources/static/index.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
+    <title>Websockets Chat App</title>
+    <link rel="stylesheet" href="/css/styles.css" />
+    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
+    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.5.0/css/all.css" integrity="sha384-B4dIYHKNBt8Bc12p+WXckhzcICo0wtJAoU8YZTY5qE0Id1GSseTk6S+L3BlXeVIU" crossorigin="anonymous">
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
+    <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/malihu-custom-scrollbar-plugin/3.1.5/jquery.mCustomScrollbar.min.css">
+    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/malihu-custom-scrollbar-plugin/3.1.5/jquery.mCustomScrollbar.min.js"></script>
+    <script type="text/javascript" src="https://momentjs.com/downloads/moment.min.js"></script>
+
+    <link rel="icon" type="image/png" sizes="32x32" href="/img/favicon-16x16.png">
+
+</head>
+<body>
+
+<div class="container-fluid h-100">
+
+    <div id="status" class="login">
+
+    </div>
+
+    <div id="login">
+        <div class="main row justify-content-center h-100">
+            <form id="login-form" name="login-form">
+                <div class="input-group">
+                    <input id="username" type="text" class="form-control all-input" autocomplete="off" placeholder="Username" />
+                    <div class="input-group-append">
+                        <button class="fas fa-location-arrow" type="submit"></button>
+                    </div>
+                </div>
+            </form>
+        </div>
+    </div>
+
+    <div id="chat-page" class="hide main">
+        <div class="row justify-content-center h-100">
+
+            <div class="col-md-8 col-xl-6">
+                <div class="card">
+                    <div class="card-header">
+                        <div class="d-flex bd-highlight">
+                            <div class="chat-summary">
+                                <span>Web Sockets with Spring Boot Chat</span>
+                            </div>
+                        </div>
+                    </div>
+
+                    <div class="card-body">
+
+                        <div id="chat">
+
+                        </div>
+
+                    </div>
+
+                    <form id="message-controls" name="message-controls" class="card-footer">
+                        <div class="input-group">
+                            <textarea id="message" class="form-control all-input" placeholder="Type your message..."></textarea>
+                            <div class="input-group-append">
+                                <button class="fas fa-location-arrow" type="submit"></button>
+                            </div>
+                        </div>
+                    </form>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<script src="https://cdnjs.cloudflare.com/ajax/libs/sockjs-client/1.4.0/sockjs.min.js"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/stomp.js/2.3.3/stomp.min.js"></script>
+<script src="/js/script.js"></script>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/src/main/resources/static/js/script.js b/src/main/resources/static/js/script.js
new file mode 100644
index 0000000..9414fbd
--- /dev/null
+++ b/src/main/resources/static/js/script.js
@@ -0,0 +1,126 @@
+'use strict'
+
+let stompClient
+let username
+
+const connect = (event) => {
+    username = document.querySelector('#username').value.trim()
+
+    if (username) {
+        const login = document.querySelector('#login')
+        login.classList.add('hide')
+
+        const chatPage = document.querySelector('#chat-page')
+        chatPage.classList.remove('hide')
+
+        const socket = new SockJS('/chat-example')
+        stompClient = Stomp.over(socket)
+        stompClient.connect({}, onConnected, onError)
+    }
+    event.preventDefault()
+}
+
+const onConnected = () => {
+    stompClient.subscribe('/topic/public', onMessageReceived)
+    stompClient.send("/app/chat.newUser",
+        {},
+        JSON.stringify({sender: username, type: 'CONNECT'})
+    )
+    const status = document.querySelector('#status')
+    status.className = 'hide'
+}
+
+const onError = (error) => {
+    const status = document.querySelector('#status')
+    status.innerHTML = 'Could not find the connection you were looking for. Move along. Or, Refresh the page!'
+    status.style.color = 'red'
+}
+
+const sendMessage = (event) => {
+    const messageInput = document.querySelector('#message')
+    const messageContent = messageInput.value.trim()
+
+    if (messageContent && stompClient) {
+        const chatMessage = {
+            sender: username,
+            content: messageInput.value,
+            type: 'CHAT',
+            time: moment().calendar()
+        }
+        stompClient.send("/app/chat.send", {}, JSON.stringify(chatMessage))
+        messageInput.value = ''
+    }
+    event.preventDefault();
+}
+
+
+const onMessageReceived = (payload) => {
+    const message = JSON.parse(payload.body);
+
+    const chatCard = document.createElement('div')
+    chatCard.className = 'card-body'
+
+    const flexBox = document.createElement('div')
+    flexBox.className = 'd-flex justify-content-end mb-4'
+    chatCard.appendChild(flexBox)
+
+    const messageElement = document.createElement('div')
+    messageElement.className = 'msg_container_send'
+
+    flexBox.appendChild(messageElement)
+
+    if (message.type === 'CONNECT') {
+        messageElement.classList.add('event-message')
+        message.content = message.sender + ' connected!'
+    } else if (message.type === 'DISCONNECT') {
+        messageElement.classList.add('event-message')
+        message.content = message.sender + ' left!'
+    } else {
+        messageElement.classList.add('chat-message')
+
+        const avatarContainer = document.createElement('div')
+        avatarContainer.className = 'img_cont_msg'
+        const avatarElement = document.createElement('div')
+        avatarElement.className = 'circle user_img_msg'
+        const avatarText = document.createTextNode(message.sender[0])
+        avatarElement.appendChild(avatarText);
+        avatarElement.style['background-color'] = getAvatarColor(message.sender)
+        avatarContainer.appendChild(avatarElement)
+
+        messageElement.style['background-color'] = getAvatarColor(message.sender)
+
+        flexBox.appendChild(avatarContainer)
+
+        const time = document.createElement('span')
+        time.className = 'msg_time_send'
+        time.innerHTML = message.time
+        messageElement.appendChild(time)
+
+    }
+
+    messageElement.innerHTML = message.content
+
+    const chat = document.querySelector('#chat')
+    chat.appendChild(flexBox)
+    chat.scrollTop = chat.scrollHeight
+}
+
+const hashCode = (str) => {
+    let hash = 0
+    for (let i = 0; i < str.length; i++) {
+       hash = str.charCodeAt(i) + ((hash << 5) - hash)
+    }
+    return hash
+}
+
+
+const getAvatarColor = (messageSender) => {
+    const colours = ['#2196F3', '#32c787', '#1BC6B4', '#A1B4C4']
+    const index = Math.abs(hashCode(messageSender) % colours.length)
+    return colours[index]
+}
+
+const loginForm = document.querySelector('#login-form')
+loginForm.addEventListener('submit', connect, true)
+const messageControls = document.querySelector('#message-controls')
+messageControls.addEventListener('submit', sendMessage, true)
\ No newline at end of file