diff --git a/nbactions.xml b/nbactions.xml new file mode 100644 index 0000000..81b17f4 --- /dev/null +++ b/nbactions.xml @@ -0,0 +1,25 @@ + + + + CUSTOM-spb + spb + + spring-boot:run + + + + debug + + war + ear + ejb + + + spring-boot:run + + + -Xdebug -Xrunjdwp:transport=dt_socket,server=n,address=${jpda.address} + true + + + diff --git a/pom.xml b/pom.xml index 500dc59..d810a16 100644 --- a/pom.xml +++ b/pom.xml @@ -28,6 +28,10 @@ org.springframework.boot spring-boot-starter-data-jpa + + org.springframework.boot + spring-boot-devtools + org.springframework.boot spring-boot-starter-web diff --git a/src/main/java/fr/plil/sio/web/mvc/ApplicationSecurityConfiguration.java b/src/main/java/fr/plil/sio/web/mvc/ApplicationSecurityConfiguration.java index 7413bb9..1cbceae 100644 --- a/src/main/java/fr/plil/sio/web/mvc/ApplicationSecurityConfiguration.java +++ b/src/main/java/fr/plil/sio/web/mvc/ApplicationSecurityConfiguration.java @@ -28,6 +28,7 @@ public class ApplicationSecurityConfiguration extends WebSecurityConfigurerAdapt http .authorizeRequests() .antMatchers("/webjars/**").permitAll() + .antMatchers("/js/**").permitAll() .anyRequest().authenticated() .and() .formLogin() @@ -36,6 +37,7 @@ public class ApplicationSecurityConfiguration extends WebSecurityConfigurerAdapt .and() .logout() .permitAll(); + http.csrf().disable(); } @Autowired diff --git a/src/main/java/fr/plil/sio/web/mvc/Dette.java b/src/main/java/fr/plil/sio/web/mvc/Dette.java new file mode 100644 index 0000000..ac2ea28 --- /dev/null +++ b/src/main/java/fr/plil/sio/web/mvc/Dette.java @@ -0,0 +1,86 @@ +package fr.plil.sio.web.mvc; + +import java.util.Objects; +import javax.persistence.*; + + +@Entity +public class Dette { + + @Id + @GeneratedValue(strategy= GenerationType.AUTO) + private Long id; + + @Column + private Double sommeDette; + + + @ManyToOne(optional = false) + private User dueToUser; + + @ManyToOne(optional = false) + private User holderOfDebt; + + public Double getSommeDette() { + return sommeDette; + } + + public void setSommeDette(Double sommeDette) { + this.sommeDette = sommeDette; + } + + + public User getDueToUser() { + return dueToUser; + } + + public void setDueToUser(User dueToUser) { + this.dueToUser = dueToUser; + } + + public User getHolderOfDebt() { + return holderOfDebt; + } + + public void setHolderOfDebt(User holderOfDebt) { + this.holderOfDebt = holderOfDebt; + } + + + + @Override + public int hashCode() { + int hash = 5; + hash = 71 * hash + Objects.hashCode(this.sommeDette); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Dette other = (Dette) obj; + if (!Objects.equals(this.sommeDette, other.sommeDette)) { + return false; + } + if (!Objects.equals(this.dueToUser, other.dueToUser)) { + return false; + } + if (!Objects.equals(this.holderOfDebt, other.holderOfDebt)) { + return false; + } + return true; + } + + + + + + + + +} diff --git a/src/main/java/fr/plil/sio/web/mvc/DetteForm.java b/src/main/java/fr/plil/sio/web/mvc/DetteForm.java new file mode 100644 index 0000000..31621bf --- /dev/null +++ b/src/main/java/fr/plil/sio/web/mvc/DetteForm.java @@ -0,0 +1,33 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package fr.plil.sio.web.mvc; + +/** + * + * @author msahmane + */ +public class DetteForm { + + private String username; + private String sommeDette; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getSommeDette() { + return sommeDette; + } + + public void setSommeDette(String sommeDette) { + this.sommeDette = sommeDette; + } + +} diff --git a/src/main/java/fr/plil/sio/web/mvc/User.java b/src/main/java/fr/plil/sio/web/mvc/User.java index 75ec6a9..d38402d 100644 --- a/src/main/java/fr/plil/sio/web/mvc/User.java +++ b/src/main/java/fr/plil/sio/web/mvc/User.java @@ -2,11 +2,13 @@ package fr.plil.sio.web.mvc; import com.fasterxml.jackson.annotation.JsonManagedReference; +import java.util.ArrayList; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import javax.persistence.*; import java.util.Collection; +import java.util.List; import java.util.Set; import java.util.TreeSet; @@ -25,6 +27,18 @@ public class User implements UserDetails { @Column(name = "PASSWORD_F") private String password; + @OneToMany(mappedBy="holderOfDebt",cascade = CascadeType.REMOVE) + private List dettes = new ArrayList(); + + public List getDettes() { + return dettes; + } + + public void setDettes(List dettes) { + this.dettes = dettes; + } + + @ManyToMany(mappedBy = "users", fetch = FetchType.EAGER) @JsonManagedReference private Set roles = new TreeSet<>(); diff --git a/src/main/java/fr/plil/sio/web/mvc/UserRepository.java b/src/main/java/fr/plil/sio/web/mvc/UserRepository.java index 55b91e0..cd490ad 100644 --- a/src/main/java/fr/plil/sio/web/mvc/UserRepository.java +++ b/src/main/java/fr/plil/sio/web/mvc/UserRepository.java @@ -1,8 +1,12 @@ package fr.plil.sio.web.mvc; +import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository { User findByUsername(String username); + List findDettesByUsername(String username); + + } diff --git a/src/main/java/fr/plil/sio/web/mvc/UserRestController.java b/src/main/java/fr/plil/sio/web/mvc/UserRestController.java index a646a59..b4df38f 100644 --- a/src/main/java/fr/plil/sio/web/mvc/UserRestController.java +++ b/src/main/java/fr/plil/sio/web/mvc/UserRestController.java @@ -7,6 +7,7 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.List; +import org.springframework.web.bind.annotation.RequestParam; @RestController public class UserRestController { @@ -23,4 +24,15 @@ public class UserRestController { public User listUsers(@PathVariable String username) { return userService.findByUsername(username); } -} \ No newline at end of file + + @RequestMapping(value = "/api/debts/{username}/", method = RequestMethod.GET) + public List listDettes(@PathVariable String username) { + return userService.findDettesByUsername(username); + } + + @RequestMapping(value = "/api/addDette/", method = RequestMethod.POST) + public boolean addDette(@RequestParam(value="username",required=false) String username,@RequestParam(value="sommeDette",required=false) String sommeDette) { + return userService.addDette(username,sommeDette); + } + +} diff --git a/src/main/java/fr/plil/sio/web/mvc/UserService.java b/src/main/java/fr/plil/sio/web/mvc/UserService.java index 31b70ce..756c762 100644 --- a/src/main/java/fr/plil/sio/web/mvc/UserService.java +++ b/src/main/java/fr/plil/sio/web/mvc/UserService.java @@ -1,12 +1,17 @@ package fr.plil.sio.web.mvc; import java.util.List; +import org.springframework.web.bind.annotation.ResponseBody; public interface UserService { User createUser(String username, String password); User findByUsername(String username); + + List findDettesByUsername(String username); List findAll(); + + boolean addDette(String username,String sommeDette); } diff --git a/src/main/java/fr/plil/sio/web/mvc/UserServiceImpl.java b/src/main/java/fr/plil/sio/web/mvc/UserServiceImpl.java index 3de7711..01dd401 100644 --- a/src/main/java/fr/plil/sio/web/mvc/UserServiceImpl.java +++ b/src/main/java/fr/plil/sio/web/mvc/UserServiceImpl.java @@ -8,6 +8,7 @@ import javax.annotation.Resource; import java.util.HashSet; import java.util.List; import java.util.Set; +import org.springframework.web.bind.annotation.ResponseBody; @Service("userService") public class UserServiceImpl implements UserService { @@ -21,6 +22,9 @@ public class UserServiceImpl implements UserService { @Resource private PasswordEncoder passwordEncoder; + @Resource + private SecurityService securityService; + @Override @Transactional public User createUser(String username, String password) { @@ -42,7 +46,39 @@ public class UserServiceImpl implements UserService { @Override @Transactional(readOnly = true) + public List findDettesByUsername(String username) { + return userRepository.findDettesByUsername(username); + } + + @Override + @Transactional(readOnly = true) public List findAll() { return userRepository.findAll(); } + + @Override + @Transactional + public boolean addDette(String username, String sommeDette) { + //Get the holder of debt + User user = userRepository.findByUsername(username); + + //Get connected user + // Authentication auth = SecurityContextHolder.getContext().getAuthentication(); + String connectedUsername = securityService.findLoggedInUsername(); + User connectedUser = userRepository.findByUsername(connectedUsername); + + //Set dette + List dettes = user.getDettes(); + List newDettes = user.getDettes(); + Dette d = new Dette(); + Double dSomme = Double.parseDouble(sommeDette); + d.setSommeDette(dSomme); + d.setHolderOfDebt(connectedUser); + d.setDueToUser(user); + newDettes.add(d); + connectedUser.setDettes(newDettes); + + return true; + } + } diff --git a/src/main/resources/import.sql b/src/main/resources/import.sql index d376a87..8e97b2a 100644 --- a/src/main/resources/import.sql +++ b/src/main/resources/import.sql @@ -1,4 +1,9 @@ INSERT INTO USER_T (USERNAME_F, PASSWORD_F) VALUES ('admin', '$2a$04$/87gxfQlNqMNRvI/ILyZ/.F8Bk2/t2RuWoZXE1upQHeUglbjTYIIa'); +INSERT INTO USER_T (USERNAME_F, PASSWORD_F) VALUES ('test', '$2a$04$/87gxfQlNqMNRvI/ILyZ/.F8Bk2/t2RuWoZXE1upQHeUglbjTYIIa'); +INSERT INTO USER_T (USERNAME_F, PASSWORD_F) VALUES ('test1', '$2a$04$/87gxfQlNqMNRvI/ILyZ/.F8Bk2/t2RuWoZXE1upQHeUglbjTYIIa'); +INSERT INTO USER_T (USERNAME_F, PASSWORD_F) VALUES ('test2', '$2a$04$/87gxfQlNqMNRvI/ILyZ/.F8Bk2/t2RuWoZXE1upQHeUglbjTYIIa'); +INSERT INTO USER_T (USERNAME_F, PASSWORD_F) VALUES ('test3', '$2a$04$/87gxfQlNqMNRvI/ILyZ/.F8Bk2/t2RuWoZXE1upQHeUglbjTYIIa'); +INSERT INTO USER_T (USERNAME_F, PASSWORD_F) VALUES ('test4', '$2a$04$/87gxfQlNqMNRvI/ILyZ/.F8Bk2/t2RuWoZXE1upQHeUglbjTYIIa'); INSERT INTO ROLE_T (NAME_F) VALUES ('ROLE_ADMIN'); INSERT INTO ROLE_T (NAME_F) VALUES ('ROLE_USER'); INSERT INTO USER_ROLE_T (USER_ID, ROLE_ID) VALUES ((SELECT USER_ID FROM USER_T WHERE USERNAME_F = 'admin'), (SELECT ROLE_ID FROM ROLE_T WHERE NAME_F = 'ROLE_ADMIN')); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/pages/footer.jsp b/src/main/webapp/WEB-INF/pages/footer.jsp index 00d87c2..f357a6d 100644 --- a/src/main/webapp/WEB-INF/pages/footer.jsp +++ b/src/main/webapp/WEB-INF/pages/footer.jsp @@ -1,3 +1,4 @@ + diff --git a/src/main/webapp/WEB-INF/pages/header.jsp b/src/main/webapp/WEB-INF/pages/header.jsp index 88c8a46..6cebc09 100644 --- a/src/main/webapp/WEB-INF/pages/header.jsp +++ b/src/main/webapp/WEB-INF/pages/header.jsp @@ -6,3 +6,4 @@ <%= request.getAttribute("pageTitle") %> + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/pages/viewUsers.jsp b/src/main/webapp/WEB-INF/pages/viewUsers.jsp index 673cc50..f436446 100644 --- a/src/main/webapp/WEB-INF/pages/viewUsers.jsp +++ b/src/main/webapp/WEB-INF/pages/viewUsers.jsp @@ -5,29 +5,28 @@ - -

- -

${userSession.username} !

- - - - - - - - - - - - - - -
${user.username}
- + + +
+
+ + + + + +
+ +
+ + + +
+ + + \ No newline at end of file diff --git a/src/main/webapp/js/kawafile.js b/src/main/webapp/js/kawafile.js new file mode 100644 index 0000000..a70d6b1 --- /dev/null +++ b/src/main/webapp/js/kawafile.js @@ -0,0 +1,57 @@ +var debtsOfUser = []; + +function getDebtsOfUser(username){ + var url = "/api/userDebts"+username; + + $.getJson(url,function(d){ + debtsOfUser = d; + }); +} + +function updateDebtOfUser(){ + + var url ="/api/addDette/"; + + + + + var user = $("#username").val(); + var dette = $("#sommeDette").val(); + + var requestData = { + 'username':user, + 'sommeDette':dette + }; + + + + +// var dette = { +// username:$("#username").val(), +// sommeDette : $("#sommeDette").val() +// }; +// console.log(dette); +// var url ="/api/addDette/"; +// + $.ajax({ + url:url, + method:"POST", + data:requestData + }).done(function(d){ + alert("Ok"); + }).success(function(d){ + console.log(d); + }); +// +} + + +(function(){ + 'use strict'; + + + + + +})(); + diff --git a/src/test/java/fr/plil/sio/web/mvc/UserRepositoryTest.java b/src/test/java/fr/plil/sio/web/mvc/UserRepositoryTest.java index b9b2b42..8f0779b 100644 --- a/src/test/java/fr/plil/sio/web/mvc/UserRepositoryTest.java +++ b/src/test/java/fr/plil/sio/web/mvc/UserRepositoryTest.java @@ -21,7 +21,7 @@ public class UserRepositoryTest { @Test public void testAdminPresent() { - assertEquals(1, userRepository.findAll().size()); + assertEquals(6, userRepository.findAll().size()); assertNotNull(userRepository.findByUsername("admin")); assertEquals("admin", userRepository.findByUsername("admin").getUsername()); } -- libgit2 0.21.2