Critere de recherche
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package fr.eni.enchere.bll;
|
package fr.eni.enchere.bll;
|
||||||
|
|
||||||
import fr.eni.enchere.bo.Article;
|
import fr.eni.enchere.bo.Article;
|
||||||
|
import fr.eni.enchere.bo.SearchArticleCritere;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -12,4 +13,5 @@ public interface ArticleService {
|
|||||||
void deleteArticle(int id);
|
void deleteArticle(int id);
|
||||||
void updateArticle(int id);
|
void updateArticle(int id);
|
||||||
List<Article> findArticleByTitle(String title);
|
List<Article> findArticleByTitle(String title);
|
||||||
|
List<Article> searchArticle(SearchArticleCritere critere);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package fr.eni.enchere.bll;
|
package fr.eni.enchere.bll;
|
||||||
|
|
||||||
import fr.eni.enchere.bo.Article;
|
import fr.eni.enchere.bo.Article;
|
||||||
|
import fr.eni.enchere.bo.SearchArticleCritere;
|
||||||
import fr.eni.enchere.dal.ArticleRepository;
|
import fr.eni.enchere.dal.ArticleRepository;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
@@ -43,4 +44,9 @@ public class ArticleServiceImpl implements ArticleService{
|
|||||||
public List<Article> findArticleByTitle(String title) {
|
public List<Article> findArticleByTitle(String title) {
|
||||||
return articleRepository.findArticleByTitle(title);
|
return articleRepository.findArticleByTitle(title);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Article> searchArticle(SearchArticleCritere critere) {
|
||||||
|
return articleRepository.searchArticle(critere);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
13
src/main/java/fr/eni/enchere/bll/CategorieService.java
Normal file
13
src/main/java/fr/eni/enchere/bll/CategorieService.java
Normal file
@@ -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<fr.eni.enchere.bo.Categorie> findAllCategories();
|
||||||
|
Categorie findCategorieById(int id);
|
||||||
|
|
||||||
|
}
|
||||||
32
src/main/java/fr/eni/enchere/bll/CategorieServiceImpl.java
Normal file
32
src/main/java/fr/eni/enchere/bll/CategorieServiceImpl.java
Normal file
@@ -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<Categorie> findAllCategories() {
|
||||||
|
return categorieRepository.findAllCategories();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Categorie findCategorieById(int id) {
|
||||||
|
return categorieRepository.findCategorieById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
26
src/main/java/fr/eni/enchere/bo/Categorie.java
Normal file
26
src/main/java/fr/eni/enchere/bo/Categorie.java
Normal file
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
22
src/main/java/fr/eni/enchere/bo/SearchArticleCritere.java
Normal file
22
src/main/java/fr/eni/enchere/bo/SearchArticleCritere.java
Normal file
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
package fr.eni.enchere.controllers;
|
package fr.eni.enchere.controllers;
|
||||||
|
|
||||||
import fr.eni.enchere.bll.ArticleService;
|
import fr.eni.enchere.bll.ArticleService;
|
||||||
|
import fr.eni.enchere.bll.CategorieService;
|
||||||
import fr.eni.enchere.bo.Article;
|
import fr.eni.enchere.bo.Article;
|
||||||
|
import fr.eni.enchere.bo.SearchArticleCritere;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Controller;
|
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.ModelAttribute;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -19,23 +22,30 @@ public class AccueilController {
|
|||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(AccueilController.class);
|
private static final Logger logger = LoggerFactory.getLogger(AccueilController.class);
|
||||||
private ArticleService articleService;
|
private ArticleService articleService;
|
||||||
|
private CategorieService categorieService;
|
||||||
|
|
||||||
public AccueilController(ArticleService articleService) {
|
public AccueilController(ArticleService articleService, CategorieService categorieService) {
|
||||||
super();
|
super();
|
||||||
|
this.categorieService = categorieService;
|
||||||
this.articleService = articleService;
|
this.articleService = articleService;
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping({"/", "/accueil"})
|
@GetMapping({"/", "/accueil"})
|
||||||
public String viewAccueil(Model model) {
|
public String viewAccueil(@RequestParam(required = false) String searchTitle, @RequestParam(required = false) Integer searchCategory, Model model) {
|
||||||
model.addAttribute("articles", articleService.findAllArticle());
|
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";
|
return "accueil";
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/searchArticle")
|
@PostMapping("/accueil")
|
||||||
public String searchArticle(@ModelAttribute String title, Model model) {
|
public String handleSearch(@RequestParam("searchTitle") String searchTitle, @RequestParam(value = "searchCategory", required = false) Integer searchCategory, Model model) {
|
||||||
model.addAttribute("Articles", articleService.findArticleByTitle(title));
|
System.out.println("test");
|
||||||
return "accueil";
|
return viewAccueil(searchTitle, searchCategory, model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/login")
|
@GetMapping("/login")
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
package fr.eni.enchere.controllers;
|
|
||||||
|
|
||||||
import org.springframework.stereotype.Controller;
|
|
||||||
|
|
||||||
@Controller
|
|
||||||
public class ArticleController {
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,11 +1,13 @@
|
|||||||
package fr.eni.enchere.dal;
|
package fr.eni.enchere.dal;
|
||||||
|
|
||||||
import fr.eni.enchere.bo.Article;
|
import fr.eni.enchere.bo.Article;
|
||||||
|
import fr.eni.enchere.bo.SearchArticleCritere;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public interface ArticleRepository {
|
public interface ArticleRepository {
|
||||||
List<Article> findAllArticle();
|
List<Article> findAllArticle();
|
||||||
|
List<Article> searchArticle(SearchArticleCritere critere);
|
||||||
Article findArticleById(int id);
|
Article findArticleById(int id);
|
||||||
List<Article> findArticleByTitle(String title);
|
List<Article> findArticleByTitle(String title);
|
||||||
void saveArticle(Article article);
|
void saveArticle(Article article);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package fr.eni.enchere.dal;
|
package fr.eni.enchere.dal;
|
||||||
|
|
||||||
import fr.eni.enchere.bo.Article;
|
import fr.eni.enchere.bo.Article;
|
||||||
|
import fr.eni.enchere.bo.SearchArticleCritere;
|
||||||
import fr.eni.enchere.controllers.AccueilController;
|
import fr.eni.enchere.controllers.AccueilController;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@@ -12,6 +13,7 @@ import org.springframework.stereotype.Repository;
|
|||||||
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
@@ -51,6 +53,24 @@ public class ArticleRepositoryImpl implements ArticleRepository {
|
|||||||
return articles;
|
return articles;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Article> searchArticle(SearchArticleCritere critere) {
|
||||||
|
StringBuilder sql = new StringBuilder("SELECT * FROM ARTICLES_VENDUS WHERE 1 = 1");
|
||||||
|
|
||||||
|
List<Object> 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
|
@Override
|
||||||
public Article findArticleById(int id) {
|
public Article findArticleById(int id) {
|
||||||
return null;
|
return null;
|
||||||
@@ -58,8 +78,8 @@ public class ArticleRepositoryImpl implements ArticleRepository {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Article> findArticleByTitle(String title) {
|
public List<Article> findArticleByTitle(String title) {
|
||||||
String sql = "SELECT * FROM ARTICLES_VENDUS WHERE nom_article LIKE '?'";
|
String sql = "SELECT * FROM ARTICLES_VENDUS WHERE nom_article LIKE ?";
|
||||||
List<Article> articles = jdbcTemplate.query(sql, new ArticleRowMapper(), title);
|
List<Article> articles = jdbcTemplate.query(sql, new ArticleRowMapper(), "%" + title + "%");
|
||||||
return articles;
|
return articles;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
10
src/main/java/fr/eni/enchere/dal/CategorieRepository.java
Normal file
10
src/main/java/fr/eni/enchere/dal/CategorieRepository.java
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
package fr.eni.enchere.dal;
|
||||||
|
|
||||||
|
import fr.eni.enchere.bo.Categorie;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface CategorieRepository {
|
||||||
|
List<Categorie> findAllCategories();
|
||||||
|
Categorie findCategorieById(int id);
|
||||||
|
}
|
||||||
@@ -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<Categorie> {
|
||||||
|
|
||||||
|
@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<Categorie> findAllCategories() {
|
||||||
|
String sql = "SELECT * FROM CATEGORIES";
|
||||||
|
List<Categorie> 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,8 +11,20 @@
|
|||||||
<div class="container mt-4">
|
<div class="container mt-4">
|
||||||
<div class="row mb-4">
|
<div class="row mb-4">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<form th:action="@{/searchArticle}" method="post" class="input-group">
|
<!-- Formulaire de recherche avec sélection de catégorie -->
|
||||||
<input type="text" class="form-control" placeholder="Rechercher un article par nom..." name="searchTerm" th:value="${titre}">
|
<form th:action="@{/accueil}" method="post" class="mb-3">
|
||||||
|
<!-- Barre de recherche -->
|
||||||
|
<div class="mb-3">
|
||||||
|
<input type="text" class="form-control" placeholder="Rechercher un article par nom..." name="searchTitle">
|
||||||
|
</div>
|
||||||
|
<!-- Menu déroulant pour la sélection de la catégorie -->
|
||||||
|
<div class="mb-3">
|
||||||
|
<select class="form-control" name="searchCategory">
|
||||||
|
<option value="">Toutes les catégories</option>
|
||||||
|
<option th:each="category : ${categories}" th:value="${category.id}" th:text="${category.libelle}"></option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<!-- Bouton de soumission -->
|
||||||
<button type="submit" class="btn btn-primary">Recherche</button>
|
<button type="submit" class="btn btn-primary">Recherche</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user