diff --git a/src/main/java/fr/eni/enchere/bll/ArticleService.java b/src/main/java/fr/eni/enchere/bll/ArticleService.java index f4be3ea..1941b5a 100644 --- a/src/main/java/fr/eni/enchere/bll/ArticleService.java +++ b/src/main/java/fr/eni/enchere/bll/ArticleService.java @@ -1,6 +1,7 @@ package fr.eni.enchere.bll; import fr.eni.enchere.bo.Article; +import fr.eni.enchere.bo.SearchArticleCritere; import java.util.List; @@ -12,4 +13,5 @@ public interface ArticleService { void deleteArticle(int id); void updateArticle(int id); List
findArticleByTitle(String title); + List
searchArticle(SearchArticleCritere critere); } diff --git a/src/main/java/fr/eni/enchere/bll/ArticleServiceImpl.java b/src/main/java/fr/eni/enchere/bll/ArticleServiceImpl.java index 5a0b42a..5915961 100644 --- a/src/main/java/fr/eni/enchere/bll/ArticleServiceImpl.java +++ b/src/main/java/fr/eni/enchere/bll/ArticleServiceImpl.java @@ -1,6 +1,7 @@ package fr.eni.enchere.bll; import fr.eni.enchere.bo.Article; +import fr.eni.enchere.bo.SearchArticleCritere; import fr.eni.enchere.dal.ArticleRepository; import org.springframework.stereotype.Service; @@ -43,4 +44,9 @@ public class ArticleServiceImpl implements ArticleService{ public List
findArticleByTitle(String title) { return articleRepository.findArticleByTitle(title); } + + @Override + public List
searchArticle(SearchArticleCritere critere) { + return articleRepository.searchArticle(critere); + } } diff --git a/src/main/java/fr/eni/enchere/bll/CategorieService.java b/src/main/java/fr/eni/enchere/bll/CategorieService.java new file mode 100644 index 0000000..1ef5171 --- /dev/null +++ b/src/main/java/fr/eni/enchere/bll/CategorieService.java @@ -0,0 +1,13 @@ +package fr.eni.enchere.bll; + +import fr.eni.enchere.bo.Article; +import fr.eni.enchere.bo.Categorie; +import fr.eni.enchere.bo.SearchArticleCritere; + +import java.util.List; + +public interface CategorieService { + List findAllCategories(); + Categorie findCategorieById(int id); + +} diff --git a/src/main/java/fr/eni/enchere/bll/CategorieServiceImpl.java b/src/main/java/fr/eni/enchere/bll/CategorieServiceImpl.java new file mode 100644 index 0000000..e2f128d --- /dev/null +++ b/src/main/java/fr/eni/enchere/bll/CategorieServiceImpl.java @@ -0,0 +1,32 @@ +package fr.eni.enchere.bll; + +import fr.eni.enchere.bo.Article; +import fr.eni.enchere.bo.Categorie; +import fr.eni.enchere.bo.SearchArticleCritere; +import fr.eni.enchere.dal.ArticleRepositoryImpl; +import fr.eni.enchere.dal.CategorieRepository; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class CategorieServiceImpl implements CategorieService { + private final ArticleRepositoryImpl articleRepositoryImpl; + private CategorieRepository categorieRepository; + + public CategorieServiceImpl(CategorieRepository categorieRepository, ArticleRepositoryImpl articleRepositoryImpl) { + this.categorieRepository = categorieRepository; + this.articleRepositoryImpl = articleRepositoryImpl; + } + @Override + public List findAllCategories() { + return categorieRepository.findAllCategories(); + } + + @Override + public Categorie findCategorieById(int id) { + return categorieRepository.findCategorieById(id); + } + + +} diff --git a/src/main/java/fr/eni/enchere/bo/Article.java b/src/main/java/fr/eni/enchere/bo/Article.java index 4600fcd..a9dc8f1 100644 --- a/src/main/java/fr/eni/enchere/bo/Article.java +++ b/src/main/java/fr/eni/enchere/bo/Article.java @@ -11,13 +11,13 @@ public class Article { Date dateFinEnch; float prixInitial; float prixVente; - int numUtilisateur; + UserProfil Utilisateur; int numCategorie; public Article() { } - public Article(int id, String nom, String desc, Date dateDebutEnch, Date dateFinEnch, float prixInitial, float prixVente, int numUtilisateur, int numCategorie) { + public Article(int id, String nom, String desc, Date dateDebutEnch, Date dateFinEnch, float prixInitial, float prixVente, UserProfil Utilisateur, int numCategorie) { this.id = id; this.nom = nom; this.desc = desc; @@ -25,7 +25,7 @@ public class Article { this.dateFinEnch = dateFinEnch; this.prixInitial = prixInitial; this.prixVente = prixVente; - this.numUtilisateur = numUtilisateur; + this.Utilisateur = Utilisateur; this.numCategorie = numCategorie; } @@ -85,12 +85,12 @@ public class Article { this.prixVente = prixVente; } - public int getNumUtilisateur() { - return numUtilisateur; + public UserProfil getUtilisateur() { + return Utilisateur; } - public void setNumUtilisateur(int numUtilisateur) { - this.numUtilisateur = numUtilisateur; + public void setUtilisateur(UserProfil Utilisateur) { + this.Utilisateur = Utilisateur; } public int getNumCategorie() { diff --git a/src/main/java/fr/eni/enchere/bo/Categorie.java b/src/main/java/fr/eni/enchere/bo/Categorie.java new file mode 100644 index 0000000..f410dd0 --- /dev/null +++ b/src/main/java/fr/eni/enchere/bo/Categorie.java @@ -0,0 +1,26 @@ +package fr.eni.enchere.bo; + +public class Categorie { + + int id; + String libelle; + + public Categorie() { + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getLibelle() { + return libelle; + } + + public void setLibelle(String libelle) { + this.libelle = libelle; + } +} diff --git a/src/main/java/fr/eni/enchere/bo/SearchArticleCritere.java b/src/main/java/fr/eni/enchere/bo/SearchArticleCritere.java new file mode 100644 index 0000000..ca4a5d6 --- /dev/null +++ b/src/main/java/fr/eni/enchere/bo/SearchArticleCritere.java @@ -0,0 +1,22 @@ +package fr.eni.enchere.bo; + +public class SearchArticleCritere { + String title; + Integer noCategorie; + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public Integer getNoCategorie() { + return noCategorie; + } + + public void setNoCategorie(Integer noCategorie) { + this.noCategorie = noCategorie; + } +} diff --git a/src/main/java/fr/eni/enchere/controllers/AccueilController.java b/src/main/java/fr/eni/enchere/controllers/AccueilController.java index 6753d1c..0470afa 100644 --- a/src/main/java/fr/eni/enchere/controllers/AccueilController.java +++ b/src/main/java/fr/eni/enchere/controllers/AccueilController.java @@ -1,7 +1,9 @@ package fr.eni.enchere.controllers; import fr.eni.enchere.bll.ArticleService; +import fr.eni.enchere.bll.CategorieService; import fr.eni.enchere.bo.Article; +import fr.eni.enchere.bo.SearchArticleCritere; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; @@ -10,6 +12,7 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; import java.util.List; @@ -19,23 +22,30 @@ public class AccueilController { private static final Logger logger = LoggerFactory.getLogger(AccueilController.class); private ArticleService articleService; + private CategorieService categorieService; - public AccueilController(ArticleService articleService) { + public AccueilController(ArticleService articleService, CategorieService categorieService) { super(); - + this.categorieService = categorieService; this.articleService = articleService; } @GetMapping({"/", "/accueil"}) - public String viewAccueil(Model model) { - model.addAttribute("articles", articleService.findAllArticle()); + public String viewAccueil(@RequestParam(required = false) String searchTitle, @RequestParam(required = false) Integer searchCategory, Model model) { + System.out.println("Liste cat: "+categorieService.findAllCategories()); + model.addAttribute("categories", categorieService.findAllCategories()); + SearchArticleCritere critere = new SearchArticleCritere(); + critere.setNoCategorie(searchCategory); + critere.setTitle(searchTitle); + + model.addAttribute("articles", articleService.searchArticle(critere)); return "accueil"; } - @PostMapping("/searchArticle") - public String searchArticle(@ModelAttribute String title, Model model) { - model.addAttribute("Articles", articleService.findArticleByTitle(title)); - return "accueil"; + @PostMapping("/accueil") + public String handleSearch(@RequestParam("searchTitle") String searchTitle, @RequestParam(value = "searchCategory", required = false) Integer searchCategory, Model model) { + System.out.println("test"); + return viewAccueil(searchTitle, searchCategory, model); } } diff --git a/src/main/java/fr/eni/enchere/dal/ArticleRepository.java b/src/main/java/fr/eni/enchere/dal/ArticleRepository.java index 7eb8d01..eea3ff9 100644 --- a/src/main/java/fr/eni/enchere/dal/ArticleRepository.java +++ b/src/main/java/fr/eni/enchere/dal/ArticleRepository.java @@ -1,11 +1,13 @@ package fr.eni.enchere.dal; import fr.eni.enchere.bo.Article; +import fr.eni.enchere.bo.SearchArticleCritere; import java.util.List; public interface ArticleRepository { List
findAllArticle(); + List
searchArticle(SearchArticleCritere critere); Article findArticleById(int id); List
findArticleByTitle(String title); void saveArticle(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 88bf04c..0b56224 100644 --- a/src/main/java/fr/eni/enchere/dal/ArticleRepositoryImpl.java +++ b/src/main/java/fr/eni/enchere/dal/ArticleRepositoryImpl.java @@ -1,6 +1,9 @@ package fr.eni.enchere.dal; +import fr.eni.enchere.bll.UserService; import fr.eni.enchere.bo.Article; +import fr.eni.enchere.bo.SearchArticleCritere; +import fr.eni.enchere.bo.UserProfil; import fr.eni.enchere.controllers.AccueilController; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -12,6 +15,7 @@ import org.springframework.stereotype.Repository; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.ArrayList; import java.util.List; @Repository @@ -21,6 +25,7 @@ public class ArticleRepositoryImpl implements ArticleRepository { private static final Logger logger = LoggerFactory.getLogger(ArticleRepositoryImpl.class); private JdbcTemplate jdbcTemplate; private NamedParameterJdbcTemplate namedJdbcTemplate; + private UserService userService; private class ArticleRowMapper implements RowMapper
{ @Override @@ -33,15 +38,23 @@ public class ArticleRepositoryImpl implements ArticleRepository { article.setDateFinEnch(rs.getDate("date_fin_encheres")); article.setPrixInitial(rs.getFloat("prix_initial")); article.setPrixVente(rs.getFloat("prix_vente")); - article.setNumUtilisateur(rs.getInt("no_utilisateur")); + + 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")); return article; } } - public ArticleRepositoryImpl(JdbcTemplate jdbcTemplate, NamedParameterJdbcTemplate namedJdbcTemplate) { + public ArticleRepositoryImpl(JdbcTemplate jdbcTemplate, NamedParameterJdbcTemplate namedJdbcTemplate, UserService userService) { this.jdbcTemplate = jdbcTemplate; this.namedJdbcTemplate = namedJdbcTemplate; + this.userService = userService; } @Override @@ -51,6 +64,24 @@ public class ArticleRepositoryImpl implements ArticleRepository { return articles; } + @Override + public List
searchArticle(SearchArticleCritere critere) { + StringBuilder sql = new StringBuilder("SELECT * FROM ARTICLES_VENDUS WHERE 1 = 1"); + + List params = new ArrayList<>(); + + if (critere.getNoCategorie() != null) { + sql.append(" AND no_categorie = ?"); + params.add(critere.getNoCategorie()); + } + if (critere.getTitle() != null && !critere.getTitle().isEmpty()) { + sql.append(" AND nom_article LIKE ?"); + params.add( '%' + critere.getTitle() + "%"); + } + + return jdbcTemplate.query(sql.toString(), new ArticleRowMapper(), params.toArray()); + } + @Override public Article findArticleById(int id) { return null; @@ -58,8 +89,8 @@ public class ArticleRepositoryImpl implements ArticleRepository { @Override public List
findArticleByTitle(String title) { - String sql = "SELECT * FROM ARTICLES_VENDUS WHERE nom_article LIKE '?'"; - List
articles = jdbcTemplate.query(sql, new ArticleRowMapper(), title); + String sql = "SELECT * FROM ARTICLES_VENDUS WHERE nom_article LIKE ?"; + List
articles = jdbcTemplate.query(sql, new ArticleRowMapper(), "%" + title + "%"); return articles; } diff --git a/src/main/java/fr/eni/enchere/dal/CategorieRepository.java b/src/main/java/fr/eni/enchere/dal/CategorieRepository.java new file mode 100644 index 0000000..aa54ee9 --- /dev/null +++ b/src/main/java/fr/eni/enchere/dal/CategorieRepository.java @@ -0,0 +1,10 @@ +package fr.eni.enchere.dal; + +import fr.eni.enchere.bo.Categorie; + +import java.util.List; + +public interface CategorieRepository { + List findAllCategories(); + Categorie findCategorieById(int id); +} diff --git a/src/main/java/fr/eni/enchere/dal/CategorieRepositoryImpl.java b/src/main/java/fr/eni/enchere/dal/CategorieRepositoryImpl.java new file mode 100644 index 0000000..b0c0f96 --- /dev/null +++ b/src/main/java/fr/eni/enchere/dal/CategorieRepositoryImpl.java @@ -0,0 +1,50 @@ +package fr.eni.enchere.dal; + +import fr.eni.enchere.bo.Article; +import fr.eni.enchere.bo.Categorie; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.RowMapper; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; +import org.springframework.stereotype.Repository; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; +@Repository +public class CategorieRepositoryImpl implements CategorieRepository { + + private JdbcTemplate jdbcTemplate; + private NamedParameterJdbcTemplate namedJdbcTemplate; + + + private class CategorieRowMapper implements RowMapper { + + @Override + public Categorie mapRow(ResultSet rs, int rowNum) throws SQLException { + Categorie categorie = new Categorie(); + categorie.setId(rs.getInt("no_categorie")); + categorie.setLibelle(rs.getString("libelle")); + return categorie; + } + } + + public CategorieRepositoryImpl(JdbcTemplate jdbcTemplate, NamedParameterJdbcTemplate namedJdbcTemplate) { + this.jdbcTemplate = jdbcTemplate; + this.namedJdbcTemplate = namedJdbcTemplate; + } + + @Override + public List findAllCategories() { + String sql = "SELECT * FROM CATEGORIES"; + List categories = jdbcTemplate.query(sql, new CategorieRowMapper()); + System.out.println(categories); + return categories; + } + + @Override + public Categorie findCategorieById(int id) { + String sql = "SELECT * FROM CATEGORIES WHERE no_categorie = :id"; + Categorie categorie = jdbcTemplate.queryForObject(sql, new CategorieRowMapper(), id); + return categorie; + } +} diff --git a/src/main/java/fr/eni/enchere/dal/UserRepositoryImpl.java b/src/main/java/fr/eni/enchere/dal/UserRepositoryImpl.java index e31bf35..0d11068 100644 --- a/src/main/java/fr/eni/enchere/dal/UserRepositoryImpl.java +++ b/src/main/java/fr/eni/enchere/dal/UserRepositoryImpl.java @@ -1,9 +1,12 @@ package fr.eni.enchere.dal; +import fr.eni.enchere.bo.Article; import fr.eni.enchere.bo.UserProfil; +import org.apache.catalina.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Primary; import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.jdbc.support.GeneratedKeyHolder; @@ -11,6 +14,8 @@ import org.springframework.jdbc.support.KeyHolder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Repository; +import java.sql.ResultSet; +import java.sql.SQLException; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -30,14 +35,25 @@ public class UserRepositoryImpl implements UserRepository { this.passwordEncoder = passwordEncoder; } - @Override - public List findAll() { - return List.of(); - } + public class UserRowMapper implements RowMapper { - @Override - public UserProfil findById(int id) { - return null; + @Override + public UserProfil mapRow(ResultSet rs, int rowNum) throws SQLException { + UserProfil userProfile = new UserProfil(); + userProfile.setId(rs.getInt("no_utilisateur")); + userProfile.setPrenom(rs.getString("prenom")); + userProfile.setNom(rs.getString("nom")); + userProfile.setPseudo(rs.getString("pseudo")); + userProfile.setEmail(rs.getString("email")); + userProfile.setTelephone(rs.getString("telephone")); + userProfile.setRue(rs.getString("rue")); + userProfile.setCode_postal(rs.getString("code_postal")); + userProfile.setVille(rs.getString("ville")); + userProfile.setPassword(rs.getString("mot_de_passe")); + userProfile.setCredit(rs.getFloat("credit")); + userProfile.setAdmin(rs.getBoolean("administrateur")); + return userProfile; + } } @Override @@ -45,22 +61,20 @@ public class UserRepositoryImpl implements UserRepository { String sql = "SELECT * FROM UTILISATEURS WHERE pseudo = :username OR email = :username AND isDelete = 0"; Map params = new HashMap<>(); params.put("username", username); - UserProfil user = namedParameterJdbcTemplate.queryForObject(sql, params, (rs, rowNum) -> { - UserProfil userProfile = new UserProfil(); - userProfile.setId(rs.getInt("no_utilisateur")); - userProfile.setPrenom(rs.getString("prenom")); - userProfile.setNom(rs.getString("nom")); - userProfile.setPseudo(rs.getString("pseudo")); - userProfile.setEmail(rs.getString("email")); - userProfile.setTelephone(rs.getString("telephone")); - userProfile.setRue(rs.getString("rue")); - userProfile.setCode_postal(rs.getString("code_postal")); - userProfile.setVille(rs.getString("ville")); - userProfile.setPassword(rs.getString("mot_de_passe")); - userProfile.setCredit(rs.getFloat("credit")); - userProfile.setAdmin(rs.getBoolean("administrateur")); - return userProfile; - }); + UserProfil user = jdbcTemplate.queryForObject(sql, new UserRowMapper(), params); + return user; + } + + + @Override + public List findAll() { + return List.of(); + } + + @Override + public UserProfil findById(int id) { + String sql = "SELECT * FROM UTILISATEURS WHERE no_utilisateur = ?"; + UserProfil user = jdbcTemplate.queryForObject(sql, new UserRowMapper(), id); return user; } diff --git a/src/main/resources/templates/accueil.html b/src/main/resources/templates/accueil.html index 5b909d0..9f9dd89 100644 --- a/src/main/resources/templates/accueil.html +++ b/src/main/resources/templates/accueil.html @@ -11,8 +11,20 @@
-
- + + + +
+ +
+ +
+ +
+
@@ -31,9 +43,12 @@
Prix de vente:
-
Fin de l'enchere:
+ +
Vendeur:
+
+
Fin de l'enchere:
diff --git a/src/main/resources/templates/modele-page.html b/src/main/resources/templates/modele-page.html index 8980238..3c815dd 100644 --- a/src/main/resources/templates/modele-page.html +++ b/src/main/resources/templates/modele-page.html @@ -10,7 +10,7 @@