diff --git a/src/main/java/fr/eni/enchere/bll/BankService.java b/src/main/java/fr/eni/enchere/bll/BankService.java new file mode 100644 index 0000000..bb2e39d --- /dev/null +++ b/src/main/java/fr/eni/enchere/bll/BankService.java @@ -0,0 +1,8 @@ +package fr.eni.enchere.bll; + +import fr.eni.enchere.bo.Bank; + +public interface BankService { + Bank isValideCart(String cartNumber, String cartExpired, int cartCVV); + void setCredit(Bank bank, float ammount); +} diff --git a/src/main/java/fr/eni/enchere/bll/BankServiceImpl.java b/src/main/java/fr/eni/enchere/bll/BankServiceImpl.java new file mode 100644 index 0000000..d735b2b --- /dev/null +++ b/src/main/java/fr/eni/enchere/bll/BankServiceImpl.java @@ -0,0 +1,25 @@ +package fr.eni.enchere.bll; + +import fr.eni.enchere.bo.Bank; +import fr.eni.enchere.dal.BankRepository; +import org.springframework.stereotype.Service; + +@Service +public class BankServiceImpl implements BankService { + + private BankRepository bankRepository; + + public BankServiceImpl(BankRepository bankRepository) { + this.bankRepository = bankRepository; + } + + @Override + public Bank isValideCart(String cartNumber, String cartExpired, int cartCVV) { + return bankRepository.verifCart(cartNumber, cartExpired, cartCVV); + } + + @Override + public void setCredit(Bank bank, float ammount) { + bankRepository.editAmmountCart(bank, ammount); + } +} diff --git a/src/main/java/fr/eni/enchere/bo/Bank.java b/src/main/java/fr/eni/enchere/bo/Bank.java new file mode 100644 index 0000000..5ebe042 --- /dev/null +++ b/src/main/java/fr/eni/enchere/bo/Bank.java @@ -0,0 +1,71 @@ +package fr.eni.enchere.bo; + +public class Bank { + + private int id; + private String cartNumber; + private String cartExpired; + private int cartCVV; + private String cartName; + private float cartAmount; + + public Bank(){} + + public Bank(int id, String cartNumber, String cartExpired, int cartCVV, String cartName, float cartAmount) { + setId(id); + setCartNumber(cartNumber); + setCartExpired(cartExpired); + setCartCVV(cartCVV); + setCartName(cartName); + setCartAmount(cartAmount); + } + + public float getCartAmount() { + return cartAmount; + } + + public void setCartAmount(float cartAmount) { + this.cartAmount = cartAmount; + } + + public String getCartName() { + return cartName; + } + + public void setCartName(String cartName) { + this.cartName = cartName; + } + + public int getCartCVV() { + return cartCVV; + } + + public void setCartCVV(int cartCVV) { + this.cartCVV = cartCVV; + } + + public String getCartExpired() { + return cartExpired; + } + + public void setCartExpired(String cartExpired) { + this.cartExpired = cartExpired; + } + + public String getCartNumber() { + return cartNumber; + } + + public void setCartNumber(String cartNumber) { + this.cartNumber = cartNumber; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + +} diff --git a/src/main/java/fr/eni/enchere/controllers/ArticleController.java b/src/main/java/fr/eni/enchere/controllers/ArticleController.java index 6665813..9dcdab5 100644 --- a/src/main/java/fr/eni/enchere/controllers/ArticleController.java +++ b/src/main/java/fr/eni/enchere/controllers/ArticleController.java @@ -93,7 +93,7 @@ public class ArticleController { } return "article"; } else { - return "redirect:/enchere"; + return "redirect:/login"; } } diff --git a/src/main/java/fr/eni/enchere/controllers/BankController.java b/src/main/java/fr/eni/enchere/controllers/BankController.java index 9382191..9fd79a2 100644 --- a/src/main/java/fr/eni/enchere/controllers/BankController.java +++ b/src/main/java/fr/eni/enchere/controllers/BankController.java @@ -1,16 +1,20 @@ package fr.eni.enchere.controllers; import fr.eni.enchere.bll.ArticleService; +import fr.eni.enchere.bll.BankService; import fr.eni.enchere.bll.UserService; +import fr.eni.enchere.bo.Bank; import fr.eni.enchere.bo.UserProfil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; + +import java.util.Calendar; +import java.util.regex.Pattern; @Controller() @RequestMapping("/bank") @@ -18,27 +22,84 @@ public class BankController { @Autowired private final UserService userService; + private BankService bankService; - public BankController(UserService userService) { + public BankController(UserService userService, BankService bankService) { this.userService = userService; + this.bankService = bankService; + } + + @GetMapping + public String home() { + return "redirect:/bank/home"; } @GetMapping("/home") public String homeCredit(Model model) { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - if (!authentication.getName().equals("anonymousUser")){ + if (authentication.getName().equals("anonymousUser")){ return "redirect:/enchere"; } - String username = authentication.getName(); - UserProfil userProfile = userService.utilisateurByName(username); - model.addAttribute("userProfile", userProfile); + model.addAttribute("bank", new Bank()); return "bank"; } @PostMapping("/checkout") - public String addCreditCheckout() { - - return "bank"; + public String addCreditCheckout(@ModelAttribute("bank") Bank infoBank, BindingResult result) { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + if (authentication.getName().equals("anonymousUser")){ + return "redirect:/accueil"; + } + String username = authentication.getName(); + UserProfil userProfile = userService.utilisateurByName(username); + //Vérification du prix demmander + if (infoBank.getCartAmount() > 2000000.0 || infoBank.getCartAmount() < 1.0){ + result.rejectValue("cartAmount", "error.bank", "Le prix demander est incorrect."); + } + //Vérification du numéro de la carte + // Expression régulière pour vérifier si la variable contient exactement 16 chiffres + if (!Pattern.matches("^\\d{16}$", infoBank.getCartNumber())){ + result.rejectValue("cartNumber", "error.bank", "Le numéro de la carte est invalide."); + } + //Vérification de la date d'expiration de la carte + if (!Pattern.matches("^(0[1-9]|1[0-2])/(1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|6[0-9]|7[0-9]|8[0-9]|9[0-9]|[0-9]{2,3})\\d{2}$", infoBank.getCartExpired())){ + result.rejectValue("cartExpired", "error.bank", "La date d'expiration est incorrecte."); + }else{ + Calendar calendar = Calendar.getInstance(); + int moisNow = calendar.get(Calendar.MONTH) + 1; + int anneeNow = calendar.get(Calendar.YEAR); + String[] parts = infoBank.getCartExpired().split("/"); + int mois = Integer.parseInt(parts[0]); + int annee = Integer.parseInt(parts[1]); + if (annee < anneeNow){ + result.rejectValue("cartExpired", "error.bank", "Votre carte est expiré."); + } + if(annee == anneeNow && mois < moisNow){ + result.rejectValue("cartExpired", "error.bank", "Votre carte est expiré."); + } + } + //Vérification de du CVV de la carte + if (!Pattern.matches("^\\d{3}$", String.valueOf(infoBank.getCartCVV()))){ + result.rejectValue("cartCVV", "error.bank", "Le CVV est incorrect."); + } + //Vérification du nom de la carte + if (infoBank.getCartName().isEmpty()){ + result.rejectValue("cartName", "error.bank", "Le titulaire de la carte est obligatoire."); + } + //Passer au payement + Bank bank = bankService.isValideCart(infoBank.getCartNumber(), infoBank.getCartExpired(), infoBank.getCartCVV()); + if (bank == null){ + result.rejectValue("cartName", "error.bank", "Votre paiement n'a pas aboutie."); + } + if (result.hasErrors()) { + return "bank"; + } + if (infoBank.getCartAmount() > bank.getCartAmount()){ + return "bankDeny"; + } + bankService.setCredit(bank, bank.getCartAmount()-infoBank.getCartAmount()); + userService.setCredit(userProfile.getCredit()+infoBank.getCartAmount(), userProfile.getId()); + return "bankAllow"; } } diff --git a/src/main/java/fr/eni/enchere/dal/BankRepository.java b/src/main/java/fr/eni/enchere/dal/BankRepository.java new file mode 100644 index 0000000..28b4d2e --- /dev/null +++ b/src/main/java/fr/eni/enchere/dal/BankRepository.java @@ -0,0 +1,8 @@ +package fr.eni.enchere.dal; + +import fr.eni.enchere.bo.Bank; + +public interface BankRepository { + Bank verifCart(String cartNumber, String cartExpired, int cartCVV); + void editAmmountCart(Bank bank, float ammount); +} diff --git a/src/main/java/fr/eni/enchere/dal/BankRepositoryImpl.java b/src/main/java/fr/eni/enchere/dal/BankRepositoryImpl.java new file mode 100644 index 0000000..1f1f3ec --- /dev/null +++ b/src/main/java/fr/eni/enchere/dal/BankRepositoryImpl.java @@ -0,0 +1,61 @@ +package fr.eni.enchere.dal; + +import fr.eni.enchere.bo.Bank; +import fr.eni.enchere.bo.ForgotPassword; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.EmptyResultDataAccessException; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.RowMapper; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.stereotype.Repository; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Calendar; + +@Repository +public class BankRepositoryImpl implements BankRepository { + + @Autowired + private final JdbcTemplate jdbcTemplate; + private NamedParameterJdbcTemplate namedParameterJdbcTemplate; + + public BankRepositoryImpl(JdbcTemplate jdbcTemplate, NamedParameterJdbcTemplate namedParameterJdbcTemplate) { + this.jdbcTemplate = jdbcTemplate; + this.namedParameterJdbcTemplate = namedParameterJdbcTemplate; + } + + public class BankRowMapper implements RowMapper { + @Override + public Bank mapRow(ResultSet rs, int rowNum) throws SQLException { + Bank bank = new Bank(); + bank.setId(rs.getInt("id")); + bank.setCartNumber(rs.getString("cardNumber")); + bank.setCartExpired(rs.getString("cardExpired")); + bank.setCartCVV(rs.getInt("cardCVV")); + bank.setCartName(rs.getString("cardName")); + bank.setCartAmount(rs.getFloat("credit")); + return bank; + } + } + + @Override + public Bank verifCart(String cartNumber, String cartExpired, int cartCVV) { + String sql = "SELECT * FROM CREDITCARD WHERE cardNumber = ? AND cardExpired = ? AND cardCVV = ?"; + try { + return jdbcTemplate.queryForObject(sql, new BankRepositoryImpl.BankRowMapper(), cartNumber, cartExpired, cartCVV); + } catch (EmptyResultDataAccessException e) { + // Aucun résultat trouvé, retourne null + return null; + } + } + + @Override + public void editAmmountCart(Bank bank, float ammount) { + String sql = "UPDATE CREDITCARD SET credit = ? WHERE cardNumber = ? AND cardExpired = ? AND cardCVV = ?"; + jdbcTemplate.update(sql, ammount, bank.getCartNumber(), bank.getCartExpired(), bank.getCartCVV()); + } + + +} diff --git a/src/main/java/fr/eni/enchere/security/WebSecurityConfig.java b/src/main/java/fr/eni/enchere/security/WebSecurityConfig.java index ebd4b22..b0b36e0 100644 --- a/src/main/java/fr/eni/enchere/security/WebSecurityConfig.java +++ b/src/main/java/fr/eni/enchere/security/WebSecurityConfig.java @@ -21,7 +21,7 @@ public class WebSecurityConfig{ http.authorizeHttpRequests((requests) -> requests .requestMatchers("/","/enchere", "/login", "/forgotPassword/**", "/inscription/**", "/searchArticle", "/article/show", "/change-language").permitAll() .requestMatchers("/css/**", "/images/**", "/assets/**", "/img/**", "/js/**", "/assets/**", "/i18n/**").permitAll() - .requestMatchers("/profil/**", "/article/new/**", "/article/update", "/article/delete").authenticated() + .requestMatchers("/profil/**", "/article/new/**", "/article/update", "/article/delete", "/bank/**").authenticated() .requestMatchers("/admin").hasRole("ADMIN") .anyRequest().authenticated()) .formLogin((form) -> form diff --git a/src/main/resources/templates/bank.html b/src/main/resources/templates/bank.html index 66cd939..4035b72 100644 --- a/src/main/resources/templates/bank.html +++ b/src/main/resources/templates/bank.html @@ -1,93 +1,61 @@ - + - -
-

Nouvelle vente

-
-
- - -
Ce champ est requis.
+ +
+
+ +
+ + +
+
    +
  • +
+
+
+
+ + +
+
    +
  • +
+
+
+
+ + +
+
    +
  • +
+
+
+
+ + +
+
    +
  • +
+
+
+
+ + +
+
    +
  • +
+
+
+ + +
- -
- - -
Ce champ est requis.
-
- -
- - -
Veuillez sélectionner une catégorie.
-
- -
- - -
- -
- - -
Ce champ est requis.
-
- -
- - -
Ce champ est requis.
-
- -
- - -
Ce champ est requis.
-
- -

Retrait

-
- - -
Ce champ est requis.
-
-
- - -
Ce champ est requis.
-
-
- - -
Ce champ est requis.
-
- - - -
-

-
- -
- -
- -
- - - + diff --git a/src/main/resources/templates/bankAllow.html b/src/main/resources/templates/bankAllow.html new file mode 100644 index 0000000..210e5c5 --- /dev/null +++ b/src/main/resources/templates/bankAllow.html @@ -0,0 +1,15 @@ + + + + + + +
+
+
+

Le paiement a été validé !

+
+
+
+ + \ No newline at end of file diff --git a/src/main/resources/templates/bankDeny.html b/src/main/resources/templates/bankDeny.html new file mode 100644 index 0000000..c1abd02 --- /dev/null +++ b/src/main/resources/templates/bankDeny.html @@ -0,0 +1,15 @@ + + + + + + +
+
+
+

Le paiement a été refusé !

+
+
+
+ + \ No newline at end of file