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 @@
+