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

@@ -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 @@
org.springframework.boot
spring-boot-starter-data-jpa
-
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
org.springframework.boot
spring-boot-starter-security
-
+
+ org.projectlombok
+ lombok
+ true
+
org.springframework.boot
spring-boot-starter-web
-
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
mysql
mysql-connector-java
runtime
-
+
+ org.springframework.boot
+ spring-boot-starter-jetty
+
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
+
+ org.springframework.boot
+ spring-boot-starter-tomcat
+
+
+
io.jsonwebtoken
jjwt
0.9.1
-
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
org.springframework.boot
spring-boot-starter-test
test
-
org.springframework.security
spring-security-test
test
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.junit.vintage
+ junit-vintage-engine
+
+
+
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 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 getRoles() {
- return roles;
- }
-
- public void setRoles(Set 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 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> getAllUsers(@PathVariable("id") long id/*@RequestParam(required = false) String username*/) {
+ try {
+ List reportes = new ArrayList();
+
+ //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 getUserById(@PathVariable("id") long id) {
+ Optional 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 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 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 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> getAllUsers() {
+ try {
+ List matches = new ArrayList();
+
+ 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 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 isMatch2(@PathVariable("user_id_1") long user_id_1, @PathVariable("user_id_2") long user_id_2, @PathVariable("liked_2") boolean liked_2) {
+ Optional 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 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 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 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 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 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 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 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 updateModo(@PathVariable("id") long id, @RequestBody User user) {
+ Optional 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 getTable(@PathVariable("user_id_1") long user_id_1, @PathVariable("user_id_2") long user_id_2) {
+ Optional 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 getMatch(@PathVariable("user_id_1") long user_id_1, @PathVariable("user_id_2") long user_id_2) {
+ Optional 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 updateMatch(@PathVariable("user_id_1") long user_id_1, @PathVariable("user_id_1") long user_id_2, @RequestBody Matches matches) {
+ Optional 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 getMatchById(@PathVariable("id") long id) {
+ Optional 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 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 deleteAllMessages(@PathVariable("id") long id) {
+ try {
+ List 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 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 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> getAllUsers(@PathVariable("id") long id) {
+ try {
+ List matches = new ArrayList();
+
+ 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 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 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> getAllUsers(/*@RequestParam(required = false) String username*/) {
+ try {
+ List reportes = new ArrayList();
+
+ //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 getUserById(@PathVariable("id") long id) {
+ Optional 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 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 updateModo(@PathVariable("id") long id, @RequestBody Reportes reportes) {
+ Optional 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> getAllUsers(@RequestParam(required = false) String username) {
+ try {
+ List users = new ArrayList();
+
+ //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> getAllUsers(@PathVariable("id") long id, @RequestParam(required = false) String username) {
+ try {
+ List users = new ArrayList();
+ 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 getUserById(@PathVariable("id") long id) {
+ Optional 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 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 updateModo(@PathVariable("id") long id, @RequestBody User user) {
+ Optional 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 updateUser(@PathVariable("id") long id, @RequestBody User user) {
+ Optional 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 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 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> findByPublished() {
+ try {
+ List 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 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 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 getRoles() {
+ return roles;
+ }
+
+ public void setRoles(Set 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 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 roles;
- public JwtResponse(String accessToken, Long id, String username, String email, List roles) {
+ public JwtResponse(String accessToken, Long id, String nom, String username, List 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{
+ @Query(value = "SELECT * FROM Conversa m WHERE m.user_Id_creador= ?1 OR m.user_Id_segon = ?1", nativeQuery = true)
+ List 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 {
+
+ @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 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 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 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 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 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 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{
+
+ @Query(value = "SELECT * FROM Message m WHERE m.conversa_id= ?1", nativeQuery = true)
+ List 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 {
+
+}
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 {
Optional 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 {
Optional 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 @@
+
+
+
+
+ Websockets Chat App
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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