14 Commits

Author SHA1 Message Date
jleroy
923b9c4579 patch prod 2024-05-03 14:32:04 +02:00
jleroy
7580d067cf patch prod 2024-05-03 14:29:19 +02:00
jleroy
aa0a02a6fc patch prod 2024-05-03 14:24:45 +02:00
jleroy
c28071b095 patch prod 2024-05-03 14:24:09 +02:00
Parpaillax
2d1e226cbc test 2024-05-03 13:57:04 +02:00
Parpaillax
68894784f2 test 2024-05-03 13:51:05 +02:00
jleroy
173e051af4 patch prod 2024-05-03 13:20:02 +02:00
jleroy
8a455d2b26 patch prod 2024-05-03 10:58:01 +02:00
jleroy
cdd7da676f patch prod 2024-05-03 10:55:27 +02:00
jleroy
5caac755f6 patch prod 2024-05-03 10:01:25 +02:00
jleroy
c41143d82f patch prod 2024-05-03 09:03:20 +02:00
jleroy
9578885d3a patch prod 2024-05-03 08:56:05 +02:00
jleroy
984acbdacc patch prod 2024-05-03 08:54:58 +02:00
mepiphana2023
5aee628f28 pagination 2024-05-03 08:54:18 +02:00
9 changed files with 49 additions and 17 deletions

View File

@@ -2,6 +2,7 @@ package fr.eni.enchere.bll;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.io.File;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Paths; import java.nio.file.Paths;
@@ -9,10 +10,9 @@ import java.nio.file.Paths;
public class FileService { public class FileService {
public boolean fileExists(String filePath) { public boolean fileExists(String filePath) {
return Files.exists(Paths.get("src/main/resources/static"+filePath)); filePath = "src/main/resources/static" + filePath;
File file = new File(filePath).getAbsoluteFile();
return file.exists();
} }
} }
// src/main/resources/static/images/articles/12.jpg

View File

