From d13ad6510241e19171f8b9fd9ec6df5f79542768 Mon Sep 17 00:00:00 2001 From: Parpaillax Date: Tue, 30 Apr 2024 12:17:59 +0200 Subject: [PATCH] update article + retrait --- .../fr/eni/enchere/bll/ArticleService.java | 2 +- .../eni/enchere/bll/ArticleServiceImpl.java | 4 +- .../fr/eni/enchere/bll/RetraitService.java | 1 + .../eni/enchere/bll/RetraitServiceImpl.java | 5 + .../controllers/ArticleController.java | 123 +++++++++++++++++- .../fr/eni/enchere/dal/ArticleRepository.java | 2 +- .../enchere/dal/ArticleRepositoryImpl.java | 14 +- .../fr/eni/enchere/dal/RetraitRepository.java | 1 + .../enchere/dal/RetraitRepositoryImpl.java | 17 ++- src/main/resources/templates/article.html | 10 +- src/main/resources/templates/editArticle.html | 45 ++++--- 11 files changed, 194 insertions(+), 30 deletions(-) diff --git a/src/main/java/fr/eni/enchere/bll/ArticleService.java b/src/main/java/fr/eni/enchere/bll/ArticleService.java index f87c72b..15bddee 100644 --- a/src/main/java/fr/eni/enchere/bll/ArticleService.java +++ b/src/main/java/fr/eni/enchere/bll/ArticleService.java @@ -13,7 +13,7 @@ public interface ArticleService { Article findArticleById(int id); int saveArticle(Article article); void deleteArticle(int id); - void updateArticle(int id); + int updateArticle(Article article); List
findArticleByTitle(String title); Page
searchArticlePageable(SearchArticleCritere critere, Pageable pageable); } diff --git a/src/main/java/fr/eni/enchere/bll/ArticleServiceImpl.java b/src/main/java/fr/eni/enchere/bll/ArticleServiceImpl.java index 7f22302..bacc1ba 100644 --- a/src/main/java/fr/eni/enchere/bll/ArticleServiceImpl.java +++ b/src/main/java/fr/eni/enchere/bll/ArticleServiceImpl.java @@ -38,8 +38,8 @@ public class ArticleServiceImpl implements ArticleService{ } @Override - public void updateArticle(int id) { - + public int updateArticle(Article article) { + return articleRepository.updateArticle(article); } @Override diff --git a/src/main/java/fr/eni/enchere/bll/RetraitService.java b/src/main/java/fr/eni/enchere/bll/RetraitService.java index da0340b..85084d2 100644 --- a/src/main/java/fr/eni/enchere/bll/RetraitService.java +++ b/src/main/java/fr/eni/enchere/bll/RetraitService.java @@ -5,4 +5,5 @@ import fr.eni.enchere.bo.Retrait; public interface RetraitService { Retrait findByNumArticle(int id); void setRetrait(Retrait retrait); + void updateRetrait(Retrait retrait); } diff --git a/src/main/java/fr/eni/enchere/bll/RetraitServiceImpl.java b/src/main/java/fr/eni/enchere/bll/RetraitServiceImpl.java index c7e31ae..08b1d6e 100644 --- a/src/main/java/fr/eni/enchere/bll/RetraitServiceImpl.java +++ b/src/main/java/fr/eni/enchere/bll/RetraitServiceImpl.java @@ -22,4 +22,9 @@ public class RetraitServiceImpl implements RetraitService { public void setRetrait(Retrait retrait) { retraitRepository.save(retrait); } + + @Override + public void updateRetrait(Retrait retrait) { + retraitRepository.update(retrait); + } } diff --git a/src/main/java/fr/eni/enchere/controllers/ArticleController.java b/src/main/java/fr/eni/enchere/controllers/ArticleController.java index 9f0d968..755e9d0 100644 --- a/src/main/java/fr/eni/enchere/controllers/ArticleController.java +++ b/src/main/java/fr/eni/enchere/controllers/ArticleController.java @@ -6,6 +6,7 @@ import fr.eni.enchere.bo.*; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cglib.core.Local; import org.springframework.http.ResponseEntity; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; @@ -82,6 +83,11 @@ public class ArticleController { if (maxMontantEnchere.isPresent()) { model.addAttribute("maxEnchere", maxMontantEnchere.get()); } + if (article.getId() != 0) { + model.addAttribute("imagePath", "/images/articles/" + article.getId() + ".jpg"); + } else { + model.addAttribute("imagePath", "/images/articles/no-data.jpg"); + } List errors = (List) session.getAttribute("errors"); if (errors != null) { model.addAttribute("errors", errors); @@ -239,11 +245,126 @@ public class ArticleController { Article article = this.articleService.findArticleById(id); Retrait retrait = this.retraitService.findByNumArticle(id); - System.out.println(retrait.getRue()); model.addAttribute("article", article); model.addAttribute("retrait", retrait); model.addAttribute("categories", this.categorieService.findAllCategories()); return "editArticle"; } + @PostMapping("/edit") + public String edit(@ModelAttribute("article") Article article, + @ModelAttribute("retrait") Retrait retrait, + @RequestParam("dateDebut") String dateDebut, + @RequestParam("dateFin") String dateFin, + RedirectAttributes redirectAttributes) { + //Récupérer l'utilisateur pour set l'article + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + String username = authentication.getName(); + UserProfil userProfile = userService.utilisateurByName(username); + article.setNoUtilisateur(userProfile.getId()); + //Reste de l'article + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + Date dDateDebut = null; + Date dDateFin = null; + try { + dDateDebut = format.parse(dateDebut); + dDateFin = format.parse(dateFin); + } catch (ParseException e) { + redirectAttributes.addAttribute("erreur", "La date de début n'est pas valide."); + redirectAttributes.addAttribute("erreur", "La date de fin n'est pas valide."); + } + article.setDateDebutEnch(dDateDebut); + article.setDateFinEnch(dDateFin); + //Vérification du formulaire + //Vérification du nom de l'article + String regex = "^[a-zA-Z0-9 ]*$"; + if (article.getNom().length() < 3){ + redirectAttributes.addAttribute("erreur", "Le nom de l'article doit contenir au moin 3 caractères."); + return "redirect:/article/edit?id="+article.getId(); + } + if (!Pattern.matches(regex, article.getNom())){ + redirectAttributes.addAttribute("erreur", "Le nom de l'article ne doit pas contenir de caractère speciaux."); + return "redirect:/article/edit?id="+article.getId(); + } + //Vérification description de l'article + if (article.getDesc().length() < 20){ + redirectAttributes.addAttribute("erreur", "La description de l'article doit contenir au moin 20 caractères."); + return "redirect:/article/edit?id="+article.getId(); + } + //Vérification de la photo + if (article.getPhoto() != null && !article.getPhoto().isEmpty()) { + if (article.getPhoto().getSize() > 5 * 1024 * 1024) { + redirectAttributes.addAttribute("erreur", "La photo ne doit pas faire plus de 5 Mo."); + return "redirect:/article/edit?id="+article.getId(); + } + if (!article.getPhoto().getOriginalFilename().toLowerCase().endsWith(".jpg")) { + redirectAttributes.addAttribute("erreur", "L'image doit avoir une extension .jpg."); + return "redirect:/article/edit?id="+article.getId(); + } + } + //Vérification du prix initial + if (article.getPrixInitial() > 2000000000 && article.getPrixInitial() < 0){ + redirectAttributes.addAttribute("erreur", "Le prix doit être compris entre 0 et 2 000 000 000 crédits."); + return "redirect:/article/edit?id="+article.getId(); + } + //Vérifier les dates + LocalDate dateDebutEnch = LocalDate.parse(dateDebut); + LocalDate dateActuelle = LocalDate.now(); + if (dateDebutEnch.isBefore(dateActuelle)) { + redirectAttributes.addAttribute("erreur", "La date de début d'enchère ne peux pas être infèrieur à la date du jour."); + return "redirect:/article/edit?id="+article.getId(); + } + LocalDate dateFinEnch = LocalDate.parse(dateFin); + LocalDate datePlusUnJour = LocalDate.now().plusDays(1); + if (dateFinEnch.isBefore(datePlusUnJour)) { + redirectAttributes.addAttribute("erreur", "La date de début d'enchère ne peux pas être infàrieur à la date du jour + 1."); + return "redirect:/article/edit?id="+article.getId(); + } + + //Vérification rue + if (!Pattern.matches("^[a-zA-Z0-9 ]+$", retrait.getRue())){ + redirectAttributes.addAttribute("erreur", "Le rue n'est pas valide."); + return "redirect:/article/edit?id="+article.getId(); + } + if (retrait.getRue().isEmpty()){ + redirectAttributes.addAttribute("erreur", "Entrer une rue."); + return "redirect:/article/edit?id="+article.getId(); + } + //Vérifier code postal et ville + if(Pattern.matches("^\\d{5}$", retrait.getCode_postale())){ + //Récupérer les villes en fonction du code postal + RestTemplate restTemplate = new RestTemplate(); + List villeCodePostal = new ArrayList<>(); // Initialisez la liste pour éviter les NullPointerException + String apiUrl = API_URL + retrait.getCode_postale(); + ResponseEntity response = restTemplate.getForEntity(apiUrl, JsonNode.class); // Désérialiser en JsonNode + if (response.getStatusCode().is2xxSuccessful()) { + JsonNode responseBody = response.getBody(); + if (responseBody.isArray()) { // Vérifiez si le corps de la réponse est un tableau JSON + for (JsonNode node : responseBody) { + String cityName = node.get("nomCommune").asText(); + villeCodePostal.add(cityName); + } + } else { + redirectAttributes.addAttribute("erreur", "Une erreur est survenue !"); + return "redirect:/article/edit?id="+article.getId(); + } + if (!villeCodePostal.contains(userProfile.getVille())) { + String showCity = String.join(", ", villeCodePostal); + redirectAttributes.addAttribute("erreur", "Essayer : " + showCity); + return "redirect:/article/edit?id="+article.getId(); + } + } else { + redirectAttributes.addAttribute("erreur", "La ville n'est pas valide."); + return "redirect:/article/edit?id="+article.getId(); + } + } else { + redirectAttributes.addAttribute("erreur", "Le code postal n'est pas valide."); + return "redirect:/article/edit?id="+article.getId(); + } + //Validation du formulaire + retrait.setNumArticle(articleService.updateArticle(article)); + retraitService.updateRetrait(retrait); + return "redirect:/accueil"; + } + } diff --git a/src/main/java/fr/eni/enchere/dal/ArticleRepository.java b/src/main/java/fr/eni/enchere/dal/ArticleRepository.java index 5d6c084..3f2d7a2 100644 --- a/src/main/java/fr/eni/enchere/dal/ArticleRepository.java +++ b/src/main/java/fr/eni/enchere/dal/ArticleRepository.java @@ -14,5 +14,5 @@ public interface ArticleRepository { List
findArticleByTitle(String title); int saveArticle(Article article); void deleteArticle(int id); - void updateArticle(int id); + int updateArticle(Article article); } diff --git a/src/main/java/fr/eni/enchere/dal/ArticleRepositoryImpl.java b/src/main/java/fr/eni/enchere/dal/ArticleRepositoryImpl.java index 016c4f4..f092793 100644 --- a/src/main/java/fr/eni/enchere/dal/ArticleRepositoryImpl.java +++ b/src/main/java/fr/eni/enchere/dal/ArticleRepositoryImpl.java @@ -168,7 +168,6 @@ public class ArticleRepositoryImpl implements ArticleRepository { sql.append(")"); } - System.out.println(); // Compte le nombre total d'articles int totalCount = countArticlePageable(critere); @@ -334,7 +333,16 @@ public class ArticleRepositoryImpl implements ArticleRepository { } @Override - public void updateArticle(int id) { - + public int updateArticle(Article article) { + String sql = "UPDATE ARTICLES_VENDUS " + + "SET nom_article = ?, " + + "description = ?," + + "date_debut_encheres = ?," + + "date_fin_encheres = ?," + + "prix_initial = ?," + + "no_categorie = ? " + + "WHERE no_article = ?"; + jdbcTemplate.update(sql, article.getNom(), article.getDesc(), article.getDateDebutEnch(), article.getDateFinEnch(), article.getPrixInitial(), article.getNumCategorie(), article.getId()); + return article.getId(); } } diff --git a/src/main/java/fr/eni/enchere/dal/RetraitRepository.java b/src/main/java/fr/eni/enchere/dal/RetraitRepository.java index 4097073..270ae57 100644 --- a/src/main/java/fr/eni/enchere/dal/RetraitRepository.java +++ b/src/main/java/fr/eni/enchere/dal/RetraitRepository.java @@ -6,4 +6,5 @@ public interface RetraitRepository { Retrait findById(int id); Retrait findByNumArticle(int idArticle); void save(Retrait retrait); + void update(Retrait retrait); } diff --git a/src/main/java/fr/eni/enchere/dal/RetraitRepositoryImpl.java b/src/main/java/fr/eni/enchere/dal/RetraitRepositoryImpl.java index 49718b3..aed96cf 100644 --- a/src/main/java/fr/eni/enchere/dal/RetraitRepositoryImpl.java +++ b/src/main/java/fr/eni/enchere/dal/RetraitRepositoryImpl.java @@ -47,7 +47,11 @@ public class RetraitRepositoryImpl implements RetraitRepository { public Retrait findByNumArticle(int numArticle) { String sql = "select * from RETRAITS where no_article = ?"; Retrait retrait = jdbcTemplate.queryForObject(sql, new RetraitRowMapper(), numArticle); - return retrait; + if (retrait == null) { + return null; + } else { + return retrait; + } } @Override @@ -56,7 +60,6 @@ public class RetraitRepositoryImpl implements RetraitRepository { MapSqlParameterSource parametersIsUpdate = new MapSqlParameterSource(); parametersIsUpdate.addValue("numArticle", retrait.getNumArticle()); int count = namedJdbcTemplate.queryForObject(sqlIsUpdate, parametersIsUpdate, Integer.class); - System.out.println(count); if (count > 0) { //Mettre à jour les informations @@ -71,4 +74,14 @@ public class RetraitRepositoryImpl implements RetraitRepository { namedJdbcTemplate.update(sql, parameters); } } + + @Override + public void update(Retrait retrait) { + String sql = "UPDATE RETRAITS " + + "SET rue = ?, " + + "code_postal = ?, " + + "ville = ? " + + "WHERE no_article = ?"; + jdbcTemplate.update(sql, retrait.getRue(), retrait.getCode_postale(), retrait.getVille(), retrait.getNumArticle()); + } } diff --git a/src/main/resources/templates/article.html b/src/main/resources/templates/article.html index 6a7e67e..ef34f15 100644 --- a/src/main/resources/templates/article.html +++ b/src/main/resources/templates/article.html @@ -36,6 +36,11 @@ +
+ + +
+
@@ -57,7 +62,10 @@ - +
+ + +
diff --git a/src/main/resources/templates/editArticle.html b/src/main/resources/templates/editArticle.html index 0850f71..61bf3a8 100644 --- a/src/main/resources/templates/editArticle.html +++ b/src/main/resources/templates/editArticle.html @@ -7,9 +7,10 @@

-
+
+
@@ -28,7 +29,7 @@
- +
@@ -37,30 +38,36 @@
- - + +
- - + +

Retrait

- -
- - +
+ +
+ + +
+ +
+ + +
+ +
+ + +
- -
- - -
- -
- - +
+ +