diff --git a/src/main/java/fr/eni/enchere/bo/Article.java b/src/main/java/fr/eni/enchere/bo/Article.java index 20ffac3..9719150 100644 --- a/src/main/java/fr/eni/enchere/bo/Article.java +++ b/src/main/java/fr/eni/enchere/bo/Article.java @@ -1,5 +1,7 @@ package fr.eni.enchere.bo; +import org.springframework.web.multipart.MultipartFile; + import java.util.Date; public class Article { @@ -7,18 +9,19 @@ public class Article { int id; String nom; String desc; - String photo; + MultipartFile photo; Date dateDebutEnch; Date dateFinEnch; float prixInitial; float prixVente; - UserProfil Utilisateur; + int Utilisateur; + String pseudoUtilisateur; int numCategorie; public Article() { } - public Article(int id, String nom, String desc, String photo, Date dateDebutEnch, Date dateFinEnch, float prixInitial, float prixVente, UserProfil Utilisateur, int numCategorie) { + public Article(int id, String nom, String desc, MultipartFile photo, Date dateDebutEnch, Date dateFinEnch, float prixInitial, float prixVente, int Utilisateur, String pseudoUtilisateur, int numCategorie) { setId(id); setNom(nom); setDesc(desc); @@ -27,7 +30,7 @@ public class Article { setDateFinEnch(dateFinEnch); setPrixInitial(prixInitial); setPrixVente(prixVente); - setUtilisateur(Utilisateur); + setNoUtilisateur(Utilisateur); setNumCategorie(numCategorie); } @@ -55,11 +58,11 @@ public class Article { this.desc = desc; } - public String getPhoto() { + public MultipartFile getPhoto() { return photo; } - public void setPhoto(String photo) { + public void setPhoto(MultipartFile photo) { this.photo = photo; } @@ -95,14 +98,22 @@ public class Article { this.prixVente = prixVente; } - public UserProfil getUtilisateur() { + public int getUtilisateur() { return Utilisateur; } - public void setUtilisateur(UserProfil Utilisateur) { + public void setNoUtilisateur(int Utilisateur) { this.Utilisateur = Utilisateur; } + public String getPseudoUtilisateur() { + return pseudoUtilisateur; + } + + public void setPseudoUtilisateur(String pseudoUtilisateur) { + this.pseudoUtilisateur = pseudoUtilisateur; + } + public int getNumCategorie() { return numCategorie; } diff --git a/src/main/java/fr/eni/enchere/controllers/ArticleController.java b/src/main/java/fr/eni/enchere/controllers/ArticleController.java index 81300e5..d52051f 100644 --- a/src/main/java/fr/eni/enchere/controllers/ArticleController.java +++ b/src/main/java/fr/eni/enchere/controllers/ArticleController.java @@ -8,9 +8,15 @@ import fr.eni.enchere.bo.Article; import fr.eni.enchere.bo.Retrait; 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.*; +import org.springframework.web.multipart.MultipartFile; + +import java.text.SimpleDateFormat; +import java.util.Date; @Controller() @RequestMapping("/article") @@ -31,7 +37,7 @@ public class ArticleController { @GetMapping public String viewArticle(Model model) { - return "accueil"; + return "redirect:/accueil"; } //Affichage d'un article @@ -60,15 +66,31 @@ public class ArticleController { } @PostMapping("/new") - public String newArticle(@RequestParam("article") Article article, @RequestParam("retrait") Retrait retrait) { - //Récupérer l'utilisateur pour set - System.out.println(article.getNumCategorie()); + public String newArticle(@ModelAttribute("article") Article article, + @RequestParam("rue") String rue, + @RequestParam("code_postal") String code_postal, + @RequestParam("ville") String ville, + @RequestParam("dateDebut") String dateDebut, + @RequestParam("dateFin") String datefin) { + //Récupérer l'utilisateur pour set l'article + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + String username = authentication.getName(); + UserProfil userProfile = userService.utilisateurByName(username); + article.setUtilisateur(userProfile.getId()); + //Récupérer le lieu de retrait + Retrait retrait = new Retrait(); + retrait.setRue(rue); + retrait.setCode_postale(code_postal); + retrait.setVille(ville); + //Reste de l'article + //Date dDateDebut = new SimpleDateFormat(dateDebut); + //article.setDateDebutEnch(); if (article.getId() == 0){ //Création d'un article + } else { //Mise à jour d'un article } - //articleService.saveArticle(article); return "redirect:/accueil"; } diff --git a/src/main/java/fr/eni/enchere/controllers/LanguageController.java b/src/main/java/fr/eni/enchere/controllers/LanguageController.java index 7ae9266..eca5ac3 100644 --- a/src/main/java/fr/eni/enchere/controllers/LanguageController.java +++ b/src/main/java/fr/eni/enchere/controllers/LanguageController.java @@ -7,19 +7,25 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.LocaleResolver; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; import org.springframework.web.servlet.support.RequestContextUtils; import java.util.Locale; @Controller public class LanguageController { + private final LocaleResolver localeResolver; + + public LanguageController(LocaleResolver localeResolver) { + this.localeResolver = localeResolver; + } @GetMapping("/change-language") - public String changeLanguage(HttpServletRequest request, HttpServletResponse response, @RequestParam("lang") String lang, @RequestHeader String referer) { + public String changeLanguage(HttpServletRequest request, HttpServletResponse response, @RequestParam("lang") String lang) { LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request); if (localeResolver != null) { - localeResolver.setLocale(request, response, new Locale(lang)); + localeResolver.setLocale(request, response, Locale.forLanguageTag(lang)); } - return "redirect:" + referer; + return "redirect:/"; } } diff --git a/src/main/java/fr/eni/enchere/dal/ArticleRepositoryImpl.java b/src/main/java/fr/eni/enchere/dal/ArticleRepositoryImpl.java index c75c4fc..bc68018 100644 --- a/src/main/java/fr/eni/enchere/dal/ArticleRepositoryImpl.java +++ b/src/main/java/fr/eni/enchere/dal/ArticleRepositoryImpl.java @@ -31,22 +31,16 @@ public class ArticleRepositoryImpl implements ArticleRepository { @Override public Article mapRow(ResultSet rs, int rowNum) throws SQLException { Article article = new Article(); - article.setId(rs.getInt("no_article")); - article.setNom(rs.getString("nom_article")); - article.setDesc(rs.getString("description")); - article.setDateDebutEnch(rs.getDate("date_debut_encheres")); - article.setDateFinEnch(rs.getDate("date_fin_encheres")); - article.setPrixInitial(rs.getFloat("prix_initial")); - article.setPrixVente(rs.getFloat("prix_vente")); - - UserProfil user = userService.utilisateurById(rs.getInt("no_utilisateur")); - if (user != null) { - article.setUtilisateur(user); - } else { - logger.error("erreur de l'utilisateur"); - } - - article.setNumCategorie(rs.getInt("no_categorie")); + article.setId(rs.getInt("a.no_article")); + article.setNom(rs.getString("a.nom_article")); + article.setDesc(rs.getString("a.description")); + article.setDateDebutEnch(rs.getDate("a.date_debut_encheres")); + article.setDateFinEnch(rs.getDate("a.date_fin_encheres")); + article.setPrixInitial(rs.getFloat("a.prix_initial")); + article.setPrixVente(rs.getFloat("a.prix_vente")); + article.setNoUtilisateur(rs.getInt("u.no_utilisateur")); + article.setPseudoUtilisateur(rs.getString("u.pseudo")); + article.setNumCategorie(rs.getInt("a.no_categorie")); return article; } } @@ -59,24 +53,26 @@ public class ArticleRepositoryImpl implements ArticleRepository { @Override public List
findAllArticle() { - String sql = "SELECT * FROM ARTICLES_VENDUS"; + String sql = "SELECT * FROM ARTICLES_VENDUS a"; List
articles = jdbcTemplate.query(sql, new ArticleRowMapper()); return articles; } @Override public List
searchArticle(SearchArticleCritere critere) { - StringBuilder sql = new StringBuilder("SELECT * FROM ARTICLES_VENDUS WHERE 1 = 1 AND isDelete = 0"); + StringBuilder sql = new StringBuilder("SELECT a.*, u.* FROM ARTICLES_VENDUS a "); + sql.append("JOIN UTILISATEURS u ON a.no_utilisateur = u.no_utilisateur "); + sql.append("WHERE 1 = 1 AND a.isDelete = 0"); List params = new ArrayList<>(); if (critere.getNoCategorie() != null) { - sql.append(" AND no_categorie = ?"); - params.add(critere.getNoCategorie()); + sql.append(" AND a.no_categorie = ?"); + params.add(critere.getNoCategorie()); } if (critere.getTitle() != null && !critere.getTitle().isEmpty()) { - sql.append(" AND nom_article LIKE ?"); - params.add( '%' + critere.getTitle() + "%"); + sql.append(" AND a.nom_article LIKE ?"); + params.add('%' + critere.getTitle() + '%'); } return jdbcTemplate.query(sql.toString(), new ArticleRowMapper(), params.toArray()); @@ -89,7 +85,7 @@ public class ArticleRepositoryImpl implements ArticleRepository { @Override public List
findArticleByTitle(String title) { - String sql = "SELECT * FROM ARTICLES_VENDUS WHERE nom_article LIKE ?"; + String sql = "SELECT * FROM ARTICLES_VENDUS a WHERE nom_article LIKE ?"; List
articles = jdbcTemplate.query(sql, new ArticleRowMapper(), "%" + title + "%"); return articles; } diff --git a/src/main/java/fr/eni/enchere/security/WebSecurityConfig.java b/src/main/java/fr/eni/enchere/security/WebSecurityConfig.java index 507b63d..5b907f5 100644 --- a/src/main/java/fr/eni/enchere/security/WebSecurityConfig.java +++ b/src/main/java/fr/eni/enchere/security/WebSecurityConfig.java @@ -17,13 +17,16 @@ public class WebSecurityConfig{ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http.authorizeHttpRequests((requests) -> requests .requestMatchers("/", "/accueil").permitAll() - .requestMatchers("/accueil", "/login", "/inscription/**", "/searchArticle", "/article/**", "/change-language").permitAll() - .requestMatchers("/css/**", "/images/**", "/assets/**", "/img/**", "/js/**", "/assets/**").permitAll() + .requestMatchers("/accueil", "/login", "/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("/admin").hasRole("ADMIN") .anyRequest().authenticated()) - .formLogin((form) -> form.loginPage("/login").defaultSuccessUrl("/", true)) - .logout((logout) -> logout.clearAuthentication(true).invalidateHttpSession(true) + .formLogin((form) -> form + .loginPage("/login") + .defaultSuccessUrl("/", true)) + .logout((logout) -> logout + .clearAuthentication(true).invalidateHttpSession(true) .deleteCookies("JSESSIONID").logoutSuccessUrl("/login?logout") .logoutRequestMatcher(new AntPathRequestMatcher("/logout")).permitAll()); diff --git a/src/main/resources/i18n/messages_en.properties b/src/main/resources/i18n/messages_en.properties index 9de4ea6..a178a97 100644 --- a/src/main/resources/i18n/messages_en.properties +++ b/src/main/resources/i18n/messages_en.properties @@ -1 +1,44 @@ -accueil.search.title = Search for an article by name... \ No newline at end of file +home.search.title = Search for an item by name... +home.search.cat = All categories +home.search.button = Search + +profil.title = My Profile +profil.button = Edit +profil.pseudo = Username: +profil.surname = First Name: +profil.name = Last Name: +profil.email = Email: +profil.phone = Phone: +profil.street = Street: +profil.postal = Zip Code: +profil.city = City: +profil.credit = Credits: + +edit.profil.currentpassword = Current Password: +edit.profil.newpassword = New Password: +edit.profil.confirmnewpassword = Confirm New Password: +edit.profil.title = Edit My Profile +edit.profil.button.edit = Save Changes +edit.profil.button.del = Delete My Account + +login.title = To Log In: +login.id = Username: +login.password = Password: +login.save = Remember Me +login.forgotpassword = Forgot Password +login.connection = Login +login.makecompte = Create an Account + +register.title = My Profile +register.button = Edit +register.pseudo = Username: +register.surname = First Name: +register.name = Last Name: +register.email = Email: +register.phone = Phone: +register.street = Street: +register.postal = Zip Code: +register.city = City: +register.credit = Credits: +register.make = create +register.cancel = cancel \ No newline at end of file diff --git a/src/main/resources/i18n/messages_fr.properties b/src/main/resources/i18n/messages_fr.properties index 04d8eb9..599a2d4 100644 --- a/src/main/resources/i18n/messages_fr.properties +++ b/src/main/resources/i18n/messages_fr.properties @@ -1,6 +1,6 @@ -accueil.search.title = Rechercher un article par nom... -accueil.search.cat = Toutes les cat\u00e9gories -accueil.search.button = Recherche +home.search.title = Rechercher un article par nom... +home.search.cat = Toutes les cat\u00e9gories +home.search.button = Recherche profil.title = Mon profile profil.button = Modifier diff --git a/src/main/resources/templates/accueil.html b/src/main/resources/templates/accueil.html index 8b0f2b1..6d6f6c4 100644 --- a/src/main/resources/templates/accueil.html +++ b/src/main/resources/templates/accueil.html @@ -1,5 +1,5 @@ - + @@ -9,19 +9,23 @@
-
- -
- +
+
+ +
+ + + +
+
+ +
+
-
- -
- - +
@@ -39,7 +43,7 @@
Prix de vente:
-
Vendeur:
+
Vendeur:

diff --git a/src/main/resources/templates/admin.html b/src/main/resources/templates/admin.html index 900f3af..be851f1 100644 --- a/src/main/resources/templates/admin.html +++ b/src/main/resources/templates/admin.html @@ -1,5 +1,5 @@ - + diff --git a/src/main/resources/templates/article.html b/src/main/resources/templates/article.html index 663fbfa..119c949 100644 --- a/src/main/resources/templates/article.html +++ b/src/main/resources/templates/article.html @@ -1,5 +1,5 @@ - + diff --git a/src/main/resources/templates/editProfil.html b/src/main/resources/templates/editProfil.html index 32a8301..3d2d8e9 100644 --- a/src/main/resources/templates/editProfil.html +++ b/src/main/resources/templates/editProfil.html @@ -112,7 +112,7 @@
- +
diff --git a/src/main/resources/templates/inscription.html b/src/main/resources/templates/inscription.html index 9278e53..abe53e1 100644 --- a/src/main/resources/templates/inscription.html +++ b/src/main/resources/templates/inscription.html @@ -1,5 +1,5 @@ - + @@ -107,7 +107,7 @@
- +
@@ -118,7 +118,7 @@
- +
diff --git a/src/main/resources/templates/modele-page.html b/src/main/resources/templates/modele-page.html index 7a41ed8..084bfa2 100644 --- a/src/main/resources/templates/modele-page.html +++ b/src/main/resources/templates/modele-page.html @@ -35,12 +35,14 @@ S'inscrire / Se connecter @@ -98,6 +100,7 @@ © 2024 Copyright:
+ \ No newline at end of file diff --git a/src/main/resources/templates/newArticle.html b/src/main/resources/templates/newArticle.html index 2e6e11d..dd6dc5f 100644 --- a/src/main/resources/templates/newArticle.html +++ b/src/main/resources/templates/newArticle.html @@ -1,28 +1,28 @@ - +

Nouvelle vente

-
+
- +
- +
- @@ -31,40 +31,40 @@
- +
- +
- +
- +

Retrait

- +
- +
- +
diff --git a/src/main/resources/templates/profil.html b/src/main/resources/templates/profil.html index 57a30a1..b9fef7e 100644 --- a/src/main/resources/templates/profil.html +++ b/src/main/resources/templates/profil.html @@ -1,5 +1,5 @@ - +