@@ -10,6 +10,7 @@ public class Article {
String nom; String nom;
String desc; String desc;
MultipartFile photo; MultipartFile photo;
String lienImg;
Date dateDebutEnch; Date dateDebutEnch;
Date dateFinEnch; Date dateFinEnch;
float prixInitial; float prixInitial;
@@ -23,11 +24,12 @@ public class Article {
public Article() { public Article() {
} }
public Article(int id, String nom, String desc, MultipartFile photo, Date dateDebutEnch, Date dateFinEnch, float prixInitial, float prixVente, int Utilisateur, String pseudoUtilisateur, int numCategorie, boolean isDelete) { public Article(int id, String nom, String desc, MultipartFile photo, String lienImg, Date dateDebutEnch, Date dateFinEnch, float prixInitial, float prixVente, int Utilisateur, String pseudoUtilisateur, int numCategorie, boolean isDelete) {
setId(id); setId(id);
setNom(nom); setNom(nom);
setDesc(desc); setDesc(desc);
setPhoto(photo); setPhoto(photo);
setLienImg(lienImg);
setDateDebutEnch(dateDebutEnch); setDateDebutEnch(dateDebutEnch);
setDateFinEnch(dateFinEnch); setDateFinEnch(dateFinEnch);
setPrixInitial(prixInitial); setPrixInitial(prixInitial);
@@ -65,6 +67,14 @@ public class Article {
return photo; return photo;
} }
public String getLienImg() {
return lienImg;
}
public void setLienImg(String lienImg) {
this.lienImg = lienImg;
}
public void setPhoto(MultipartFile photo) { public void setPhoto(MultipartFile photo) {
this.photo = photo; this.photo = photo;
} }

View File

@@ -34,14 +34,12 @@ public class AccueilController {
private ArticleService articleService; private ArticleService articleService;
private CategorieService categorieService; private CategorieService categorieService;
private UserService userService; private UserService userService;
private FileService fileService;
public AccueilController(ArticleService articleService, CategorieService categorieService, UserService userService, FileService fileService) { public AccueilController(ArticleService articleService, CategorieService categorieService, UserService userService) {
super(); super();
this.categorieService = categorieService; this.categorieService = categorieService;
this.articleService = articleService; this.articleService = articleService;
this.userService = userService; this.userService = userService;
this.fileService = fileService;
} }
@GetMapping({"/", "/enchere"}) @GetMapping({"/", "/enchere"})
@@ -77,7 +75,6 @@ public class AccueilController {
Page<Article> articlePage = articleService.searchArticlePageable(critere, PageRequest.of(page, size)); Page<Article> articlePage = articleService.searchArticlePageable(critere, PageRequest.of(page, size));
model.addAttribute("articles", articlePage.getContent()); model.addAttribute("articles", articlePage.getContent());
model.addAttribute("fileService", fileService);
int currentPage = page + 1; int currentPage = page + 1;
model.addAttribute("currentPage", currentPage); model.addAttribute("currentPage", currentPage);
model.addAttribute("critere", critere); model.addAttribute("critere", critere);

View File

@@ -62,6 +62,7 @@ public class ArticleController {
UserProfil user = userService.utilisateurById(article.getUtilisateur()); UserProfil user = userService.utilisateurById(article.getUtilisateur());
Categorie cate = categorieService.findCategorieById(article.getNumCategorie()); Categorie cate = categorieService.findCategorieById(article.getNumCategorie());
Retrait retrait = retraitService.findByNumArticle(article.getId()); Retrait retrait = retraitService.findByNumArticle(article.getId());
article.setPseudoUtilisateur(user.getPseudo()); article.setPseudoUtilisateur(user.getPseudo());
List<Enchere> lastEnchere = this.enchereService.enchereByArticle(article.getId()); List<Enchere> lastEnchere = this.enchereService.enchereByArticle(article.getId());

View File

@@ -4,6 +4,7 @@ import fr.eni.enchere.interceptor.UserInterceptor;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@@ -26,4 +27,10 @@ public class MvcConfig implements WebMvcConfigurer {
registry.addInterceptor(userInterceptor); registry.addInterceptor(userInterceptor);
} }
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/images/**")
.addResourceLocations("classpath:/static/images/");
}
} }

View File

@@ -1,6 +1,7 @@
package fr.eni.enchere.dal; package fr.eni.enchere.dal;
import fr.eni.enchere.bll.EnchereService; import fr.eni.enchere.bll.EnchereService;
import fr.eni.enchere.bll.FileService;
import fr.eni.enchere.bll.UserService; import fr.eni.enchere.bll.UserService;
import fr.eni.enchere.bo.Article; import fr.eni.enchere.bo.Article;
import fr.eni.enchere.bo.Enchere; import fr.eni.enchere.bo.Enchere;
@@ -44,6 +45,7 @@ public class ArticleRepositoryImpl implements ArticleRepository {
private NamedParameterJdbcTemplate namedJdbcTemplate; private NamedParameterJdbcTemplate namedJdbcTemplate;
private UserService userService; private UserService userService;
private EnchereService enchereService; private EnchereService enchereService;
private FileService fileService;
private class ArticleRowMapper implements RowMapper<Article> { private class ArticleRowMapper implements RowMapper<Article> {
@Override @Override
@@ -58,6 +60,14 @@ public class ArticleRepositoryImpl implements ArticleRepository {
article.setPrixVente(rs.getFloat("a.prix_vente")); article.setPrixVente(rs.getFloat("a.prix_vente"));
article.setNoUtilisateur(rs.getInt("a.no_utilisateur")); article.setNoUtilisateur(rs.getInt("a.no_utilisateur"));
article.setNumCategorie(rs.getInt("a.no_categorie")); article.setNumCategorie(rs.getInt("a.no_categorie"));
String lienImgTest = "/images/articles/" + article.getId() + ".jpg";
String lienImg;
if (fileService.fileExists(lienImgTest)){
lienImg = "/images/articles/" + article.getId() + ".jpg";
}else{
lienImg = "/images/articles/no-data.jpg";
}
article.setLienImg(lienImg);
article.setIsDelete(rs.getBoolean("a.isDelete")); article.setIsDelete(rs.getBoolean("a.isDelete"));
return article; return article;
} }
@@ -83,16 +93,25 @@ public class ArticleRepositoryImpl implements ArticleRepository {
if (maxMontantEnchere.isPresent()) { if (maxMontantEnchere.isPresent()) {
article.setPrixMaxEnchere(maxMontantEnchere.get()); article.setPrixMaxEnchere(maxMontantEnchere.get());
} }
String lienImgTest = "/images/articles/" + article.getId() + ".jpg";
String lienImg;
if (fileService.fileExists(lienImgTest)){
lienImg = "/images/articles/" + article.getId() + ".jpg";
}else{
lienImg = "/images/articles/no-data.jpg";
}
article.setLienImg(lienImg);
article.setNumCategorie(rs.getInt("a.no_categorie")); article.setNumCategorie(rs.getInt("a.no_categorie"));
return article; return article;
} }
} }
public ArticleRepositoryImpl(JdbcTemplate jdbcTemplate, NamedParameterJdbcTemplate namedJdbcTemplate, UserService userService, EnchereService enchereService) { public ArticleRepositoryImpl(JdbcTemplate jdbcTemplate, NamedParameterJdbcTemplate namedJdbcTemplate, UserService userService, EnchereService enchereService, FileService fileService) {
this.jdbcTemplate = jdbcTemplate; this.jdbcTemplate = jdbcTemplate;
this.namedJdbcTemplate = namedJdbcTemplate; this.namedJdbcTemplate = namedJdbcTemplate;
this.userService = userService; this.userService = userService;
this.enchereService = enchereService; this.enchereService = enchereService;
this.fileService = fileService;
} }
@Override @Override
@@ -179,7 +198,7 @@ public class ArticleRepositoryImpl implements ArticleRepository {
if (!isFirstCondition) { if (!isFirstCondition) {
sql.append(" OR "); sql.append(" OR ");
} }
sql.append(" (e.no_utilisateur = ? AND e.montant_enchere = (SELECT MAX(montant_enchere) FROM ENCHERES WHERE no_article = a.no_article)) "); sql.append(" (e.no_utilisateur = ? AND e.montant_enchere = (SELECT MAX(montant_enchere) FROM ENCHERES WHERE no_article = a.no_article) AND a.date_fin_encheres <= NOW()) ");
isFirstCondition = false; isFirstCondition = false;
params.add(critere.getNoVendeur()); params.add(critere.getNoVendeur());
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 339 KiB

View File

@@ -119,8 +119,7 @@
<div class="card shadow-sm h-100 card-article"> <div class="card shadow-sm h-100 card-article">
<div class="row g-0"> <div class="row g-0">
<div class="col-md-4 d-flex align-items-center justify-content-center p-3"> <div class="col-md-4 d-flex align-items-center justify-content-center p-3">
<img th:if="${fileService.fileExists('/images/articles/' + article.id + '.jpg')}" th:src="'images/articles/' + ${article.id} + '.jpg'" alt="Image de l'article" class="img-fluid rounded"> <img th:src="${article.lienImg}" alt="Image de l'article" class="img-fluid rounded">
<img th:unless="${fileService.fileExists('/images/articles/' + article.id + '.jpg')}" th:src="@{/images/articles/no-data.jpg}" alt="Image de l'article" class="img-fluid rounded">
</div> </div>
<div class="col-md-8"> <div class="col-md-8">
<div class="card-body d-flex flex-column"> <div class="card-body d-flex flex-column">
@@ -159,7 +158,7 @@
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-6"> <div class="col-md-6">
<h6 class="text-muted"><strong><span th:text="#{article.details.label.end_date}"></span>: </strong></h6> <h6 class="text-muted"><strong><span th:text="#{article.details.label.end_date}"></span></strong></h6>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<h6 class="text-muted"><span th:text="${#dates.format(article.dateFinEnch, 'dd/MM/yyyy')}"></span></h6> <h6 class="text-muted"><span th:text="${#dates.format(article.dateFinEnch, 'dd/MM/yyyy')}"></span></h6>

View File

@@ -18,8 +18,7 @@
<div class="card-body"> <div class="card-body">
<div class="row"> <div class="row">
<div class="col-12 col-md-4"> <div class="col-12 col-md-4">
<img th:if="${fileService.fileExists('/images/articles/' + article.id + '.jpg')}" th:src="'/images/articles/' + ${article.id} + '.jpg'" alt="Image de l'article" class="img-fluid rounded"> <img th:src="${article.lienImg}" alt="Image de l'article" class="img-fluid rounded">
<img th:unless="${fileService.fileExists('/images/articles/' + article.id + '.jpg')}" th:src="@{/images/articles/no-data.jpg}" alt="Image de l'article" class="img-fluid rounded">
</div> </div>
<div class="col-12 col-md-8"> <div class="col-12 col-md-8">
<div class="mt-2 d-flex flex-column align-items-center"> <div class="mt-2 d-flex flex-column align-items-center">