diff --git a/pom.xml b/pom.xml
index fb24291..f834c47 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,6 +1,6 @@
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
org.springframework.boot
@@ -32,11 +32,7 @@
runtime
true
-
- com.h2database
- h2
- runtime
-
+
org.projectlombok
lombok
@@ -53,8 +49,35 @@
itextpdf
5.5.13.3
+
+
+ com.itextpdf
+ kernel
+ 8.0.4
+
+
+
+ com.itextpdf
+ layout
+ 8.0.4
+
+
+
+ org.postgresql
+ postgresql
+ 42.7.3
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+ com.h2database
+ h2
+ runtime
+
-
+
@@ -73,4 +96,4 @@
-
+
\ No newline at end of file
diff --git a/src/main/java/com/allali/Stock/StockApplication.java b/src/main/java/com/allali/Stock/StockApplication.java
index 60779aa..ad087c2 100644
--- a/src/main/java/com/allali/Stock/StockApplication.java
+++ b/src/main/java/com/allali/Stock/StockApplication.java
@@ -23,4 +23,6 @@ CommandLineRunner start(Initiation initiation){
//initiation.initTransition2();
};
}
-}
+
+ }
+
diff --git a/src/main/java/com/allali/Stock/config/SecurityConfiguration.java b/src/main/java/com/allali/Stock/config/SecurityConfiguration.java
new file mode 100644
index 0000000..b45a7b7
--- /dev/null
+++ b/src/main/java/com/allali/Stock/config/SecurityConfiguration.java
@@ -0,0 +1,50 @@
+package com.allali.Stock.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
+import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer;
+import org.springframework.security.core.userdetails.User;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.security.provisioning.InMemoryUserDetailsManager;
+import org.springframework.security.web.SecurityFilterChain;
+
+import static org.springframework.security.config.Customizer.withDefaults;
+
+@Configuration
+public class SecurityConfiguration {
+
+ @Bean
+ public PasswordEncoder passwordEncoder(){
+ return new BCryptPasswordEncoder();
+ }
+
+ @Bean
+ public UserDetailsService userDetailsService(){
+ UserDetails user = User.builder()
+ .username("admin")
+ .password(passwordEncoder().encode("password"))
+ .roles("USER")
+ .build();
+ return new InMemoryUserDetailsManager(user);
+ }
+ @Bean
+ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
+ http
+ .authorizeHttpRequests(authorize -> authorize
+ .requestMatchers("/h2-console/**","/api/v1/**").permitAll() // Allow access to H2 console without authentication
+ .anyRequest().authenticated()) // All other requests require authentication
+ .formLogin(withDefaults()) // Enable form-based login with default configuration
+ .httpBasic(withDefaults()) // Enable HTTP Basic authentication with default configuration
+ .csrf(AbstractHttpConfigurer::disable) // Disable CSRF protection for H2 console
+ .headers(headers -> headers.frameOptions(HeadersConfigurer.FrameOptionsConfig::sameOrigin)); // Disable frame options for H2 console
+
+ return http.build();
+ }
+
+
+}
diff --git a/src/main/java/com/allali/Stock/controllers/MessageController.java b/src/main/java/com/allali/Stock/controllers/MessageController.java
new file mode 100644
index 0000000..d4aaaf8
--- /dev/null
+++ b/src/main/java/com/allali/Stock/controllers/MessageController.java
@@ -0,0 +1,16 @@
+package com.allali.Stock.controllers;
+
+
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class MessageController {
+
+ @GetMapping("/ok")
+ public String getMessage() {
+ return "Hello, world!";
+ }
+}
+
diff --git a/src/main/java/com/allali/Stock/controllers/TransitionController.java b/src/main/java/com/allali/Stock/controllers/TransitionController.java
index a7d9178..2c37362 100644
--- a/src/main/java/com/allali/Stock/controllers/TransitionController.java
+++ b/src/main/java/com/allali/Stock/controllers/TransitionController.java
@@ -37,11 +37,13 @@ public ResponseEntity addTransitionClient(@RequestBody Transition tr
@GetMapping("/all")
public List getAllTransition() {
- List transitions = transitionService.findAll();
- return transitions;
+ return transitionService.findAll();
}
- //@DeleteMapping("/delete/{id}")
+ @DeleteMapping("/{id}")
public ResponseEntity deleteTransition(@PathVariable Long id) {
transitionService.deleteTransition(id);
return ResponseEntity.noContent().build();
- }}
\ No newline at end of file
+ }
+
+
+}
diff --git a/src/main/java/com/allali/Stock/entitie/Article.java b/src/main/java/com/allali/Stock/entitie/Article.java
index b665448..98465e1 100644
--- a/src/main/java/com/allali/Stock/entitie/Article.java
+++ b/src/main/java/com/allali/Stock/entitie/Article.java
@@ -18,13 +18,18 @@ public class Article {
private String description ;
private Double price ;
private String brand ;
- @ManyToOne
+
+ // Lazy loading for category
+ @ManyToOne(fetch = FetchType.LAZY)
@JsonIgnore
private Category category ;
- @ManyToMany
+
+ // Lazy loading for list of fournisseurs
+ @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JsonIgnore
private List list = new ArrayList<>() ;
- @ManyToOne
- private Transition transition ;
+ // Lazy loading for transition
+ @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
+ private Transition transition ;
}
diff --git a/src/main/java/com/allali/Stock/entitie/Client.java b/src/main/java/com/allali/Stock/entitie/Client.java
index ccd92dc..98bc3df 100644
--- a/src/main/java/com/allali/Stock/entitie/Client.java
+++ b/src/main/java/com/allali/Stock/entitie/Client.java
@@ -1,6 +1,7 @@
package com.allali.Stock.entitie;
+import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
@@ -15,7 +16,7 @@
@AllArgsConstructor @NoArgsConstructor
public class Client extends Users {
-
+ @JsonIgnore
@OneToMany(mappedBy = "client" , fetch = FetchType.LAZY,cascade = CascadeType.ALL)
private List transitionList = new ArrayList<>() ;
}
diff --git a/src/main/java/com/allali/Stock/entitie/Transition.java b/src/main/java/com/allali/Stock/entitie/Transition.java
index d7fc3b4..d0dc0d7 100644
--- a/src/main/java/com/allali/Stock/entitie/Transition.java
+++ b/src/main/java/com/allali/Stock/entitie/Transition.java
@@ -27,7 +27,7 @@ public class Transition {
private Fournisseur fournisseur ;
@OneToMany(mappedBy = "transition" , fetch = FetchType.LAZY ,cascade = CascadeType.ALL, orphanRemoval = true)
@JsonIgnore
- private List articleList = new ArrayList<>() ;
+ private List article = new ArrayList<>() ;
@OneToMany(mappedBy = "transition" , fetch = FetchType.LAZY,cascade = CascadeType.ALL)
@JsonIgnore
private List prixAchats ;
diff --git a/src/main/java/com/allali/Stock/entitie/Users.java b/src/main/java/com/allali/Stock/entitie/Users.java
index 21f29fb..bb3874c 100644
--- a/src/main/java/com/allali/Stock/entitie/Users.java
+++ b/src/main/java/com/allali/Stock/entitie/Users.java
@@ -24,8 +24,12 @@ public class Users {
private String address ;
private String phoneNumber ;
private Date dateNaissance ;
- @ManyToMany
+
+ // Lazy loading for list of roles
+ @ManyToMany(fetch = FetchType.LAZY)
private List list = new ArrayList<>();
- @ManyToMany
- private List notificationList = new ArrayList<>() ;
+
+ // Lazy loading for list of notifications
+ @ManyToMany(fetch = FetchType.LAZY)
+ private List notificationList = new ArrayList<>();
}
diff --git a/src/main/java/com/allali/Stock/service/Initiation.java b/src/main/java/com/allali/Stock/service/Initiation.java
index 3eec127..0767aa2 100644
--- a/src/main/java/com/allali/Stock/service/Initiation.java
+++ b/src/main/java/com/allali/Stock/service/Initiation.java
@@ -66,7 +66,7 @@ public void initTransition(){
transition.setStatus(TransactionStatus.COMPLETED);
transition.setTransitionType(TransitionType.ACHAT);
transition.setClient((Client) user);
- transition.getArticleList().add(article);
+ transition.getArticle().add(article);
((Client) user).getTransitionList().add(transition);
userRepository.save(user);
transitionRepository.save(transition);
@@ -75,7 +75,7 @@ public void initTransition(){
}
public void initTransition2(){
userRepository.findAll().forEach(user -> {
- if(user instanceof Fournisseur) {
+ if(user instanceof Fournisseur) {
Article article = articleRepository.findById(2L).orElse(null);
Transition transition1 = new Transition();
transition1.setTotalAmount(2004.5);
@@ -83,7 +83,7 @@ public void initTransition2(){
transition1.setStatus(TransactionStatus.COMPLETED);
transition1.setTransitionType(TransitionType.ACHAT);
transition1.setFournisseur((Fournisseur)user);
- transition1.getArticleList().add(article);
+ transition1.getArticle().add(article);
((Fournisseur) user).getTransitionList().add(transition1);
article.setTransition(transition1);
articleRepository.save(article);
@@ -117,4 +117,4 @@ public void initClient(){
});
}
-}
+}
\ No newline at end of file
diff --git a/src/main/java/com/allali/Stock/service/transition/TransitionServiceImpl.java b/src/main/java/com/allali/Stock/service/transition/TransitionServiceImpl.java
index 4623397..a82e818 100644
--- a/src/main/java/com/allali/Stock/service/transition/TransitionServiceImpl.java
+++ b/src/main/java/com/allali/Stock/service/transition/TransitionServiceImpl.java
@@ -8,6 +8,7 @@
import com.allali.Stock.repositorie.UserRepository;
import com.allali.Stock.service.article.ArticleService;
import com.allali.Stock.service.users.UserService;
+import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
@@ -41,26 +42,23 @@ public Transition addTransitionClient(Transition transition, Long idClient, Long
// Set transaction details in the transition entity
transition.setTransactionDate(new Date());
transition.setTotalAmount(article.getPrice());
- client.getTransitionList().add(transition);
- userRepository.save(client);
- articleRepository.save(article);
-
- // Set client and article in the transition entity
+ // Set the client and article in the transition entity
transition.setClient(client);
- transition.getArticleList().add(article);
- Transition transition1 =transitionRepository.save(transition);
+ transition.getArticle().add(article);
- client.getTransitionList().add(transition1);
- article.setTransition(transition);
- userRepository.save(client);
- articleRepository.save(article);
+ // Add the transition to the client's transition list
+ client.getTransitionList().add(transition);
- return transition1 ;
+ // Save the client, which cascades to save the transition as well
+ userRepository.save(client);
+ return transition;
}
+
@Override
+ @JsonIgnore
public List findAll() {
return transitionRepository.findAll();
}
diff --git a/src/main/java/com/allali/Stock/service/users/UserService.java b/src/main/java/com/allali/Stock/service/users/UserService.java
index d098920..8c25fbd 100644
--- a/src/main/java/com/allali/Stock/service/users/UserService.java
+++ b/src/main/java/com/allali/Stock/service/users/UserService.java
@@ -6,7 +6,7 @@
import java.util.List;
-public interface UserService {
+public interface UserService {
public Fournisseur saveFournisseur(Fournisseur fournisseur);
Users saveUser(Users users);
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 23fc6b0..d4975a0 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1,4 +1,4 @@
spring.application.name=Stock
spring.datasource.url=jdbc:h2:mem:Stock
spring.h2.console.enabled=true
-server.port=2018
+server.port=2018
\ No newline at end of file