From 4ae6486ea6454fc691dd84e46f1342d605bd3ad7 Mon Sep 17 00:00:00 2001 From: Marcus Fifth Date: Wed, 9 Jun 2021 18:21:21 +0200 Subject: [PATCH 01/20] first commit --- .DS_Store | Bin 0 -> 8196 bytes src/.DS_Store | Bin 0 -> 6148 bytes .../springjwt/controllers/AuthController.java | 10 +- .../com/bezkoder/springjwt/models/User.java | 181 ++++++++++++------ .../payload/request/SignupRequest.java | 20 +- .../payload/response/JwtResponse.java | 14 +- .../springjwt/repository/UserRepository.java | 4 +- .../springjwt/security/WebSecurityConfig.java | 6 +- .../security/services/UserDetailsImpl.java | 4 +- .../services/UserDetailsServiceImpl.java | 6 +- src/main/resources/application.properties | 4 +- 11 files changed, 154 insertions(+), 95 deletions(-) create mode 100644 .DS_Store create mode 100644 src/.DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..aa2e33702b3119cccbfced3af3e0861fbbfc801a GIT binary patch literal 8196 zcmeHMJ#W)M7=Et_kO~QP?1JP!kVu`vhN;ql0R}3uu;4guQgC9^x} zpAP{J#?a!-pnh~<(k%e6iDf--zQ!lOz+z}|W)Kn#WlVv_RM{3o8FQ=$Rxh+TGic07 z+2%vp$jWvoN=JwPK&z7q4azJG2m|vBaPQuv4h?CS3a@`(Ieq2I##yh|PqRMOT1P*> zsOZ**JHC9dRGyEVZv$6gY2uFQIZeE{^y#51bK|}{ecAoqE#qq2adsZJPVU8}9~^fT z_3l$b1^#wvg4*}}3>x?AwcK33rXP=NE;at#td?u~`GuTclXPV?y_;sS<(waD%y;LP z9;}8Zrqx3|G0q1S{r469Ym`$4y$&5>PJL~~SAy$(l^)O*V)p1Buv6oo^Lg#$a~rJY zv}ZYOQyx-a|8{mel%m>ceKwk1HygeJ>$%!PZ9AwmfyM|`7x4NNznGyj9uw?f zgdNEdGr{`u*vAzn8t@DzD|}%$)eUDit(Jdh9G<|JmAH4qw@2j@p_HEAm-ABZs#iIj z(p6N-J3K^1MI|@vrI(wh>u31+ZPk~X=d+VCPtS*Yzb?}8bAH1)%Mb=GE&~md`a1Xj zTZ_N{U)%yEb74Rj_#*?V+1u`ILQO4D9u>6N1&I72j aO=xju5Gxq}{6oN5=OXWa&A&{SlY!s+F<)B% literal 0 HcmV?d00001 diff --git a/src/.DS_Store b/src/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..741d247050cb2a98e8431d57e0990df3ccce77eb GIT binary patch literal 6148 zcmeHKF;2rk5Znb9mS|E^-V;cb)oZC04c_i2)%2*#a}3qXsMXlJrY}3lnBAD zbT^xu+gp3A+}??Z&L3A(k%@?uXhfwmVjLc&4)SD@$~D$E)5TTWY(^IOtwVhFLK?Z0 zJGmb||M^LuYudVAuG=NX%JlX$d!0R>4*Au${N}c&jaCRn-mP5AgKUR+l{t1?Kkv(X zFK>=*+I`+JevsF`GgF6!0--=C5DNTb1yHkT<&k6bp+G1Q3hWf%{*cg!RmRTIwhnZ5 z1ppQpHiOT*1Y=UhDr4se2Bsbg^ia)L49!PW^>FZ2p5HloxTs~uIyv*_=ih4cf$IAhQG|{C4WCXyigz%_=5^)Q7`H_UM$zvFR#d2o6s)MXq?y4 pfx)*@475^=AKXWdjdVWI2VZ6E9Jva|EgTpJ0TU#;P~Zm?_yCPLMs)xH literal 0 HcmV?d00001 diff --git a/src/main/java/com/bezkoder/springjwt/controllers/AuthController.java b/src/main/java/com/bezkoder/springjwt/controllers/AuthController.java index e598702..f6b5bff 100644 --- a/src/main/java/com/bezkoder/springjwt/controllers/AuthController.java +++ b/src/main/java/com/bezkoder/springjwt/controllers/AuthController.java @@ -32,7 +32,7 @@ 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/bezkoder/springjwt/models/User.java b/src/main/java/com/bezkoder/springjwt/models/User.java index 6e3eaa2..3e297e8 100644 --- a/src/main/java/com/bezkoder/springjwt/models/User.java +++ b/src/main/java/com/bezkoder/springjwt/models/User.java @@ -9,81 +9,138 @@ import javax.validation.constraints.Size; @Entity -@Table( name = "users", - uniqueConstraints = { - @UniqueConstraint(columnNames = "username"), - @UniqueConstraint(columnNames = "email") - }) +@Table(name = "user") 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() { - } + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String username; + + private String nom; + + private String nickname; + + private String server; + + //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_4fun; + + 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 + + private String password; + + - public User(String username, String email, String password) { + @Transient + private String passwordConfirm; + + + public User() {} + + + public User(String nom, String username, String password) { + this.nom = nom; this.username = username; - this.email = email; this.password = password; } - public Long getId() { - return id; - } - public void setId(Long id) { - this.id = id; - } + @ManyToMany + private Set roles; - public String getUsername() { - return username; - } + public Long getId() { + return id; + } - public void setUsername(String username) { - this.username = username; - } + 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() { + return username; + } - public String getPassword() { - return password; - } + public void setUsername(String username) { + this.username = username; + } - public void setPassword(String password) { - this.password = password; - } + public String getNickname() { + return nickname; + } - public Set getRoles() { - return roles; - } + public void setNickname(String nickname) { + this.nickname = nickname; + } - public void setRoles(Set roles) { - this.roles = roles; - } + 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 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/bezkoder/springjwt/payload/request/SignupRequest.java b/src/main/java/com/bezkoder/springjwt/payload/request/SignupRequest.java index 515e0a5..069fcbb 100644 --- a/src/main/java/com/bezkoder/springjwt/payload/request/SignupRequest.java +++ b/src/main/java/com/bezkoder/springjwt/payload/request/SignupRequest.java @@ -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/bezkoder/springjwt/payload/response/JwtResponse.java index 35ae5a4..27676c0 100644 --- a/src/main/java/com/bezkoder/springjwt/payload/response/JwtResponse.java +++ b/src/main/java/com/bezkoder/springjwt/payload/response/JwtResponse.java @@ -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/repository/UserRepository.java b/src/main/java/com/bezkoder/springjwt/repository/UserRepository.java index 74f2df9..0e4b8e4 100644 --- a/src/main/java/com/bezkoder/springjwt/repository/UserRepository.java +++ b/src/main/java/com/bezkoder/springjwt/repository/UserRepository.java @@ -11,7 +11,7 @@ public interface UserRepository extends JpaRepository { Optional findByUsername(String username); - Boolean existsByUsername(String username); + Boolean existsByNom(String username); - Boolean existsByEmail(String email); + Boolean existsByUsername(String username); } diff --git a/src/main/java/com/bezkoder/springjwt/security/WebSecurityConfig.java b/src/main/java/com/bezkoder/springjwt/security/WebSecurityConfig.java index 405cf6b..7a58b39 100644 --- a/src/main/java/com/bezkoder/springjwt/security/WebSecurityConfig.java +++ b/src/main/java/com/bezkoder/springjwt/security/WebSecurityConfig.java @@ -3,6 +3,7 @@ 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; @@ -51,7 +52,7 @@ public AuthenticationManager authenticationManagerBean() throws Exception { public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } - + @Override protected void configure(HttpSecurity http) throws Exception { http.cors().and().csrf().disable() @@ -62,5 +63,8 @@ protected void configure(HttpSecurity http) throws Exception { .anyRequest().authenticated(); http.addFilterBefore(authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class); + + + } } diff --git a/src/main/java/com/bezkoder/springjwt/security/services/UserDetailsImpl.java b/src/main/java/com/bezkoder/springjwt/security/services/UserDetailsImpl.java index fafc5a9..36b517c 100644 --- a/src/main/java/com/bezkoder/springjwt/security/services/UserDetailsImpl.java +++ b/src/main/java/com/bezkoder/springjwt/security/services/UserDetailsImpl.java @@ -26,11 +26,10 @@ public class UserDetailsImpl implements UserDetails { private Collection authorities; - public UserDetailsImpl(Long id, String username, String email, String password, + public UserDetailsImpl(Long id, String username, String password, Collection 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/bezkoder/springjwt/security/services/UserDetailsServiceImpl.java index 9a3ed41..41d5a0d 100644 --- a/src/main/java/com/bezkoder/springjwt/security/services/UserDetailsServiceImpl.java +++ b/src/main/java/com/bezkoder/springjwt/security/services/UserDetailsServiceImpl.java @@ -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/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 From cef3434a958a9ada6a1e67da85fd0740fbeae3d2 Mon Sep 17 00:00:00 2001 From: Marcus Fifth Date: Mon, 14 Jun 2021 19:24:59 +0200 Subject: [PATCH 02/20] first commit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1e099d4..77f944f 100644 --- a/README.md +++ b/README.md @@ -132,3 +132,4 @@ INSERT INTO roles(name) VALUES('ROLE_USER'); INSERT INTO roles(name) VALUES('ROLE_MODERATOR'); INSERT INTO roles(name) VALUES('ROLE_ADMIN'); ``` +# backend-matcher From c2c7bbf95d7bf341f8ecb19b4bf6cd6bc0d4942a Mon Sep 17 00:00:00 2001 From: Marcus Fifth Date: Mon, 14 Jun 2021 19:28:50 +0200 Subject: [PATCH 03/20] first commit --- .DS_Store | Bin 8196 -> 8196 bytes src/.DS_Store | Bin 6148 -> 6148 bytes src/main/.DS_Store | Bin 0 -> 6148 bytes src/main/java/.DS_Store | Bin 0 -> 6148 bytes src/main/java/com/.DS_Store | Bin 0 -> 6148 bytes src/main/java/com/spring/.DS_Store | Bin 0 -> 6148 bytes src/main/java/com/spring/data/.DS_Store | Bin 0 -> 8196 bytes .../SpringBootSecurityJwtApplication.java | 2 +- .../data}/controllers/AuthController.java | 26 +-- .../data/controllers/MatchController.java | 53 ++++++ .../data}/controllers/TestController.java | 2 +- .../data/controllers/UserController.java | 160 ++++++++++++++++++ .../data}/models/ERole.java | 2 +- .../java/com/spring/data/models/Match.java | 77 +++++++++ .../data}/models/Role.java | 2 +- .../data}/models/User.java | 137 ++++++++++++++- .../data}/payload/request/LoginRequest.java | 2 +- .../data}/payload/request/SignupRequest.java | 2 +- .../data}/payload/response/JwtResponse.java | 2 +- .../payload/response/MessageResponse.java | 2 +- .../data/repository/MatchRepository.java | 21 +++ .../data}/repository/RoleRepository.java | 8 +- .../data}/repository/UserRepository.java | 10 +- .../data}/security/WebSecurityConfig.java | 10 +- .../data}/security/jwt/AuthEntryPointJwt.java | 2 +- .../data}/security/jwt/AuthTokenFilter.java | 6 +- .../data}/security/jwt/JwtUtils.java | 5 +- .../security/services/UserDetailsImpl.java | 4 +- .../services/UserDetailsServiceImpl.java | 8 +- 29 files changed, 497 insertions(+), 46 deletions(-) create mode 100644 src/main/.DS_Store create mode 100644 src/main/java/.DS_Store create mode 100644 src/main/java/com/.DS_Store create mode 100644 src/main/java/com/spring/.DS_Store create mode 100644 src/main/java/com/spring/data/.DS_Store rename src/main/java/com/{bezkoder/springjwt => spring/data}/SpringBootSecurityJwtApplication.java (90%) rename src/main/java/com/{bezkoder/springjwt => spring/data}/controllers/AuthController.java (85%) create mode 100644 src/main/java/com/spring/data/controllers/MatchController.java rename src/main/java/com/{bezkoder/springjwt => spring/data}/controllers/TestController.java (95%) create mode 100644 src/main/java/com/spring/data/controllers/UserController.java rename src/main/java/com/{bezkoder/springjwt => spring/data}/models/ERole.java (64%) create mode 100644 src/main/java/com/spring/data/models/Match.java rename src/main/java/com/{bezkoder/springjwt => spring/data}/models/Role.java (92%) rename src/main/java/com/{bezkoder/springjwt => spring/data}/models/User.java (50%) rename src/main/java/com/{bezkoder/springjwt => spring/data}/payload/request/LoginRequest.java (89%) rename src/main/java/com/{bezkoder/springjwt => spring/data}/payload/request/SignupRequest.java (95%) rename src/main/java/com/{bezkoder/springjwt => spring/data}/payload/response/JwtResponse.java (95%) rename src/main/java/com/{bezkoder/springjwt => spring/data}/payload/response/MessageResponse.java (84%) create mode 100644 src/main/java/com/spring/data/repository/MatchRepository.java rename src/main/java/com/{bezkoder/springjwt => spring/data}/repository/RoleRepository.java (67%) rename src/main/java/com/{bezkoder/springjwt => spring/data}/repository/UserRepository.java (56%) rename src/main/java/com/{bezkoder/springjwt => spring/data}/security/WebSecurityConfig.java (91%) rename src/main/java/com/{bezkoder/springjwt => spring/data}/security/jwt/AuthEntryPointJwt.java (95%) rename src/main/java/com/{bezkoder/springjwt => spring/data}/security/jwt/AuthTokenFilter.java (94%) rename src/main/java/com/{bezkoder/springjwt => spring/data}/security/jwt/JwtUtils.java (94%) rename src/main/java/com/{bezkoder/springjwt => spring/data}/security/services/UserDetailsImpl.java (95%) rename src/main/java/com/{bezkoder/springjwt => spring/data}/security/services/UserDetailsServiceImpl.java (84%) diff --git a/.DS_Store b/.DS_Store index aa2e33702b3119cccbfced3af3e0861fbbfc801a..634cdd78db457f9c87b513c776e313f3123556de 100644 GIT binary patch delta 760 zcmZp1XmOa}&nUk!U^hRb{A3;hNk?XbZUzPh76v_rbcRfZlH7b3m!zEhB%l~a%1Obk zkF5_oqROYB$xlub2x3!bWvahpJ$avi6pVRKAdM~0F0&md>LsWGWo|AJ+`&|zR9;*F zwc}(`K~83IiGjg&MkZz!RyKAH4lWKZUar{SjQsN8lEjkIVyDESXb>+Tu_Pl2$_~lT z&w;ZOlfp7n%i{$^ob&Ta5;OBsi@=&QQ&NFSV!|`?Qu524@=Nnlioxat*F$7DI5;^t z;{_zDtBoxTbQDZXEo*fYsx6H`Y-6+9T22meRYP0Pgxt!i>YCcRnZQs00!Bs%&A<<( zVbm-jgPEb2p@<#bO#c=P>s3yh`_~^EyzGJ zmZidYBie5U!2mq$4(R%;@ delta 372 zcmZp1XmOa}&nUYwU^hRb>|`DRNk^tzGZ`2dSQzve(it)tN^5X83bR;T$p^U3=Jq+rZ@0%>fwbB;6tMZE-7pv=uBf;*TdbBppu zGE__h8q3U3%uvLTjBM$>XtB!kF;Q%yo}wrZ0|Nsi1A_pAXHI@{QcivnkT0;Ak!d+|JxGd$A(tVM zA(J5wSsEzr2*i5-!2rlYQkPU-TmUuZWKuy+W^svu!F5I^W)@a9b`B0M4lZ7<*x-!( z^5BxhlG0+Q#G+^rFCeibBMHh5$M8XF_geRdr2m-Au3_7#M*80S5da66Adtm^GP)QL>(qcMDJe9wfQ>E-p~7a&V>= z?tN^17!)i>@+o-b3o;CYlk;;6z?LutfGD`$vf!e;ocz3Wpcu$eEDR+KsqzfP3?*ps zupTH0i-*b0jHYb=9hmFySWn)^CB`mu~2NHo}wTJ0|Nsi1A_oVPP$=ma(-^X#KP6GAVC&}T!uu3Oolv| z1W*hJ;teJnvP!TieC#rRXFl1VRSL$;XO(7RbeMdG)l}`-FOcM6N1$>Rh7yKUhGK@2 z-24=mq@4UDpcn^4ezQ8;1IEn?9PBI;8=N+?bMSKjUA0+|<2&j;y9uD?P^mro!mUCH1w@6AToVqxRWgDDty(*d8Y9P>#!jO)r1EdH z2M+uIzktLAzJLQ9koW{X0A_X<%V|T8C_+2Z?wj42S$p1UJzfA{?l5cu)B%8FBeZJR z%@DFvyCM}ma|@Bt8r!jG2eAlnObZ$@3>XIHn*lnz7Q6-@j={flez(we_m>ozMBx{V z(!M_DpM!oJrCFo#g;f@;8;eVv*LdxAZO`k9k(c?|Fm?UGD;n+iSvS!7b0OkF_k$Nv zXS82mc`B03kCM(n21j8BU3OnaNhn6H7$#vV*YT8r^D3|I*Vo45jYo}j`~HK?$+|t> zyhr-R!^xz|SMM~RY#;PaPRDO1XXk1k7=EavENlD&7pN2o#)nO>EqZ-r{Q0$P>xouN zC(n=E@1K4={zya>u{{x9YwveUYgcS~L=k)J4U$+Shd4*?S%m>~AO!(K)Y_z9+M@U9 zRoJ_`Kie7%-=8^eHMU=A3d z?}Lqv(9xJHl%Edli;u5!+*K|PY0QiVZbo(UopU} zme+DIC0$#uBuBN@#&&>>g#2=aG6Xwaj-^7ScnzBrwArK}IvR6@ID=w-1SAcnGYtGw G27UuT+^hHi literal 0 HcmV?d00001 diff --git a/src/main/java/.DS_Store b/src/main/java/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..4858974e0f2fa3c83c1abda080d7eb12511ec6e6 GIT binary patch literal 6148 zcmeHK%}yIJ5Vn)hI6+l&s07Eo^oFVgN>zlAmJklykQUKHi(oe!k(GAWQLnq__#1mXLV#oOBqmN4&4r79Y77!u{;L`aP5ksEwo6s;;Hpp2hZCZBW5DhD;N!Ww8~$DUK|aw zdi|R$6iYKN%1TvL^<{O>>*|r0`Pp#L^!uN%w(V!#fb1Qu<9pi=cB9T{zxH}VrzlZu*q z(^%U&NRE!jCzI1NyAl#UQX{Vj@8BE^nqGX^@Y*`*S=ZIi2T!6~EtE@5ubY#mUTy9{6nnvH;MF8_cIHUPSWxkYFJkv0_2hDv&3NP0U+8xDS#`sWsH zxR7RK$U`GbdZ9>qdPv7~7t*!JB{RSbOfyil)f%4vn}2@)PX}?08DIwfD+Xk#<+YkH zB|2LlO%Bgm2lN0G1^eX|??b>aM=|upqj(< zE1%L6;sdxMap5mu#-3Iz0U`B(P&Ffs-*`M@ub(Y@4FIY?i+cba0MMv}jTRQa5o#x0 zkp_D<5S8sCgVA1U4x`jWE79Wk9~q#vTZaO2m_h>e^`lL35B1u2EB5nivC+K9d96Q2 zd72buxBFQ&)|waAH?(f+_NDfVU~J|=8J4r6A5Nc9?O|AsBeowKlb+gP^duS1_d8ea zo2(3zY&f;aNj$`m=TDO?HuJujWpQEq30#BLE#2DhY%LZ$x4YZkjhnm6ZEvxAo$Q@k z%VkS%UhUo8JD9vWTD)Gqd1t2q3OB5k%Zw-R9*x>0(@`%tG?Ux~9Dn<@ePRX!CPBY_ z^x@OjJI6#?t&fR`{~D8ze;P-9q2X$MybPvUYO)dfPrjXEM1%ohKo~d!1AL6=i)YA{ z6k$LZINuD=`QV`v`izxBdvsu7p8$wWbX!52ej6#rWAqs-huDImTq>eVRs6(IE*{r}+4@Bey|)Pwn${~7Cf zA^C+U{}8E{^b2~-q5Y3`#x^Sw(w0Xf!ag|g#?(t|!0B)R_#;NIn!&s-KW_s0J1LF~ydC2Aq*IBzlg)SF7K7CYyV(mKUNZijRu#ot~UHu^W#^4R`n!d#~KM=NbDz$}qKE?{(0fv`gzR zWfZ$X)E%ni!0*D4cW;8omy?DZNB&6Fadbe4f+)00<>|D(RjpXho^Q`8)^z(R+VvN+ zSwU=U)^=Nm{SP0fpJty=^j>iIqbhl9a1N(nqzep>YEDP?2ReB6b1~MJ&8Atr_;P-A z`D5oR5|!rmrT^FXptn$)U*HsJ?y)nBLKz)_Z~i+mPC^V21H{0J88AnTc(~%aRE`)R z2L62p@O-d95p9EsMs;*Rqn-eOIdCfhTYdTiTIc|@4JI1F1HyGGpibrHiNVdwf$MaL z+h%;CQKvJmW`;UuW^P_6+&nzErG_(ZYowMKAO@~8kk#E1-v9f5e*a%jq8>3o4E$FN z@LbbrHegBSZe3a&-nAC!At(xtOEjh_V5qAY#^P0622}!n3k^WqV4@K`AoL-iXrP7| IxKjpx13uGv?EnA( literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b77da55687f2ceae6b7c469ebaba1773c94ec3f4 GIT binary patch literal 8196 zcmeHMzi-n(6n@v1)=h<|0ErHOJkSMIRZ0O-5F!m>C}OB&1Orr!6Gy2l#~0;CqY?s{ zSlCz)3?0~zkUBFkG4U6$z#qV00pI-~vYi;j(jxUPx_fuN_uk$2z4)Bx5E09_y(OYK zBC=40oSi{4qKJ7>hsv0~au$-oo~S{b0(>gynPM0)3>XFs1BL;^!2ieqp4p;UDbIa1 zYg)sAVcZg*PRqWM(iA>b_Q13$(Lu$qH_vTu_ z%cX#qpdoImRn*0wvY?l0Rq8bB+UiTG9{9~xHv5&0jZYk#oU*Kpl{uc-aJG2IX}PU- zGw(JYiP5^-+A8V(ea?eH-z`1xE1k{R)3CM@>Zg=@wcEP@UWu>=ZcULZn{_@pcZ`wLDzjSl0SlfNlecF5WMgk(H&lWnN z#)I~4I^3YTu5`24(=}_nP|(C!7hb>ezTfyPC`}>1#=U>gu5U$mQ52g=@w?+R z!hnZWXb7~ER72=Jys!x<8Ss6~M*|+yjpIK5BIzrNcH`r{_Zn@?M-*e4P8``fmZ2%C zlS{kUF^BZxUsHB2vFn6(eBU!Chy6u&{^8Tu^KU9n2|v-jr)$M`pTlC5!A({H0!~fx zam#UxcM}+1LNChvNSip4$zGc8D4tW>`#*FfM*57R`kQVXTUKDRfT@DRqzz00TLPCn zLiQp@$dG;<)5Tk(d`9u?RoCC?_zd}qV)>I^97j>$m?sAj5*R|NQXVnlK;y)*(Ov4` z>MAtr_%8au?PBahH>5?{#%PD!cw|Z3Q&9%QYNi+l4uyenwd$P6|L>%~|38$ynMDl) zhJk}&fK3#fLLO`V{{5R=R^-|?Y7tcwq1RVZnxK*CIHXL+AqRgLqHjZ0*yObAD~T&8 U2mc}<@f*cF|79FZbF>)v1#4Y|(*OVf literal 0 HcmV?d00001 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 85% rename from src/main/java/com/bezkoder/springjwt/controllers/AuthController.java rename to src/main/java/com/spring/data/controllers/AuthController.java index f6b5bff..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,18 +32,6 @@ 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 = "*") @RestController @RequestMapping("/api/auth") diff --git a/src/main/java/com/spring/data/controllers/MatchController.java b/src/main/java/com/spring/data/controllers/MatchController.java new file mode 100644 index 0000000..266590c --- /dev/null +++ b/src/main/java/com/spring/data/controllers/MatchController.java @@ -0,0 +1,53 @@ +package com.spring.data.controllers; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +import com.spring.data.models.Match; +import com.spring.data.repository.*; + +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 = "http://localhost:8080") +@RestController +@RequestMapping("/match") +public class MatchController { + + @Autowired + MatchRepository matchRepository; + + @GetMapping("/{id}") + public ResponseEntity getMatchById(@PathVariable("id") long id) { + Optional matchData = matchRepository.findById(id); + + if (matchData.isPresent()) { + return new ResponseEntity<>(matchData.get(), HttpStatus.OK); + } else { + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } + } + + /*@GetMapping("/{user_id_1}/{user_id_2}") + public Match getUserByIdandModo(@PathVariable("user_id_1") long user_id_1, @PathVariable("user_id_2") Long user_id_2) { + return matchRepository.findIsMatch(user_id_1, user_id_2); + } + + @GetMapping("/user/{user_id_1}") + public Match getUserMatches(@PathVariable("user_id_1") long user_id_1) { + return matchRepository.findUserMatches(user_id_1); + }*/ + +} + 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..e02c579 --- /dev/null +++ b/src/main/java/com/spring/data/controllers/UserController.java @@ -0,0 +1,160 @@ +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 = "http://localhost:8080") +@RestController +@RequestMapping("/user") +public class UserController { + + @Autowired + UserRepository userRepository; + + /*@GetMapping("/users") + public ResponseEntity> getAllUsers(@RequestParam(required = false) String nom) { + try { + List users = new ArrayList(); + + if (nom == null) + userRepository.findAll().forEach(users::add); + else + userRepository.findByStringContaining(nom).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.set4fun(user.get4fun()); + _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.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/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/Match.java b/src/main/java/com/spring/data/models/Match.java new file mode 100644 index 0000000..8597ffa --- /dev/null +++ b/src/main/java/com/spring/data/models/Match.java @@ -0,0 +1,77 @@ +package com.spring.data.models; + +import javax.persistence.*; +//import com.codesplai.spring.demo.repositories.MatchesRepository; + + +@Entity +@Table(name ="match") +public class Match { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + @Column(name = "user_id_1") + private Long user_id_1; + + @Column(name = "user_id_2") + private Long user_id_2; + + private Boolean is_match; + + private Boolean is_liked = false; + + public Match() {} + + public Match(Long user_id_1, Long user_id_2) { + this.user_id_1 = user_id_1; + this.user_id_2 = user_id_2; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getUser_Id_1() { + return user_id_1; + } + + public void setUser_Id_1(Long id_user) { + this.user_id_1 = id_user; + } + + public Long getUser_Id_2() { + return user_id_2; + } + + public void setUser_Id_2(Long 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 getIs_Liked() { + return is_liked; + } + + public Boolean setIs_Liked(Boolean is_liked) { + return this.is_liked = is_liked; + } + + @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/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/bezkoder/springjwt/models/User.java b/src/main/java/com/spring/data/models/User.java similarity index 50% rename from src/main/java/com/bezkoder/springjwt/models/User.java rename to src/main/java/com/spring/data/models/User.java index 3e297e8..d58a490 100644 --- a/src/main/java/com/bezkoder/springjwt/models/User.java +++ b/src/main/java/com/spring/data/models/User.java @@ -1,4 +1,4 @@ -package com.bezkoder.springjwt.models; +package com.spring.data.models; import java.util.HashSet; import java.util.Set; @@ -15,14 +15,18 @@ public class User { @GeneratedValue(strategy = GenerationType.IDENTITY) 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; + //Modos ---> Fer una taula que tingui id i el modo (1-4) que vol jugar private Boolean modo_flex; @@ -56,6 +60,7 @@ public class User { // Suposo que faltaria una pels personatges + @Column(name = "password") private String password; @@ -73,6 +78,12 @@ public User(String nom, String username, String password) { 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; @@ -132,6 +143,130 @@ 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; + } + // ---> 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 get4fun() { + return tipo_4fun; + } + + public void set4fun(Boolean tipo_4fun) { + this.tipo_4fun = tipo_4fun; + } + + 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; } 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 95% 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 069fcbb..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; 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 95% 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 27676c0..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; 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/MatchRepository.java b/src/main/java/com/spring/data/repository/MatchRepository.java new file mode 100644 index 0000000..0afeba7 --- /dev/null +++ b/src/main/java/com/spring/data/repository/MatchRepository.java @@ -0,0 +1,21 @@ +package com.spring.data.repository; + +import com.spring.data.models.Match; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +@Repository +public interface MatchRepository extends JpaRepository { + + /*@Query(value = "SELECT * FROM Match m WHERE m.user_id_1 = ?1 AND m.user_id_2 = ?2", nativeQuery = true) + Match findIsMatch(Long user_id_1, Long user_id_2); + + @Query(value = "SELECT * FROM Match m WHERE m.user_id_1 = ?1 OR m.user_id_2 = ?1", nativeQuery = true) + Match findUserMatches(Long user_id_1);*/ + +} + + + 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 56% rename from src/main/java/com/bezkoder/springjwt/repository/UserRepository.java rename to src/main/java/com/spring/data/repository/UserRepository.java index 0e4b8e4..7b926f3 100644 --- a/src/main/java/com/bezkoder/springjwt/repository/UserRepository.java +++ b/src/main/java/com/spring/data/repository/UserRepository.java @@ -1,12 +1,13 @@ -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); @@ -14,4 +15,7 @@ public interface UserRepository extends JpaRepository { Boolean existsByNom(String username); Boolean existsByUsername(String username); + + @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/bezkoder/springjwt/security/WebSecurityConfig.java b/src/main/java/com/spring/data/security/WebSecurityConfig.java similarity index 91% rename from src/main/java/com/bezkoder/springjwt/security/WebSecurityConfig.java rename to src/main/java/com/spring/data/security/WebSecurityConfig.java index 7a58b39..ee941ae 100644 --- a/src/main/java/com/bezkoder/springjwt/security/WebSecurityConfig.java +++ b/src/main/java/com/spring/data/security/WebSecurityConfig.java @@ -1,4 +1,8 @@ -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; @@ -15,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( 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 95% 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 36b517c..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; 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 84% 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 41d5a0d..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 From a04a27195785878a9aa562add3e9b0412bccb939 Mon Sep 17 00:00:00 2001 From: Marcus Fifth Date: Thu, 17 Jun 2021 15:23:35 +0200 Subject: [PATCH 04/20] user controller --- .DS_Store | Bin 8196 -> 8196 bytes src/.DS_Store | Bin 6148 -> 6148 bytes src/main/.DS_Store | Bin 6148 -> 6148 bytes src/main/java/.DS_Store | Bin 6148 -> 6148 bytes src/main/java/com/.DS_Store | Bin 6148 -> 6148 bytes src/main/java/com/spring/.DS_Store | Bin 6148 -> 6148 bytes src/main/java/com/spring/data/.DS_Store | Bin 8196 -> 8196 bytes .../data/controllers/MatchController.java | 53 -------- .../data/controllers/MatchesController.java | 120 ++++++++++++++++++ .../data/controllers/UserController.java | 15 ++- .../data/models/{Match.java => Matches.java} | 21 +-- .../java/com/spring/data/models/User.java | 14 +- .../java/com/spring/data/payload/.DS_Store | Bin 0 -> 6148 bytes .../data/repository/MatchRepository.java | 21 --- .../data/repository/MatchesRepository.java | 39 ++++++ .../java/com/spring/data/security/.DS_Store | Bin 0 -> 6148 bytes 16 files changed, 192 insertions(+), 91 deletions(-) delete mode 100644 src/main/java/com/spring/data/controllers/MatchController.java create mode 100644 src/main/java/com/spring/data/controllers/MatchesController.java rename src/main/java/com/spring/data/models/{Match.java => Matches.java} (70%) create mode 100644 src/main/java/com/spring/data/payload/.DS_Store delete mode 100644 src/main/java/com/spring/data/repository/MatchRepository.java create mode 100644 src/main/java/com/spring/data/repository/MatchesRepository.java create mode 100644 src/main/java/com/spring/data/security/.DS_Store diff --git a/.DS_Store b/.DS_Store index 634cdd78db457f9c87b513c776e313f3123556de..e5fef6866a00c7b7c8d3b1d0a80592afa744dbf3 100644 GIT binary patch delta 136 zcmZp1XmQw}CJ@`>!oa}5!l1{H&XCDalAG`1l9ZF51Qg@A{8MD*6YIl{sPZXz)IVrgHvGrj`RQVLV@&y@& o!O8i#1wcIv46F>Bn+2w^FsVyTmKNQ{l=W%zWl=YF6s{o?0FZJeBLDyZ diff --git a/src/.DS_Store b/src/.DS_Store index 4cfb949507f5f281ae8e924808d3184482e98c80..34c2b1a9409e36384625fba045cb5aef4676598c 100644 GIT binary patch delta 15 WcmZoMXffEJ&&tGqZ?hrmWg!44sRarE delta 15 WcmZoMXffEJ&&tHRWwRmcWg!43p9J0j diff --git a/src/main/.DS_Store b/src/main/.DS_Store index a96994ce3268063bc3bd15f8de7b873e1a6a610f..8ea1cf3ad669dc56bc36c066fea6dd6730f8c37d 100644 GIT binary patch delta 15 WcmZoMXffEJ&&u>oYO^8hWg!46Vg)S# delta 15 WcmZoMXffEJ&&u@q_GUxY%R&Gy(*^4Q diff --git a/src/main/java/.DS_Store b/src/main/java/.DS_Store index 4858974e0f2fa3c83c1abda080d7eb12511ec6e6..10c64d9860bbec3ba26f654a759eb8f0836f62cb 100644 GIT binary patch delta 15 WcmZoMXffEJ$;@<5Y_m4=O%VVoL7&1P-pn<4-%GX>lL diff --git a/src/main/java/com/.DS_Store b/src/main/java/com/.DS_Store index b1cbe01cbf0ef39b6677c33f3314766cee27705d..20071a0b0d00ae0bdec1fdcf4487bcc179cbdd0e 100644 GIT binary patch delta 15 WcmZoMXffDe&CGO6XtOQzaS;G1Tm=6B delta 15 WcmZoMXffDe&CGQ8#b#UP<01eqO9j#Z diff --git a/src/main/java/com/spring/.DS_Store b/src/main/java/com/spring/.DS_Store index a94476876e33b1a90341fb951574ac84dcffe1b7..084ac8e38cd37268d03ea2a2d77b336c666464a1 100644 GIT binary patch delta 15 WcmZoMXffEJ&&;%rZ?hruWf1@<3 getMatchById(@PathVariable("id") long id) { - Optional matchData = matchRepository.findById(id); - - if (matchData.isPresent()) { - return new ResponseEntity<>(matchData.get(), HttpStatus.OK); - } else { - return new ResponseEntity<>(HttpStatus.NOT_FOUND); - } - } - - /*@GetMapping("/{user_id_1}/{user_id_2}") - public Match getUserByIdandModo(@PathVariable("user_id_1") long user_id_1, @PathVariable("user_id_2") Long user_id_2) { - return matchRepository.findIsMatch(user_id_1, user_id_2); - } - - @GetMapping("/user/{user_id_1}") - public Match getUserMatches(@PathVariable("user_id_1") long user_id_1) { - return matchRepository.findUserMatches(user_id_1); - }*/ - -} - 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..ab3cafc --- /dev/null +++ b/src/main/java/com/spring/data/controllers/MatchesController.java @@ -0,0 +1,120 @@ +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.repository.*; + +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("/match") +public class MatchesController { + + @Autowired + MatchesRepository matchesRepository; + + + /* RETORNI TOTS ELS USERS QUE NO HA FET MATCH + @GetMapping("/all/{user_id_1}") + public ResponseEntity> getAllUsers(@PathVariable("user_id_1") long user_id_1) { + try { + List matches = new ArrayList(); + + + matchesRepository.findUserNotMatches(user_id_1).forEach(); + /*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); + } + }*/ + + + + + /*//Potser fent un bool aqui i posarho a mirar si es match + @PostMapping("/like/{user_id_1}/{user_id_}") + public ResponseEntity userlike(@PathVariable("user_id_1") long user_id_1, @PathVariable("user_id_1") long user_id_2) { + if (matchesRepository.alreadyLiked(user_id_1, user_id_2)) { + + } + }*/ + + + //Retorna taula matches del user id_1, id_2 + @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.setIs_Liked(matches.getIs_Liked()); + 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); + } + } + + @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); + } + + @GetMapping("/user/{user_id_1}") + public List getUserMatches(@PathVariable("user_id_1") long user_id_1) { + + return matchesRepository.findUserMatches(user_id_1); + } + + + +} + diff --git a/src/main/java/com/spring/data/controllers/UserController.java b/src/main/java/com/spring/data/controllers/UserController.java index e02c579..c84da6a 100644 --- a/src/main/java/com/spring/data/controllers/UserController.java +++ b/src/main/java/com/spring/data/controllers/UserController.java @@ -22,7 +22,7 @@ import org.springframework.web.bind.annotation.RestController; -@CrossOrigin(origins = "http://localhost:8080") +@CrossOrigin(origins = "*") @RestController @RequestMapping("/user") public class UserController { @@ -30,15 +30,15 @@ public class UserController { @Autowired UserRepository userRepository; - /*@GetMapping("/users") - public ResponseEntity> getAllUsers(@RequestParam(required = false) String nom) { + @GetMapping("/all") + public ResponseEntity> getAllUsers(@RequestParam(required = false) String username) { try { List users = new ArrayList(); - if (nom == null) + //if (username == null) userRepository.findAll().forEach(users::add); - else - userRepository.findByStringContaining(nom).forEach(users::add); + //else + // userRepository.findByStringContaining(username).forEach(users::add); if (users.isEmpty()) { return new ResponseEntity<>(HttpStatus.NO_CONTENT); @@ -48,7 +48,7 @@ public ResponseEntity> getAllUsers(@RequestParam(required = false) St } catch (Exception e) { return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR); } - }*/ + } @GetMapping("/{id}") public ResponseEntity getUserById(@PathVariable("id") long id) { @@ -115,6 +115,7 @@ public ResponseEntity updateUser(@PathVariable("id") long id, @RequestBody _user.setUsername(user.getUsername()); _user.setServer(user.getServer()); _user.setRolPred(user.getRolPred()); + _user.setImg(user.getImg()); _user.setPassword(user.getPassword()); return new ResponseEntity<>(userRepository.save(_user), HttpStatus.OK); } else { diff --git a/src/main/java/com/spring/data/models/Match.java b/src/main/java/com/spring/data/models/Matches.java similarity index 70% rename from src/main/java/com/spring/data/models/Match.java rename to src/main/java/com/spring/data/models/Matches.java index 8597ffa..1d2279c 100644 --- a/src/main/java/com/spring/data/models/Match.java +++ b/src/main/java/com/spring/data/models/Matches.java @@ -5,25 +5,30 @@ @Entity -@Table(name ="match") -public class Match { +@Table(name ="matches") +public class Matches { @Id - @GeneratedValue(strategy = GenerationType.AUTO) + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @Column(name = "user_id_1") + //@Column(name = "user_id_1") + //@OneToOne(cascade = CascadeType.ALL) + //@JoinColumn(name = "user_id_1", referencedColumnName = "id") private Long user_id_1; - @Column(name = "user_id_2") + //@OneToOne(cascade = CascadeType.ALL) + //@JoinColumn(name = "user_id_2", referencedColumnName = "id") private Long user_id_2; + @Column(name = "is_match") private Boolean is_match; - private Boolean is_liked = false; + @Column(name = "is_liked") + private Boolean is_liked; - public Match() {} + public Matches() {} - public Match(Long user_id_1, Long user_id_2) { + public Matches(Long user_id_1, Long user_id_2) { this.user_id_1 = user_id_1; this.user_id_2 = user_id_2; } diff --git a/src/main/java/com/spring/data/models/User.java b/src/main/java/com/spring/data/models/User.java index d58a490..3a8c244 100644 --- a/src/main/java/com/spring/data/models/User.java +++ b/src/main/java/com/spring/data/models/User.java @@ -12,12 +12,12 @@ @Table(name = "user") public class User { @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) + @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @Column(name = "username") private String username; - + @Column(name = "nom") private String nom; @@ -27,6 +27,8 @@ public class User { private String rol_pred; + private String img; + //Modos ---> Fer una taula que tingui id i el modo (1-4) que vol jugar private Boolean modo_flex; @@ -150,6 +152,14 @@ public String getRolPred() { public void setRolPred(String rol_pred) { this.rol_pred = rol_pred; } + + public String getImg() { + return img; + } + + public void setImg(String img) { + this.img = img; + } // ---> MODOS public Boolean getFlex() { return modo_flex; 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 0000000000000000000000000000000000000000..6f3ebb9f2bd547121f11ab4c854e30199d10e03c GIT binary patch literal 6148 zcmeHKu};H447E!uf>=5--Y=Au<*34nkop6tG=iZafl|bn?_lIt_zgaW=d&BA5)e~` zDqHfsi_g9|FQ+&rBA%`n6QVH@Wl+Jv5r!U-b^eBSitd4ho~Vt_=%vr+drr@nZBCuN%IYht-~4*=lH6RJ0cXG&*arqsvqiFFMIW63 zXTTX~8IbQofC@&#MlpRlFr*d$ID|O~=F&?@OfZawjUrYctf4>+Wot25!(k8R7Y!Rl z4JWqdgYC|29SWzrWB-uciKC*A&VVzp&A@?Pj-~!z{M`R<2l { - - /*@Query(value = "SELECT * FROM Match m WHERE m.user_id_1 = ?1 AND m.user_id_2 = ?2", nativeQuery = true) - Match findIsMatch(Long user_id_1, Long user_id_2); - - @Query(value = "SELECT * FROM Match m WHERE m.user_id_1 = ?1 OR m.user_id_2 = ?1", nativeQuery = true) - Match findUserMatches(Long user_id_1);*/ - -} - - - 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..ee7bbe3 --- /dev/null +++ b/src/main/java/com/spring/data/repository/MatchesRepository.java @@ -0,0 +1,39 @@ +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.Query; +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 * 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) + Boolean alreadyLiked(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); + + //OR m.user_id_1 = ?2 AND m.user_id_2 = ?1 + +} + + + 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 0000000000000000000000000000000000000000..22b7434ea2271ad665bc390860f7568ab2f9a288 GIT binary patch literal 6148 zcmeHKOHRW;47Hmqf?!dJ1uW+Xbj@a{!XBv?Ky48ewMs?#EXe`50utgXT!X{#Jhs|I zDP1B2w&Zyee`Y2xQ5+Ky4 Date: Thu, 17 Jun 2021 16:39:52 +0200 Subject: [PATCH 05/20] act user --- .../data/controllers/MatchesController.java | 41 +++++++++++++++---- .../data/controllers/UserController.java | 1 + .../java/com/spring/data/models/User.java | 13 ++++++ .../data/repository/MatchesRepository.java | 11 ++++- 4 files changed, 58 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/spring/data/controllers/MatchesController.java b/src/main/java/com/spring/data/controllers/MatchesController.java index ab3cafc..c843102 100644 --- a/src/main/java/com/spring/data/controllers/MatchesController.java +++ b/src/main/java/com/spring/data/controllers/MatchesController.java @@ -55,16 +55,43 @@ public ResponseEntity> getAllUsers(@PathVariable("user_id_1") long - /*//Potser fent un bool aqui i posarho a mirar si es match - @PostMapping("/like/{user_id_1}/{user_id_}") - public ResponseEntity userlike(@PathVariable("user_id_1") long user_id_1, @PathVariable("user_id_1") long user_id_2) { - if (matchesRepository.alreadyLiked(user_id_1, user_id_2)) { + //Mirar si fa match + /*@PostMapping("/{user_id_1}/{user_id_}") + public Boolean isMatch(@PathVariable("user_id_1") long user_id_1, @PathVariable("user_id_1") long user_id_2, @RequestParam Boolean liked_2) { + Optional matchData = matchesRepository.findTableByUsers(user_id_1, user_id_2); + if (matchData.isPresent()) { + if (matchesRepository.alreadyLiked(user_id_1, user_id_2) && liked_2 == true){ + Matches _matches = matchData.get(); + _matches.setIs_Liked(matches.getIs_Liked()); + getTableId(user_id_1, user_id_2); + } + - } - }*/ + */ - //Retorna taula matches del user id_1, id_2 + + + + //Retorna Id de la taula + @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("/getTableId/{user_id_1}/{user_id_2}") //Funcio auxiliar cridada a isMatch + 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 se si funciona @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); diff --git a/src/main/java/com/spring/data/controllers/UserController.java b/src/main/java/com/spring/data/controllers/UserController.java index c84da6a..0cf0709 100644 --- a/src/main/java/com/spring/data/controllers/UserController.java +++ b/src/main/java/com/spring/data/controllers/UserController.java @@ -115,6 +115,7 @@ public ResponseEntity updateUser(@PathVariable("id") long id, @RequestBody _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); diff --git a/src/main/java/com/spring/data/models/User.java b/src/main/java/com/spring/data/models/User.java index 3a8c244..554fca2 100644 --- a/src/main/java/com/spring/data/models/User.java +++ b/src/main/java/com/spring/data/models/User.java @@ -29,6 +29,8 @@ public class User { 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; @@ -160,6 +162,17 @@ public String getImg() { 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; diff --git a/src/main/java/com/spring/data/repository/MatchesRepository.java b/src/main/java/com/spring/data/repository/MatchesRepository.java index ee7bbe3..a0e48fe 100644 --- a/src/main/java/com/spring/data/repository/MatchesRepository.java +++ b/src/main/java/com/spring/data/repository/MatchesRepository.java @@ -24,13 +24,22 @@ public interface MatchesRepository extends JpaRepository { @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 * 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) + @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 AND m.liked_1 = 1", nativeQuery = true) Boolean 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.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); + //OR m.user_id_1 = ?2 AND m.user_id_2 = ?1 } From cf1568602662a0b87741a02933fab9c59aa4b388 Mon Sep 17 00:00:00 2001 From: Marcus Fifth Date: Thu, 17 Jun 2021 19:51:27 +0200 Subject: [PATCH 06/20] user swipes --- .../data/controllers/MatchesController.java | 102 ++++++++++++++---- .../data/controllers/UserController.java | 2 +- .../java/com/spring/data/models/Matches.java | 23 ++-- .../java/com/spring/data/models/User.java | 10 +- .../data/repository/MatchesRepository.java | 16 ++- 5 files changed, 120 insertions(+), 33 deletions(-) diff --git a/src/main/java/com/spring/data/controllers/MatchesController.java b/src/main/java/com/spring/data/controllers/MatchesController.java index c843102..94c3c8a 100644 --- a/src/main/java/com/spring/data/controllers/MatchesController.java +++ b/src/main/java/com/spring/data/controllers/MatchesController.java @@ -53,33 +53,97 @@ public ResponseEntity> getAllUsers(@PathVariable("user_id_1") long }*/ + //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] - //Mirar si fa match - /*@PostMapping("/{user_id_1}/{user_id_}") - public Boolean isMatch(@PathVariable("user_id_1") long user_id_1, @PathVariable("user_id_1") long user_id_2, @RequestParam Boolean liked_2) { - Optional matchData = matchesRepository.findTableByUsers(user_id_1, user_id_2); - if (matchData.isPresent()) { - if (matchesRepository.alreadyLiked(user_id_1, user_id_2) && liked_2 == true){ - Matches _matches = matchData.get(); - _matches.setIs_Liked(matches.getIs_Liked()); - getTableId(user_id_1, user_id_2); - } - - - */ + //@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 { + //_matches.setLiked_2(false); + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } + + } + 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 + + //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("/getTableId/{user_id_1}/{user_id_2}") //Funcio auxiliar cridada a isMatch + @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()) { @@ -91,8 +155,8 @@ public ResponseEntity getTable(@PathVariable("user_id_1") long user_id_ } - //Retorna taula matches del user id_1, id_2 --> No se si funciona - @GetMapping("/getTable/{user_id_1}/{user_id_2}") + //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); @@ -110,7 +174,7 @@ public ResponseEntity updateMatch(@PathVariable("user_id_1") long user_ if (matchData.isPresent()) { Matches _matches = matchData.get(); - _matches.setIs_Liked(matches.getIs_Liked()); + _matches.setLiked_2(matches.getLiked_2()); return new ResponseEntity<>(matchesRepository.save(_matches), HttpStatus.OK); } else { return new ResponseEntity<>(HttpStatus.NOT_FOUND); @@ -130,11 +194,13 @@ public ResponseEntity getMatchById(@PathVariable("id") long id) { } } + //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) { diff --git a/src/main/java/com/spring/data/controllers/UserController.java b/src/main/java/com/spring/data/controllers/UserController.java index 0cf0709..44ab4f7 100644 --- a/src/main/java/com/spring/data/controllers/UserController.java +++ b/src/main/java/com/spring/data/controllers/UserController.java @@ -88,7 +88,7 @@ public ResponseEntity updateModo(@PathVariable("id") long id, @RequestBody _user.setDuo(user.getDuo()); _user.setClash(user.getClash()); _user.setOtro(user.getOtro()); - _user.set4fun(user.get4fun()); + _user.setforfun(user.getForFun()); _user.setChamps(user.getChamps()); _user.setOtps(user.getOtps()); _user.setTryHard(user.getTryHard()); diff --git a/src/main/java/com/spring/data/models/Matches.java b/src/main/java/com/spring/data/models/Matches.java index 1d2279c..e279dc2 100644 --- a/src/main/java/com/spring/data/models/Matches.java +++ b/src/main/java/com/spring/data/models/Matches.java @@ -23,8 +23,11 @@ public class Matches { @Column(name = "is_match") private Boolean is_match; - @Column(name = "is_liked") - private Boolean is_liked; + @Column(name = "liked_1") + private Boolean liked_1; + + @Column(name = "liked_2") + private Boolean liked_2; public Matches() {} @@ -65,12 +68,20 @@ public Boolean setIs_Match(Boolean is_match) { return this.is_match = is_match; } - public Boolean getIs_Liked() { - return is_liked; + 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 setIs_Liked(Boolean is_liked) { - return this.is_liked = is_liked; + public Boolean setLiked_2(Boolean liked_2) { + return this.liked_2 = liked_2; } @Override diff --git a/src/main/java/com/spring/data/models/User.java b/src/main/java/com/spring/data/models/User.java index 554fca2..05fa944 100644 --- a/src/main/java/com/spring/data/models/User.java +++ b/src/main/java/com/spring/data/models/User.java @@ -41,7 +41,7 @@ public class User { private Boolean modo_otro; //Tipos ---> Fer una taula que tingui id i el modo (1-5) que vol jugar - private Boolean tipo_4fun; + private Boolean tipo_ForFun; private Boolean tipo_tryhard; @@ -207,12 +207,12 @@ public void setOtro(Boolean modo_otro) { } // ---> TIPOS - public Boolean get4fun() { - return tipo_4fun; + public Boolean getForFun() { + return tipo_ForFun; } - public void set4fun(Boolean tipo_4fun) { - this.tipo_4fun = tipo_4fun; + public void setforfun(Boolean tipo_ForFun) { + this.tipo_ForFun = tipo_ForFun; } public Boolean getChamps() { diff --git a/src/main/java/com/spring/data/repository/MatchesRepository.java b/src/main/java/com/spring/data/repository/MatchesRepository.java index a0e48fe..a0f1b0b 100644 --- a/src/main/java/com/spring/data/repository/MatchesRepository.java +++ b/src/main/java/com/spring/data/repository/MatchesRepository.java @@ -7,7 +7,9 @@ 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 @@ -24,8 +26,8 @@ public interface MatchesRepository extends JpaRepository { @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 * 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) - Boolean alreadyLiked(Long user_id_1, Long user_id_2); + @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); @@ -40,9 +42,17 @@ public interface MatchesRepository extends JpaRepository { @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); - //OR m.user_id_1 = ?2 AND m.user_id_2 = ?1 + 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 From 4e83457828f725bb51bf5706167711cfa14a85d3 Mon Sep 17 00:00:00 2001 From: Marcus Fifth Date: Fri, 18 Jun 2021 13:09:04 +0200 Subject: [PATCH 07/20] act user i reportes --- .../data/controllers/MatchesController.java | 86 ++++++++++++++++- .../data/controllers/ReportesController.java | 77 +++++++++++++++ .../data/controllers/UserController.java | 33 +++++++ .../java/com/spring/data/models/Matches.java | 15 +-- .../java/com/spring/data/models/Reportes.java | 94 +++++++++++++++++++ .../data/repository/MatchesRepository.java | 3 + .../data/repository/ReportesRepository.java | 11 +++ .../data/security/WebSecurityConfig.java | 3 + 8 files changed, 311 insertions(+), 11 deletions(-) create mode 100644 src/main/java/com/spring/data/controllers/ReportesController.java create mode 100644 src/main/java/com/spring/data/models/Reportes.java create mode 100644 src/main/java/com/spring/data/repository/ReportesRepository.java diff --git a/src/main/java/com/spring/data/controllers/MatchesController.java b/src/main/java/com/spring/data/controllers/MatchesController.java index 94c3c8a..33b3402 100644 --- a/src/main/java/com/spring/data/controllers/MatchesController.java +++ b/src/main/java/com/spring/data/controllers/MatchesController.java @@ -31,14 +31,24 @@ public class MatchesController { MatchesRepository matchesRepository; - /* RETORNI TOTS ELS USERS QUE NO HA FET MATCH - @GetMapping("/all/{user_id_1}") - public ResponseEntity> getAllUsers(@PathVariable("user_id_1") long user_id_1) { + + @GetMapping("/all") + public ResponseEntity> getAllUsers() { try { List matches = new ArrayList(); - - matchesRepository.findUserNotMatches(user_id_1).forEach(); + 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); @@ -84,6 +94,8 @@ public Boolean isMatch(@PathVariable("user_id_1") long user_id_1, @PathVariable( + +/* @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); @@ -98,15 +110,79 @@ public ResponseEntity isMatch2(@PathVariable("user_id_1") long user_id_ //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") +public ResponseEntity liked(@RequestBody Matches matches) { + try { + 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); + } 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) { + 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) { + //Cridara a funcio auxiliar per crear nou registre + } + 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}") 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..ba2383b --- /dev/null +++ b/src/main/java/com/spring/data/controllers/ReportesController.java @@ -0,0 +1,77 @@ +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.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); + } + } + + @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/spring/data/controllers/UserController.java b/src/main/java/com/spring/data/controllers/UserController.java index 44ab4f7..39d71d1 100644 --- a/src/main/java/com/spring/data/controllers/UserController.java +++ b/src/main/java/com/spring/data/controllers/UserController.java @@ -50,6 +50,39 @@ public ResponseEntity> getAllUsers(@RequestParam(required = false) St } } +// 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); diff --git a/src/main/java/com/spring/data/models/Matches.java b/src/main/java/com/spring/data/models/Matches.java index e279dc2..2d7d2c3 100644 --- a/src/main/java/com/spring/data/models/Matches.java +++ b/src/main/java/com/spring/data/models/Matches.java @@ -20,20 +20,23 @@ public class Matches { //@JoinColumn(name = "user_id_2", referencedColumnName = "id") private Long user_id_2; - @Column(name = "is_match") - private Boolean is_match; + @Column(name = "is_match", columnDefinition = "boolean default false") + private Boolean is_match = false; - @Column(name = "liked_1") + //@Column(name = "liked_1", columnDefinition = "boolean default true") private Boolean liked_1; - @Column(name = "liked_2") - private Boolean liked_2; + @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) { + /*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(long user_id_1, long user_id_2, Boolean liked_1, boolean liked_2, boolean is_match) { } public Long getId() { 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..7eb19f9 --- /dev/null +++ b/src/main/java/com/spring/data/models/Reportes.java @@ -0,0 +1,94 @@ +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 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/spring/data/repository/MatchesRepository.java b/src/main/java/com/spring/data/repository/MatchesRepository.java index a0f1b0b..1d498c0 100644 --- a/src/main/java/com/spring/data/repository/MatchesRepository.java +++ b/src/main/java/com/spring/data/repository/MatchesRepository.java @@ -38,6 +38,9 @@ public interface MatchesRepository extends JpaRepository { @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 = 1", 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); 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/spring/data/security/WebSecurityConfig.java b/src/main/java/com/spring/data/security/WebSecurityConfig.java index ee941ae..ab5e7a5 100644 --- a/src/main/java/com/spring/data/security/WebSecurityConfig.java +++ b/src/main/java/com/spring/data/security/WebSecurityConfig.java @@ -59,6 +59,9 @@ protected void configure(HttpSecurity http) throws Exception { .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and() .authorizeRequests().antMatchers("/api/auth/**").permitAll() + .antMatchers("/user/delete/**").hasAnyAuthority("ADMIN") + //.antMatchers("/reportes/**").hasAnyAuthority("ADMIN") + .antMatchers("/user/deleteAll/**").hasAuthority("ADMIN") .antMatchers("/api/test/**").permitAll() .anyRequest().authenticated(); From 8fa9e8e6aae9dd8174432747a89a192e7fd22e62 Mon Sep 17 00:00:00 2001 From: Marcus Fifth Date: Fri, 18 Jun 2021 17:56:25 +0200 Subject: [PATCH 08/20] . --- .../data/controllers/MatchesController.java | 17 +++++++++++++---- .../data/controllers/ReportesController.java | 11 +++++++++++ .../spring/data/controllers/UserController.java | 2 +- .../java/com/spring/data/models/Matches.java | 16 +++++++++------- .../data/repository/MatchesRepository.java | 4 ++-- .../spring/data/security/WebSecurityConfig.java | 5 +++-- 6 files changed, 39 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/spring/data/controllers/MatchesController.java b/src/main/java/com/spring/data/controllers/MatchesController.java index 33b3402..111e6d7 100644 --- a/src/main/java/com/spring/data/controllers/MatchesController.java +++ b/src/main/java/com/spring/data/controllers/MatchesController.java @@ -24,7 +24,7 @@ @CrossOrigin(origins = "*") @RestController -@RequestMapping("/match") +@RequestMapping("/matches") public class MatchesController { @Autowired @@ -79,7 +79,7 @@ public Boolean isMatch(@PathVariable("user_id_1") long user_id_1, @PathVariable( //Matches _matches = matchData.get(); _matches.setLiked_2(liked_2); _matches.setIs_Match(true); - matchesRepository.save(matchData); + // matchesRepository.save(matchData); return true; } else { @@ -126,11 +126,20 @@ public Shoe addShoe(@RequestBody Shoe shoe) { 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(), matches.getLiked_1(), false, false)); + 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); diff --git a/src/main/java/com/spring/data/controllers/ReportesController.java b/src/main/java/com/spring/data/controllers/ReportesController.java index ba2383b..0bf680e 100644 --- a/src/main/java/com/spring/data/controllers/ReportesController.java +++ b/src/main/java/com/spring/data/controllers/ReportesController.java @@ -13,6 +13,7 @@ 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; @@ -59,6 +60,16 @@ public ResponseEntity getUserById(@PathVariable("id") long id) { } } + @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); diff --git a/src/main/java/com/spring/data/controllers/UserController.java b/src/main/java/com/spring/data/controllers/UserController.java index 39d71d1..db3c09e 100644 --- a/src/main/java/com/spring/data/controllers/UserController.java +++ b/src/main/java/com/spring/data/controllers/UserController.java @@ -61,7 +61,7 @@ public ResponseEntity> getAllUsers(@PathVariable("id") long id, @Requ for (long i = 1; i <= n; ++i) { boolean isliked = matchesRepository.alreadyLiked(id, i) > 0; if (isliked) { - users.remove(matchesRepository) + users.remove(matchesRepository.) } } diff --git a/src/main/java/com/spring/data/models/Matches.java b/src/main/java/com/spring/data/models/Matches.java index 2d7d2c3..9fdd849 100644 --- a/src/main/java/com/spring/data/models/Matches.java +++ b/src/main/java/com/spring/data/models/Matches.java @@ -14,11 +14,13 @@ public class Matches { //@Column(name = "user_id_1") //@OneToOne(cascade = CascadeType.ALL) //@JoinColumn(name = "user_id_1", referencedColumnName = "id") - private Long user_id_1; + @Column(name = "user_id_1") + private int user_id_1; //@OneToOne(cascade = CascadeType.ALL) //@JoinColumn(name = "user_id_2", referencedColumnName = "id") - private Long user_id_2; + @Column(name = "user_id_2") + private int user_id_2; @Column(name = "is_match", columnDefinition = "boolean default false") private Boolean is_match = false; @@ -36,7 +38,7 @@ public Matches() {} this.user_id_2 = user_id_2; }*/ - public Matches(long user_id_1, long user_id_2, Boolean liked_1, boolean liked_2, boolean is_match) { + public Matches(int user_id_1, int user_id_2, Boolean liked_1, boolean liked_2, boolean is_match) { } public Long getId() { @@ -47,19 +49,19 @@ public void setId(Long id) { this.id = id; } - public Long getUser_Id_1() { + public int getUser_Id_1() { return user_id_1; } - public void setUser_Id_1(Long id_user) { + public void setUser_Id_1(int id_user) { this.user_id_1 = id_user; } - public Long getUser_Id_2() { + public int getUser_Id_2() { return user_id_2; } - public void setUser_Id_2(Long id_user) { + public void setUser_Id_2(int id_user) { this.user_id_2 = id_user; } diff --git a/src/main/java/com/spring/data/repository/MatchesRepository.java b/src/main/java/com/spring/data/repository/MatchesRepository.java index 1d498c0..3077b88 100644 --- a/src/main/java/com/spring/data/repository/MatchesRepository.java +++ b/src/main/java/com/spring/data/repository/MatchesRepository.java @@ -39,13 +39,13 @@ public interface MatchesRepository extends JpaRepository { @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 = 1", nativeQuery = true) + @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); - void save(Optional matchData); + //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) diff --git a/src/main/java/com/spring/data/security/WebSecurityConfig.java b/src/main/java/com/spring/data/security/WebSecurityConfig.java index ab5e7a5..0e90431 100644 --- a/src/main/java/com/spring/data/security/WebSecurityConfig.java +++ b/src/main/java/com/spring/data/security/WebSecurityConfig.java @@ -59,9 +59,10 @@ protected void configure(HttpSecurity http) throws Exception { .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and() .authorizeRequests().antMatchers("/api/auth/**").permitAll() - .antMatchers("/user/delete/**").hasAnyAuthority("ADMIN") + .antMatchers("/**").permitAll() + /*.antMatchers("/user/delete/**").hasAnyAuthority("ADMIN") //.antMatchers("/reportes/**").hasAnyAuthority("ADMIN") - .antMatchers("/user/deleteAll/**").hasAuthority("ADMIN") + .antMatchers("/user/deleteAll/**").hasAuthority("ADMIN")*/ .antMatchers("/api/test/**").permitAll() .anyRequest().authenticated(); From f58f61e6d57703fff61eb34d299c13b2d9049b58 Mon Sep 17 00:00:00 2001 From: Marcus Fifth Date: Fri, 18 Jun 2021 18:57:17 +0200 Subject: [PATCH 09/20] matches act --- .../java/com/spring/data/controllers/MatchesController.java | 2 +- src/main/java/com/spring/data/models/Matches.java | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/spring/data/controllers/MatchesController.java b/src/main/java/com/spring/data/controllers/MatchesController.java index 111e6d7..5eef93d 100644 --- a/src/main/java/com/spring/data/controllers/MatchesController.java +++ b/src/main/java/com/spring/data/controllers/MatchesController.java @@ -163,7 +163,7 @@ public ResponseEntity isMatch2(@PathVariable("user_id_1") long user_id_ } } else if (user_liked == true) { - //Cridara a funcio auxiliar per crear nou registre + liked(matches); } return new ResponseEntity<>(HttpStatus.NOT_FOUND); } diff --git a/src/main/java/com/spring/data/models/Matches.java b/src/main/java/com/spring/data/models/Matches.java index 9fdd849..51ff472 100644 --- a/src/main/java/com/spring/data/models/Matches.java +++ b/src/main/java/com/spring/data/models/Matches.java @@ -39,6 +39,11 @@ public Matches() {} }*/ 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() { From 17ca340ea65b6c1bed42900e8bb25d17572ade3a Mon Sep 17 00:00:00 2001 From: Marcus Fifth Date: Sat, 19 Jun 2021 12:30:14 +0200 Subject: [PATCH 10/20] message socket + get converses --- pom.xml | 28 +++- .../data/controllers/ChatController.java | 28 ++++ .../data/controllers/ConversaController.java | 70 ++++++++++ .../data/controllers/MatchesController.java | 6 +- .../controllers/WebSocketEventListener.java | 45 +++++++ .../com/spring/data/models/ChatMessage.java | 30 +++++ .../java/com/spring/data/models/Conversa.java | 68 ++++++++++ .../com/spring/data/models/MessageType.java | 7 + .../java/com/spring/data/models/Reportes.java | 8 ++ .../data/repository/ConversaRepository.java | 9 ++ .../data/repository/MessageRepository.java | 0 .../data/web/WebSocketMessageConfig.java | 23 ++++ src/main/resources/static/css/styles.css | 116 ++++++++++++++++ .../resources/static/img/favicon-16x16.png | Bin 0 -> 554 bytes src/main/resources/static/index.html | 78 +++++++++++ src/main/resources/static/js/script.js | 126 ++++++++++++++++++ 16 files changed, 637 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/spring/data/controllers/ChatController.java create mode 100644 src/main/java/com/spring/data/controllers/ConversaController.java create mode 100644 src/main/java/com/spring/data/controllers/WebSocketEventListener.java create mode 100644 src/main/java/com/spring/data/models/ChatMessage.java create mode 100644 src/main/java/com/spring/data/models/Conversa.java create mode 100644 src/main/java/com/spring/data/models/MessageType.java create mode 100644 src/main/java/com/spring/data/repository/ConversaRepository.java create mode 100644 src/main/java/com/spring/data/repository/MessageRepository.java create mode 100644 src/main/java/com/spring/data/web/WebSocketMessageConfig.java create mode 100644 src/main/resources/static/css/styles.css create mode 100644 src/main/resources/static/img/favicon-16x16.png create mode 100644 src/main/resources/static/index.html create mode 100644 src/main/resources/static/js/script.js diff --git a/pom.xml b/pom.xml index 907ac6a..7a8f27d 100644 --- a/pom.xml +++ b/pom.xml @@ -29,12 +29,19 @@ 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 @@ -46,18 +53,31 @@ 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/main/java/com/spring/data/controllers/ChatController.java b/src/main/java/com/spring/data/controllers/ChatController.java new file mode 100644 index 0000000..340f7fe --- /dev/null +++ b/src/main/java/com/spring/data/controllers/ChatController.java @@ -0,0 +1,28 @@ +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..1298d05 --- /dev/null +++ b/src/main/java/com/spring/data/controllers/ConversaController.java @@ -0,0 +1,70 @@ +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.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") + public ResponseEntity> getAllUsers(/*@RequestParam(required = false) String username*/) { + try { + List reportes = new ArrayList(); + + //if (username == null) + conversaRepository.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 userData = conversaRepository.findById(id); + + if (userData.isPresent()) { + return new ResponseEntity<>(userData.get(), HttpStatus.OK); + } else { + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } + } + + @PostMapping("/newconversa") + public ResponseEntity novaConversa(@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); + } +} + + +} diff --git a/src/main/java/com/spring/data/controllers/MatchesController.java b/src/main/java/com/spring/data/controllers/MatchesController.java index 5eef93d..b17d6d8 100644 --- a/src/main/java/com/spring/data/controllers/MatchesController.java +++ b/src/main/java/com/spring/data/controllers/MatchesController.java @@ -6,6 +6,9 @@ import com.fasterxml.jackson.databind.deser.DataFormatReaders.Match; import com.spring.data.models.Matches; 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; @@ -148,7 +151,7 @@ public ResponseEntity liked(@RequestBody Matches matches) { @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) { + 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(); @@ -159,6 +162,7 @@ public ResponseEntity isMatch2(@PathVariable("user_id_1") long user_id_ _matches.setLiked_2(user_liked); _matches.setIs_Match(true); //matchesRepository.save(matchData); + return new ResponseEntity<>(matchesRepository.save(_matches), HttpStatus.OK); } } 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..947799f --- /dev/null +++ b/src/main/java/com/spring/data/controllers/WebSocketEventListener.java @@ -0,0 +1,45 @@ +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/models/ChatMessage.java b/src/main/java/com/spring/data/models/ChatMessage.java new file mode 100644 index 0000000..8ce3fb3 --- /dev/null +++ b/src/main/java/com/spring/data/models/ChatMessage.java @@ -0,0 +1,30 @@ +package com.spring.data.models; + +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; + + //@Getter No funciona + private String sender; + + @Getter + private String time; + + public String getSender() { + return sender; + } + +} 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..5e48e0d --- /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/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/Reportes.java b/src/main/java/com/spring/data/models/Reportes.java index 7eb19f9..7857052 100644 --- a/src/main/java/com/spring/data/models/Reportes.java +++ b/src/main/java/com/spring/data/models/Reportes.java @@ -36,6 +36,14 @@ public Reportes(Long user_id, Long user_id_reported, String motiu, String coment this.solucionado = solucionado; } + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + public Long getUserId() { return user_id; } 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..2687469 --- /dev/null +++ b/src/main/java/com/spring/data/repository/ConversaRepository.java @@ -0,0 +1,9 @@ +package com.spring.data.repository; + +import com.spring.data.models.Conversa; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ConversaRepository extends JpaRepository{ + +} 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..e69de29 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/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 0000000000000000000000000000000000000000..be9357c2a29b5f004b7a7cf0e9973993aa70a053 GIT binary patch literal 554 zcmV+_0@eMAP)pgxJh5w$P%jZh|4T_=8jtgYJwGT-0R{m4Z7Lf`Tg%H*VZ2xEFsA42WPB zN*RL-(c0P;saPYK&{blkMM5%7t(kXa5@sktXzE+Nd)_(UyWIDPj+GVB2JA*s!97B1 zL*B87TM0p%S&m01Go-sQLchp%aJ?-7$Q71% z>*452Ko0*i*ddBwRy8?xdc-I*_o=MwedZL%{oRCpj{x&}#5hK)Si42?_Ey3HguF@1 zt``Uld!iD-(n=MB{k^Uvc8lF#1g02mGW}tUn|%{$Dc?JmQ31O=t|yLB!Y+gmheKj<%+e zFF9vL29_AwPXGV_07*qoM6N<$f~E2M7ytkO literal 0 HcmV?d00001 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 + + + + + + + + + + + + + +
+ + + +
+
+
+
+ +
+ +
+
+
+
+
+ +
+
+ +
+
+
+
+
+ Web Sockets with Spring Boot Chat +
+
+
+ +
+ +
+ +
+ +
+ + +
+
+
+
+
+ + + + + + + \ 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 From 913b607a9195b5041a265856a870341a7193fe22 Mon Sep 17 00:00:00 2001 From: Marcus Fifth Date: Sat, 19 Jun 2021 13:11:22 +0200 Subject: [PATCH 11/20] match + conversa --- .../data/controllers/ConversaController.java | 14 ++++++++++++-- .../data/controllers/MatchesController.java | 16 ++++++++++++++-- .../java/com/spring/data/models/Conversa.java | 4 ++-- .../data/repository/MessageRepository.java | 5 +++++ 4 files changed, 33 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/spring/data/controllers/ConversaController.java b/src/main/java/com/spring/data/controllers/ConversaController.java index 1298d05..06ac855 100644 --- a/src/main/java/com/spring/data/controllers/ConversaController.java +++ b/src/main/java/com/spring/data/controllers/ConversaController.java @@ -56,14 +56,24 @@ public ResponseEntity getUserById(@PathVariable("id") long id) { } } - @PostMapping("/newconversa") - public ResponseEntity novaConversa(@RequestBody Conversa conversa) { + /*@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); +} } diff --git a/src/main/java/com/spring/data/controllers/MatchesController.java b/src/main/java/com/spring/data/controllers/MatchesController.java index b17d6d8..106bc0d 100644 --- a/src/main/java/com/spring/data/controllers/MatchesController.java +++ b/src/main/java/com/spring/data/controllers/MatchesController.java @@ -33,6 +33,9 @@ public class MatchesController { @Autowired MatchesRepository matchesRepository; + @Autowired + ConversaRepository conversaRepository; + @GetMapping("/all") @@ -149,9 +152,18 @@ public ResponseEntity liked(@RequestBody Matches matches) { } } +@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) { + 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(); @@ -162,7 +174,7 @@ public ResponseEntity isMatch2(@PathVariable("user_id_1") long user_id_ _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); } } diff --git a/src/main/java/com/spring/data/models/Conversa.java b/src/main/java/com/spring/data/models/Conversa.java index 5e48e0d..82cfb1c 100644 --- a/src/main/java/com/spring/data/models/Conversa.java +++ b/src/main/java/com/spring/data/models/Conversa.java @@ -27,10 +27,10 @@ public class Conversa { public Conversa() {} - public Conversa(Long user_id_creador, Long user_id_segon, String time_started) { + 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; + //this.time_started = time_started; } public Long getId() { diff --git a/src/main/java/com/spring/data/repository/MessageRepository.java b/src/main/java/com/spring/data/repository/MessageRepository.java index e69de29..cc816c9 100644 --- a/src/main/java/com/spring/data/repository/MessageRepository.java +++ b/src/main/java/com/spring/data/repository/MessageRepository.java @@ -0,0 +1,5 @@ +package com.spring.data.repository; + +public class MessageRepository { + +} From e6afbeb51c62ac00498a6936ac220a0c159cca22 Mon Sep 17 00:00:00 2001 From: Marcus Fifth Date: Sat, 19 Jun 2021 13:24:21 +0200 Subject: [PATCH 12/20] delete matches --- .../data/controllers/ConversaController.java | 11 ++++++++++ .../data/controllers/MatchesController.java | 22 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/main/java/com/spring/data/controllers/ConversaController.java b/src/main/java/com/spring/data/controllers/ConversaController.java index 06ac855..ac73f62 100644 --- a/src/main/java/com/spring/data/controllers/ConversaController.java +++ b/src/main/java/com/spring/data/controllers/ConversaController.java @@ -11,6 +11,7 @@ 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; @@ -76,5 +77,15 @@ public ResponseEntity novaConversa(@PathVariable("user_id_1") long use } } +@DeleteMapping("/delete/{id}") + public ResponseEntity deleteConversa(@PathVariable("id") long id) { + 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 index 106bc0d..af68f62 100644 --- a/src/main/java/com/spring/data/controllers/MatchesController.java +++ b/src/main/java/com/spring/data/controllers/MatchesController.java @@ -308,6 +308,28 @@ public List getUserMatches(@PathVariable("user_id_1") long user_id_1) { return matchesRepository.findUserMatches(user_id_1); } + //@DeleteMapping("/delete/{id}") + //No s'esborra la conversa quan s'esborra el match perque falta id de la conversa + public ResponseEntity deleteConversa(@PathVariable("id") long id) { + try { + conversaRepository.deleteById(id); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } catch (Exception e) { + return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + @DeleteMapping("/delete/{id}") + public ResponseEntity deleteMatch(@PathVariable("id") long id) { + try { + matchesRepository.deleteById(id); + deleteConversa(id); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } catch (Exception e) { + return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); + } + } + } From 7fecefa61c20bcf1b65794fa0370a7b81fdb5c94 Mon Sep 17 00:00:00 2001 From: Marcus Fifth Date: Sat, 19 Jun 2021 16:19:35 +0200 Subject: [PATCH 13/20] conversa id --- .../com/spring/data/controllers/ConversaController.java | 8 ++++---- .../com/spring/data/repository/ConversaRepository.java | 6 +++++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/spring/data/controllers/ConversaController.java b/src/main/java/com/spring/data/controllers/ConversaController.java index ac73f62..0935f47 100644 --- a/src/main/java/com/spring/data/controllers/ConversaController.java +++ b/src/main/java/com/spring/data/controllers/ConversaController.java @@ -26,13 +26,13 @@ public class ConversaController { @Autowired ConversaRepository conversaRepository; - @GetMapping("/all") - public ResponseEntity> getAllUsers(/*@RequestParam(required = false) String username*/) { + @GetMapping("/all/{id}") + public ResponseEntity> getAllUsers(@PathVariable("id") long id/*@RequestParam(required = false) String username*/) { try { List reportes = new ArrayList(); //if (username == null) - conversaRepository.findAll().forEach(reportes::add); + conversaRepository.findUserConverses(id).forEach(reportes::add); //else // userRepository.findByStringContaining(username).forEach(users::add); @@ -78,7 +78,7 @@ public ResponseEntity novaConversa(@PathVariable("user_id_1") long use } @DeleteMapping("/delete/{id}") - public ResponseEntity deleteConversa(@PathVariable("id") long id) { + public ResponseEntity delet(@PathVariable("id") long id) { try { conversaRepository.deleteById(id); return new ResponseEntity<>(HttpStatus.NO_CONTENT); diff --git a/src/main/java/com/spring/data/repository/ConversaRepository.java b/src/main/java/com/spring/data/repository/ConversaRepository.java index 2687469..0e74fa8 100644 --- a/src/main/java/com/spring/data/repository/ConversaRepository.java +++ b/src/main/java/com/spring/data/repository/ConversaRepository.java @@ -1,9 +1,13 @@ 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); } From 6598415505cd87a6f3e08290589390c49f442d86 Mon Sep 17 00:00:00 2001 From: Marcus Fifth Date: Sat, 19 Jun 2021 16:40:22 +0200 Subject: [PATCH 14/20] delete matches + converses --- .../data/controllers/ConversaController.java | 4 ++-- .../data/controllers/MatchesController.java | 16 +++++++++------- .../data/repository/ConversaRepository.java | 3 +++ .../data/repository/MatchesRepository.java | 5 +++++ 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/spring/data/controllers/ConversaController.java b/src/main/java/com/spring/data/controllers/ConversaController.java index 0935f47..b32257e 100644 --- a/src/main/java/com/spring/data/controllers/ConversaController.java +++ b/src/main/java/com/spring/data/controllers/ConversaController.java @@ -77,8 +77,8 @@ public ResponseEntity novaConversa(@PathVariable("user_id_1") long use } } -@DeleteMapping("/delete/{id}") - public ResponseEntity delet(@PathVariable("id") long id) { +@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); diff --git a/src/main/java/com/spring/data/controllers/MatchesController.java b/src/main/java/com/spring/data/controllers/MatchesController.java index af68f62..e485040 100644 --- a/src/main/java/com/spring/data/controllers/MatchesController.java +++ b/src/main/java/com/spring/data/controllers/MatchesController.java @@ -310,20 +310,22 @@ public List getUserMatches(@PathVariable("user_id_1") long user_id_1) { //@DeleteMapping("/delete/{id}") //No s'esborra la conversa quan s'esborra el match perque falta id de la conversa - public ResponseEntity deleteConversa(@PathVariable("id") long id) { - try { - conversaRepository.deleteById(id); + public ResponseEntity deleteConversa(@PathVariable("id") long id, @PathVariable("id2") long id2) { + try { + long idtaula = conversaRepository.findId(id, id2); + conversaRepository.deleteById(idtaula); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } catch (Exception e) { return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); } } - @DeleteMapping("/delete/{id}") - public ResponseEntity deleteMatch(@PathVariable("id") long id) { + @DeleteMapping("/delete/{id}/{id2}") + public ResponseEntity deleteMatch(@PathVariable("id") long id, @PathVariable("id2") long id2) { try { - matchesRepository.deleteById(id); - deleteConversa(id); + 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/repository/ConversaRepository.java b/src/main/java/com/spring/data/repository/ConversaRepository.java index 0e74fa8..82023d1 100644 --- a/src/main/java/com/spring/data/repository/ConversaRepository.java +++ b/src/main/java/com/spring/data/repository/ConversaRepository.java @@ -10,4 +10,7 @@ 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 index 3077b88..e159b30 100644 --- a/src/main/java/com/spring/data/repository/MatchesRepository.java +++ b/src/main/java/com/spring/data/repository/MatchesRepository.java @@ -45,6 +45,11 @@ public interface MatchesRepository extends JpaRepository { @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 From 1b72645f2c137a4e0c1f7d9dcae58af32d8fa5ec Mon Sep 17 00:00:00 2001 From: Marcus Fifth Date: Sat, 19 Jun 2021 18:25:11 +0200 Subject: [PATCH 15/20] get meesages --- pom.xml | 9 ++- .../data/controllers/ChatController.java | 3 + .../data/controllers/MessageController.java | 57 +++++++++++++ .../data/controllers/WebSocketConfig.java | 26 ++++++ .../controllers/WebSocketEventListener.java | 4 +- .../controllers/WebSocketTextController.java | 38 +++++++++ .../com/spring/data/models/ChatMessage.java | 16 ++++ .../java/com/spring/data/models/Message.java | 79 +++++++++++++++++++ .../spring/data/models/TextMessageDTO.java | 15 ++++ .../data/repository/MessageRepository.java | 13 ++- 10 files changed, 255 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/spring/data/controllers/MessageController.java create mode 100644 src/main/java/com/spring/data/controllers/WebSocketConfig.java create mode 100644 src/main/java/com/spring/data/controllers/WebSocketTextController.java create mode 100644 src/main/java/com/spring/data/models/Message.java create mode 100644 src/main/java/com/spring/data/models/TextMessageDTO.java diff --git a/pom.xml b/pom.xml index 7a8f27d..7326140 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,14 @@ 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 diff --git a/src/main/java/com/spring/data/controllers/ChatController.java b/src/main/java/com/spring/data/controllers/ChatController.java index 340f7fe..a3c8e10 100644 --- a/src/main/java/com/spring/data/controllers/ChatController.java +++ b/src/main/java/com/spring/data/controllers/ChatController.java @@ -25,4 +25,7 @@ public ChatMessage newUser(@Payload final ChatMessage chatMessage, SimpMessageHe } + + + } 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..844ceea --- /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/{conversa_id}}") + public ResponseEntity createReport(@PathVariable("id") long conversa_id, @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/WebSocketConfig.java b/src/main/java/com/spring/data/controllers/WebSocketConfig.java new file mode 100644 index 0000000..1e08cc3 --- /dev/null +++ b/src/main/java/com/spring/data/controllers/WebSocketConfig.java @@ -0,0 +1,26 @@ +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"); + } + + @Override + public void registerStompEndpoints(StompEndpointRegistry registry) { + // with sockjs + registry.addEndpoint("/ws-message").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 index 947799f..bce665a 100644 --- a/src/main/java/com/spring/data/controllers/WebSocketEventListener.java +++ b/src/main/java/com/spring/data/controllers/WebSocketEventListener.java @@ -1,4 +1,4 @@ -package com.spring.data.controllers; +/*package com.spring.data.controllers; import org.slf4j.LoggerFactory; @@ -42,4 +42,4 @@ public void handleWebSocketDisconnectListener(final SessionDisconnectEvent event } -} +}*/ 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 index 8ce3fb3..79c85b3 100644 --- a/src/main/java/com/spring/data/models/ChatMessage.java +++ b/src/main/java/com/spring/data/models/ChatMessage.java @@ -1,5 +1,6 @@ package com.spring.data.models; +import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; @@ -17,14 +18,29 @@ public class ChatMessage { @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/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/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/repository/MessageRepository.java b/src/main/java/com/spring/data/repository/MessageRepository.java index cc816c9..988b705 100644 --- a/src/main/java/com/spring/data/repository/MessageRepository.java +++ b/src/main/java/com/spring/data/repository/MessageRepository.java @@ -1,5 +1,14 @@ package com.spring.data.repository; -public class MessageRepository { - +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); } From a1da2666891aa1eb143c83ac3d1795d5dbc8ba09 Mon Sep 17 00:00:00 2001 From: Marcus Fifth Date: Sun, 20 Jun 2021 01:53:53 +0200 Subject: [PATCH 16/20] get message arreglat --- .../java/com/spring/data/controllers/MessageController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/spring/data/controllers/MessageController.java b/src/main/java/com/spring/data/controllers/MessageController.java index 844ceea..c5af46f 100644 --- a/src/main/java/com/spring/data/controllers/MessageController.java +++ b/src/main/java/com/spring/data/controllers/MessageController.java @@ -44,8 +44,8 @@ public ResponseEntity> getAllUsers(@PathVariable("id") long id) { } } - @PostMapping("/create/{conversa_id}}") - public ResponseEntity createReport(@PathVariable("id") long conversa_id, @RequestBody Message message) { + @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); From 08d66ce012471935040f71ad08d74149d1ca9adf Mon Sep 17 00:00:00 2001 From: Marcus Fifth Date: Sun, 20 Jun 2021 16:52:08 +0200 Subject: [PATCH 17/20] delete match + message arreglat --- .../data/controllers/MatchesController.java | 25 +++++++++++++++++-- .../controllers/WebSocketEventListener.java | 5 ++-- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/spring/data/controllers/MatchesController.java b/src/main/java/com/spring/data/controllers/MatchesController.java index e485040..b15c3d2 100644 --- a/src/main/java/com/spring/data/controllers/MatchesController.java +++ b/src/main/java/com/spring/data/controllers/MatchesController.java @@ -5,6 +5,7 @@ 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; @@ -36,6 +37,9 @@ public class MatchesController { @Autowired ConversaRepository conversaRepository; + @Autowired + MessageRepository messageRepository; + @GetMapping("/all") @@ -308,11 +312,27 @@ public List getUserMatches(@PathVariable("user_id_1") long user_id_1) { return matchesRepository.findUserMatches(user_id_1); } - //@DeleteMapping("/delete/{id}") - //No s'esborra la conversa quan s'esborra el match perque falta id de la conversa + + //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) { @@ -320,6 +340,7 @@ public ResponseEntity deleteConversa(@PathVariable("id") long id, @P } } + //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 { diff --git a/src/main/java/com/spring/data/controllers/WebSocketEventListener.java b/src/main/java/com/spring/data/controllers/WebSocketEventListener.java index bce665a..e67d2ea 100644 --- a/src/main/java/com/spring/data/controllers/WebSocketEventListener.java +++ b/src/main/java/com/spring/data/controllers/WebSocketEventListener.java @@ -1,4 +1,4 @@ -/*package com.spring.data.controllers; +package com.spring.data.controllers; import org.slf4j.LoggerFactory; @@ -41,5 +41,4 @@ public void handleWebSocketDisconnectListener(final SessionDisconnectEvent event } - -}*/ +} From 083af6d203910df9bee41b1707e85deaf3c9cafc Mon Sep 17 00:00:00 2001 From: Marcus Fifth Date: Sun, 20 Jun 2021 17:47:38 +0200 Subject: [PATCH 18/20] socket notificacions --- pom.xml | 15 ++++- .../controllers/NotificationDispatcher.java | 63 +++++++++++++++++++ .../controllers/NotificationsController.java | 23 +++++++ .../data/controllers/WebSocketConfig.java | 4 ++ .../com/spring/data/models/Notification.java | 13 ++++ 5 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/spring/data/controllers/NotificationDispatcher.java create mode 100644 src/main/java/com/spring/data/controllers/NotificationsController.java create mode 100644 src/main/java/com/spring/data/models/Notification.java diff --git a/pom.xml b/pom.xml index 7326140..ca35be3 100644 --- a/pom.xml +++ b/pom.xml @@ -54,7 +54,20 @@ 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 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/WebSocketConfig.java b/src/main/java/com/spring/data/controllers/WebSocketConfig.java index 1e08cc3..8a62ee6 100644 --- a/src/main/java/com/spring/data/controllers/WebSocketConfig.java +++ b/src/main/java/com/spring/data/controllers/WebSocketConfig.java @@ -14,13 +14,17 @@ public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { 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/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 From 15305c62610ecf8ab044cecd5f475cbd5105364d Mon Sep 17 00:00:00 2001 From: marcusfifth <85309019+marcusfifth@users.noreply.github.com> Date: Mon, 21 Jun 2021 09:39:19 +0200 Subject: [PATCH 19/20] Update README.md --- README.md | 134 +----------------------------------------------------- 1 file changed, 1 insertion(+), 133 deletions(-) diff --git a/README.md b/README.md index 77f944f..5ea16fc 100644 --- a/README.md +++ b/README.md @@ -1,135 +1,3 @@ -# Spring Boot JWT Authentication example with Spring Security & Spring Data JPA +# BACKEND MATCHER -## User Registration, User Login and Authorization process. -The diagram shows flow of how we implement User Registration, User Login and Authorization process. -![spring-boot-jwt-authentication-spring-security-flow](spring-boot-jwt-authentication-spring-security-flow.png) - -## Spring Boot Server Architecture with Spring Security -You can have an overview of our Spring Boot Server with the diagram below: - -![spring-boot-jwt-authentication-spring-security-architecture](spring-boot-jwt-authentication-spring-security-architecture.png) - -For more detail, please visit: -> [Secure Spring Boot App with Spring Security & JWT Authentication](https://bezkoder.com/spring-boot-jwt-authentication/) - -> [For MongoDB](https://bezkoder.com/spring-boot-jwt-auth-mongodb/) - -## Refresh Token - -![spring-boot-refresh-token-jwt-example-flow](spring-boot-refresh-token-jwt-example-flow.png) - -For instruction: [Spring Boot Refresh Token with JWT example](https://bezkoder.com/spring-boot-refresh-token-jwt/) - -## 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 - - org.postgresql - postgresql - runtime - -``` -– or MySQL: -```xml - - mysql - mysql-connector-java - runtime - -``` -## Configure Spring Datasource, JPA, App properties -Open `src/main/resources/application.properties` -- For PostgreSQL: -``` -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 -``` -- For MySQL -``` -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 -``` -## Run Spring Boot application -``` -mvn spring-boot:run -``` - -## Run following SQL insert statements -``` -INSERT INTO roles(name) VALUES('ROLE_USER'); -INSERT INTO roles(name) VALUES('ROLE_MODERATOR'); -INSERT INTO roles(name) VALUES('ROLE_ADMIN'); -``` -# backend-matcher From ae26b2cf26602ca26ddaa7aae3b11b2cff76b4a8 Mon Sep 17 00:00:00 2001 From: marcusfifth <85309019+marcusfifth@users.noreply.github.com> Date: Mon, 21 Jun 2021 13:25:19 +0200 Subject: [PATCH 20/20] Update README.md --- README.md | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 103 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5ea16fc..3ee8251 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,105 @@ -# BACKEND MATCHER +# Spring Boot JWT Authentication example with Spring Security & Spring Data JPA +## User Registration, User Login and Authorization process. +The diagram shows flow of how we implement User Registration, User Login and Authorization process. +![spring-boot-jwt-authentication-spring-security-flow](spring-boot-jwt-authentication-spring-security-flow.png) + +## Spring Boot Server Architecture with Spring Security +You can have an overview of our Spring Boot Server with the diagram below: + +![spring-boot-jwt-authentication-spring-security-architecture](spring-boot-jwt-authentication-spring-security-architecture.png) + +For more detail, please visit: +> [Secure Spring Boot App with Spring Security & JWT Authentication](https://bezkoder.com/spring-boot-jwt-authentication/) +> [For MongoDB](https://bezkoder.com/spring-boot-jwt-auth-mongodb/) +## Refresh Token + +![spring-boot-refresh-token-jwt-example-flow](spring-boot-refresh-token-jwt-example-flow.png) + +For instruction: [Spring Boot Refresh Token with JWT example](https://bezkoder.com/spring-boot-refresh-token-jwt/) + +## 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 + + org.postgresql + postgresql + runtime + +``` +– or MySQL: +```xml + + mysql + mysql-connector-java + runtime + +``` +## Configure Spring Datasource, JPA, App properties +Open `src/main/resources/application.properties` +- For PostgreSQL: +``` +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 +``` +- For MySQL +``` +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 +``` +## Run Spring Boot application +``` +mvn spring-boot:run +``` + +## Run following SQL insert statements +``` +INSERT INTO roles(name) VALUES('ROLE_USER'); +INSERT INTO roles(name) VALUES('ROLE_MODERATOR'); +INSERT INTO roles(name) VALUES('ROLE_ADMIN'); +``` +# backend-matcher