lien bdd & html liste des articles
14
src/main/java/fr/eni/enchere/bll/ArticleService.java
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
package fr.eni.enchere.bll;
|
||||||
|
|
||||||
|
import fr.eni.enchere.bo.Article;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface ArticleService {
|
||||||
|
|
||||||
|
List<Article> findAllArticle();
|
||||||
|
Article findArticleById(int id);
|
||||||
|
void saveArticle(Article article);
|
||||||
|
void deleteArticle(int id);
|
||||||
|
void updateArticle(int id);
|
||||||
|
}
|
||||||
41
src/main/java/fr/eni/enchere/bll/ArticleServiceImpl.java
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
package fr.eni.enchere.bll;
|
||||||
|
|
||||||
|
import fr.eni.enchere.bo.Article;
|
||||||
|
import fr.eni.enchere.dal.ArticleRepository;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class ArticleServiceImpl implements ArticleService{
|
||||||
|
|
||||||
|
private ArticleRepository articleRepository;
|
||||||
|
|
||||||
|
public ArticleServiceImpl(ArticleRepository articleRepository) {
|
||||||
|
this.articleRepository = articleRepository;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public List<Article> findAllArticle() {
|
||||||
|
return articleRepository.findAllArticle();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Article findArticleById(int id) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void saveArticle(Article article) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteArticle(int id) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateArticle(int id) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package fr.eni.enchere.bll;
|
package fr.eni.enchere.bll;
|
||||||
|
|
||||||
import fr.eni.enchere.bo.User;
|
import fr.eni.enchere.bo.User;
|
||||||
import fr.eni.enchere.dall.UserRepository;
|
import fr.eni.enchere.dal.UserRepository;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
package fr.eni.enchere.controllers;
|
package fr.eni.enchere.controllers;
|
||||||
|
|
||||||
|
import fr.eni.enchere.bll.ArticleService;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
import org.springframework.ui.Model;
|
import org.springframework.ui.Model;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
@@ -8,11 +11,21 @@ import org.springframework.web.bind.annotation.GetMapping;
|
|||||||
@Controller
|
@Controller
|
||||||
public class AccueilController {
|
public class AccueilController {
|
||||||
|
|
||||||
public AccueilController() {
|
private static final Logger logger = LoggerFactory.getLogger(AccueilController.class);
|
||||||
|
|
||||||
|
private ArticleService articleService;
|
||||||
|
|
||||||
|
public AccueilController(ArticleService articleService) {
|
||||||
|
super();
|
||||||
|
this.articleService = articleService;
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping({"/", "/accueil"})
|
@GetMapping({"/", "/accueil"})
|
||||||
public String viewAccueil(Model model) {
|
public String viewAccueil(Model model) {
|
||||||
|
|
||||||
|
logger.info("Liste des articles : {}", articleService.findAllArticle().getLast());
|
||||||
|
model.addAttribute("articles", articleService.findAllArticle());
|
||||||
|
|
||||||
return "accueil";
|
return "accueil";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
13
src/main/java/fr/eni/enchere/dal/ArticleRepository.java
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
package fr.eni.enchere.dal;
|
||||||
|
|
||||||
|
import fr.eni.enchere.bo.Article;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface ArticleRepository {
|
||||||
|
List<Article> findAllArticle();
|
||||||
|
Article findArticleById(int id);
|
||||||
|
void saveArticle(Article article);
|
||||||
|
void deleteArticle(int id);
|
||||||
|
void updateArticle(int id);
|
||||||
|
}
|
||||||
73
src/main/java/fr/eni/enchere/dal/ArticleRepositoryImpl.java
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
package fr.eni.enchere.dal;
|
||||||
|
|
||||||
|
import fr.eni.enchere.bo.Article;
|
||||||
|
import fr.eni.enchere.controllers.AccueilController;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.context.annotation.Primary;
|
||||||
|
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
|
||||||
|
@Primary
|
||||||
|
public class ArticleRepositoryImpl implements ArticleRepository {
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(ArticleRepositoryImpl.class);
|
||||||
|
private JdbcTemplate jdbcTemplate;
|
||||||
|
private NamedParameterJdbcTemplate namedJdbcTemplate;
|
||||||
|
|
||||||
|
private class ArticleRowMapper implements RowMapper<Article> {
|
||||||
|
@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"));
|
||||||
|
article.setNumUtilisateur(rs.getInt("no_utilisateur"));
|
||||||
|
article.setNumCategorie(rs.getInt("no_categorie"));
|
||||||
|
return article;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public ArticleRepositoryImpl(JdbcTemplate jdbcTemplate, NamedParameterJdbcTemplate namedJdbcTemplate) {
|
||||||
|
this.jdbcTemplate = jdbcTemplate;
|
||||||
|
this.namedJdbcTemplate = namedJdbcTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Article> findAllArticle() {
|
||||||
|
String sql = "SELECT * FROM ARTICLES_VENDUS";
|
||||||
|
List<Article> articles = jdbcTemplate.query(sql, new ArticleRowMapper());
|
||||||
|
|
||||||
|
return articles;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Article findArticleById(int id) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void saveArticle(Article article) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteArticle(int id) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateArticle(int id) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package fr.eni.enchere.dall;
|
package fr.eni.enchere.dal;
|
||||||
|
|
||||||
import fr.eni.enchere.bo.User;
|
import fr.eni.enchere.bo.User;
|
||||||
|
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
package fr.eni.enchere.dall;
|
package fr.eni.enchere.dal;
|
||||||
|
|
||||||
import fr.eni.enchere.bo.User;
|
import fr.eni.enchere.bo.User;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.jdbc.core.BeanPropertyRowMapper;
|
|
||||||
import org.springframework.jdbc.core.JdbcTemplate;
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
|
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
|
||||||
|
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
|
||||||
import org.springframework.jdbc.support.GeneratedKeyHolder;
|
import org.springframework.jdbc.support.GeneratedKeyHolder;
|
||||||
import org.springframework.jdbc.support.KeyHolder;
|
import org.springframework.jdbc.support.KeyHolder;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
@@ -15,10 +15,11 @@ import java.util.List;
|
|||||||
public class UserRepositoryImpl implements UserRepository {
|
public class UserRepositoryImpl implements UserRepository {
|
||||||
|
|
||||||
private final JdbcTemplate jdbcTemplate;
|
private final JdbcTemplate jdbcTemplate;
|
||||||
|
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
|
||||||
@Autowired
|
@Autowired
|
||||||
public UserRepositoryImpl(JdbcTemplate jdbcTemplate) {
|
public UserRepositoryImpl(JdbcTemplate jdbcTemplate, NamedParameterJdbcTemplate namedJdbcTemplate) {
|
||||||
this.jdbcTemplate = jdbcTemplate;
|
this.jdbcTemplate = jdbcTemplate;
|
||||||
|
this.namedParameterJdbcTemplate = namedJdbcTemplate;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -34,12 +35,7 @@ public class UserRepositoryImpl implements UserRepository {
|
|||||||
@Override
|
@Override
|
||||||
public void save(User utilisateur) {
|
public void save(User utilisateur) {
|
||||||
if (utilisateur.getId() == 0) {
|
if (utilisateur.getId() == 0) {
|
||||||
String sql = "INSERT INTO UTILISATEURS (pseudo, nom, prenom, email, telephone," +
|
String sql = "INSERT INTO UTILISATEURS (pseudo, nom, prenom, email, telephone, rue, code_postal, ville, mot_de_passe, credit, administrateur) VALUES (:pseudo, :nom, :prenom, :email, :telephone, :rue, :code_postal, :ville, :mot_de_passe, 0, false)";
|
||||||
" rue, code_postal, ville, mot_de_passe, credit, administrateur)" +
|
|
||||||
" values (:pseudo, :nom, :prenom, :email, :telephone," +
|
|
||||||
" :rue, :code_postal, :ville, :mot_de_passe, 0, false)";
|
|
||||||
|
|
||||||
KeyHolder keyHolder = new GeneratedKeyHolder();
|
|
||||||
MapSqlParameterSource parameters = new MapSqlParameterSource();
|
MapSqlParameterSource parameters = new MapSqlParameterSource();
|
||||||
parameters.addValue("pseudo", utilisateur.getPseudo());
|
parameters.addValue("pseudo", utilisateur.getPseudo());
|
||||||
parameters.addValue("nom", utilisateur.getNom());
|
parameters.addValue("nom", utilisateur.getNom());
|
||||||
@@ -50,8 +46,12 @@ public class UserRepositoryImpl implements UserRepository {
|
|||||||
parameters.addValue("code_postal", utilisateur.getCode_postal());
|
parameters.addValue("code_postal", utilisateur.getCode_postal());
|
||||||
parameters.addValue("ville", utilisateur.getVille());
|
parameters.addValue("ville", utilisateur.getVille());
|
||||||
parameters.addValue("mot_de_passe", utilisateur.getPassword());
|
parameters.addValue("mot_de_passe", utilisateur.getPassword());
|
||||||
jdbcTemplate.update(sql, parameters, keyHolder, new String[] {"id"});
|
|
||||||
utilisateur.setId(keyHolder.getKey().intValue());
|
KeyHolder keyHolder = new GeneratedKeyHolder();
|
||||||
|
namedParameterJdbcTemplate.update(sql, parameters, keyHolder, new String[] {"no_utilisateur"});
|
||||||
|
if (keyHolder.getKey() != null) {
|
||||||
|
utilisateur.setId(keyHolder.getKey().intValue());
|
||||||
|
}
|
||||||
}else {
|
}else {
|
||||||
//Mettre à jour
|
//Mettre à jour
|
||||||
}
|
}
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
package fr.eni.enchere.dall;
|
|
||||||
|
|
||||||
import fr.eni.enchere.bo.Article;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public interface ArticleRepository {
|
|
||||||
List<Article> findAll();
|
|
||||||
Article findById(int id);
|
|
||||||
void save(Article article);
|
|
||||||
void delete(int id);
|
|
||||||
void update(int id);
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
package fr.eni.enchere.dall;
|
|
||||||
|
|
||||||
public class ArticleRepositoryImpl {
|
|
||||||
}
|
|
||||||
5
src/main/resources/static/css/style.css
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
.v-center {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
BIN
src/main/resources/static/images/articles/11.jpg
Normal file
|
After Width: | Height: | Size: 245 KiB |
BIN
src/main/resources/static/images/articles/12.jpg
Normal file
|
After Width: | Height: | Size: 251 KiB |
BIN
src/main/resources/static/images/articles/13.jpg
Normal file
|
After Width: | Height: | Size: 406 KiB |
BIN
src/main/resources/static/images/articles/14.jpg
Normal file
|
After Width: | Height: | Size: 572 KiB |
BIN
src/main/resources/static/images/articles/15.jpg
Normal file
|
After Width: | Height: | Size: 378 KiB |
BIN
src/main/resources/static/images/articles/16.jpg
Normal file
|
After Width: | Height: | Size: 233 KiB |
BIN
src/main/resources/static/images/articles/17.jpg
Normal file
|
After Width: | Height: | Size: 413 KiB |
BIN
src/main/resources/static/images/articles/18.jpg
Normal file
|
After Width: | Height: | Size: 233 KiB |
BIN
src/main/resources/static/images/articles/19.jpg
Normal file
|
After Width: | Height: | Size: 358 KiB |
BIN
src/main/resources/static/images/articles/20.jpg
Normal file
|
After Width: | Height: | Size: 386 KiB |
@@ -7,8 +7,43 @@
|
|||||||
<link href="assets/bootstrap-icons/bootstrap-icons.min.css" rel="stylesheet">
|
<link href="assets/bootstrap-icons/bootstrap-icons.min.css" rel="stylesheet">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="container-main"><h1>hello world !</h1></div>
|
<div id="container-main">
|
||||||
|
<div class="container mt-4">
|
||||||
|
<div class="row mb-4">
|
||||||
|
<div class="col-12">
|
||||||
|
<form th:action="@{/search}" method="get" class="input-group">
|
||||||
|
<input type="text" class="form-control" placeholder="Rechercher un article par nom..." name="searchTerm" th:value="${searchTerm}">
|
||||||
|
<button type="submit" class="btn btn-primary">Recherche</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div th:each="article : ${articles}" class="col-md-6 mb-4">
|
||||||
|
<div class="card shadow-sm h-100">
|
||||||
|
<div class="row g-0">
|
||||||
|
<div class="col-md-4 d-flex align-items-center justify-content-center p-3">
|
||||||
|
<img th:src="${'images/articles/' + article.id + '.jpg'}" alt="Image de l'article" class="img-fluid rounded">
|
||||||
|
</div>
|
||||||
|
<div class="col-md-8">
|
||||||
|
<div class="card-body d-flex flex-column">
|
||||||
|
<h5 class="card-title" th:text="${article.nom}">Nom de l'article</h5>
|
||||||
|
<p class="card-text mb-auto" th:text="${article.desc}">Description</p>
|
||||||
|
<div class="d-flex justify-content-between align-items-center">
|
||||||
|
<div>
|
||||||
|
<h6>Prix de vente: <span th:text="${article.prixVente}"></span> €</h6>
|
||||||
|
<h6 class="text-muted">Fin de l'enchere: <span th:text="${#dates.format(article.dateFinEnch, 'dd/MM/yyyy')}"></span> €</h6>
|
||||||
|
|
||||||
<script src="js/bootstrap/bootstrap.min.js"></script>
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="js/bootstrap/bootstrap.min.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||