Add Article service and DAO with criteria-based search functionality
This commit is contained in:
@@ -1,8 +1,10 @@
|
|||||||
package com.humanbooster;
|
package com.humanbooster;
|
||||||
|
|
||||||
|
import com.humanbooster.dao.ArticleDao;
|
||||||
import com.humanbooster.dao.UserDao;
|
import com.humanbooster.dao.UserDao;
|
||||||
import com.humanbooster.model.Article;
|
import com.humanbooster.model.Article;
|
||||||
import com.humanbooster.model.User;
|
import com.humanbooster.model.User;
|
||||||
|
import com.humanbooster.service.ArticleService;
|
||||||
import com.humanbooster.service.UserService;
|
import com.humanbooster.service.UserService;
|
||||||
import org.hibernate.SessionFactory;
|
import org.hibernate.SessionFactory;
|
||||||
import org.hibernate.boot.Metadata;
|
import org.hibernate.boot.Metadata;
|
||||||
@@ -32,10 +34,22 @@ public class App {
|
|||||||
));
|
));
|
||||||
|
|
||||||
UserService userService = new UserService(new UserDao(sessionFactory));
|
UserService userService = new UserService(new UserDao(sessionFactory));
|
||||||
|
ArticleService articleService = new ArticleService(new ArticleDao(sessionFactory));
|
||||||
|
|
||||||
List<User> existingUsers = userService.getAllUsers();
|
List<User> existingUsers = userService.getAllUsers();
|
||||||
existingUsers.forEach(u -> userService.deleteUser(u.getId()));
|
existingUsers.forEach(u -> userService.deleteUser(u.getId()));
|
||||||
|
|
||||||
userService.createUser(user);
|
userService.createUser(user);
|
||||||
|
|
||||||
|
List<Article> articles = articleService.findArticlesByCriteria("test", 3L);
|
||||||
|
|
||||||
|
articles.forEach(article -> {
|
||||||
|
System.out.println("\nArticle trouvé :");
|
||||||
|
System.out.println("ID: " + article.getId());
|
||||||
|
System.out.println("Titre: " + article.getTitle());
|
||||||
|
System.out.println("Contenu: " + article.getContent());
|
||||||
|
System.out.println("Auteur: " + article.getAuthor().getName());
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,9 +1,14 @@
|
|||||||
package com.humanbooster.dao;
|
package com.humanbooster.dao;
|
||||||
|
|
||||||
import com.humanbooster.model.Article;
|
import com.humanbooster.model.Article;
|
||||||
|
import jakarta.persistence.criteria.CriteriaBuilder;
|
||||||
|
import jakarta.persistence.criteria.CriteriaQuery;
|
||||||
import org.hibernate.Session;
|
import org.hibernate.Session;
|
||||||
import org.hibernate.SessionFactory;
|
import org.hibernate.SessionFactory;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
public class ArticleDao extends GenericDaoImpl<Article, Long> {
|
public class ArticleDao extends GenericDaoImpl<Article, Long> {
|
||||||
|
|
||||||
public ArticleDao(SessionFactory sessionFactory) {
|
public ArticleDao(SessionFactory sessionFactory) {
|
||||||
@@ -31,4 +36,38 @@ public class ArticleDao extends GenericDaoImpl<Article,Long> {
|
|||||||
return article;
|
return article;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<Article> findByCriteria(String keyword, Long authorId) {
|
||||||
|
|
||||||
|
Optional<String> optKeyword = Optional.ofNullable(keyword);
|
||||||
|
Optional<Long> optAuthorId = Optional.ofNullable(authorId);
|
||||||
|
|
||||||
|
List<Article> articles;
|
||||||
|
|
||||||
|
try (Session session = sessionFactory.openSession()) {
|
||||||
|
session.beginTransaction();
|
||||||
|
|
||||||
|
CriteriaBuilder cb = session.getCriteriaBuilder();
|
||||||
|
CriteriaQuery<Article> query = cb.createQuery(Article.class);
|
||||||
|
|
||||||
|
var root = query.from(Article.class);
|
||||||
|
|
||||||
|
query.select(root);
|
||||||
|
|
||||||
|
optKeyword.ifPresent(s -> query.where(
|
||||||
|
cb.like(
|
||||||
|
cb.lower(
|
||||||
|
root.get("title")), "%" + s.toLowerCase() + "%")
|
||||||
|
));
|
||||||
|
|
||||||
|
optAuthorId.ifPresent(l -> query.where(
|
||||||
|
cb.equal(
|
||||||
|
root.get("author"), l)
|
||||||
|
|
||||||
|
));
|
||||||
|
|
||||||
|
articles = session.createQuery(query).getResultList();
|
||||||
|
}
|
||||||
|
return articles;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package com.humanbooster.model;
|
package com.humanbooster.model;
|
||||||
|
|
||||||
import jakarta.persistence.*;
|
import jakarta.persistence.*;
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
public class Article {
|
public class Article {
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import com.humanbooster.dao.ArticleDao;
|
|||||||
import com.humanbooster.model.Article;
|
import com.humanbooster.model.Article;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
public class ArticleService {
|
public class ArticleService {
|
||||||
|
|
||||||
@@ -40,4 +41,8 @@ public class ArticleService {
|
|||||||
public Article findArticleByTitle(String title) {
|
public Article findArticleByTitle(String title) {
|
||||||
return articleDao.findByTitle(title);
|
return articleDao.findByTitle(title);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<Article> findArticlesByCriteria(String keyword, Long authorId) {
|
||||||
|
return articleDao.findByCriteria(keyword, authorId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user